前言
最近发现xss学的知识点都忘干净了,来打一打靶子并且记录一下这些过关经历。
level1
特性:
1.get型传参
2.无任何过滤
过关操作:
直接构造payload传参过关
level2
get型传参
我们在输入框中输入payload发现并没有弹窗。
查看网页代码。
他上面显示的内容已经把我们的<>给过滤,无法执行xss。
但是发现下方输入框代码并没有给我们过滤。
在此处构建payload过关。
没有过滤<>,我们直接闭合他们的语句直接插入我们自己的xss语句。
"> <script>alert("xss")</script><"
总结 :在input标签中的xss,可以通过闭合双引号实现插入语句
level3
输入payload,无反应,查看代码。
他过滤了双引号,语句又在""内。
绕过思路:利用点击事件属性进行绕过。
这一关其实网上的博客都讲的很含糊,细究他其实有一定运气成分。
他的第一个'会转义成为",后面会补上一个="。(他的这个转义函数对单引号的转义乱七八糟的)
我们输入事件刚好要输入=,所以输入='他就会代替后面的="。但其实现实没有这么便捷的给我们提供方便的事情。
我们只要知道过滤双引号单引号可以用事件绕过就好了。
解法:构造' οnclick='alert()
总结:在双引号之间无法绕出双引号的情况,利用鼠标事件绕过。
level4
检测:他会删除<>/符号,不过滤单引号,过滤"会替换成" =",但如果你反客为主输入" ="他就不转义了。
解法:直接跟上个一样,可以直接双引号闭合就好了
构建:" οnclick="alert()
总结:这个靶场的转义有问题,给我们这样的解法。毕竟谁家文本编辑处出现这种符号不正常的情况肯定加班就得修复。
level5
检测:
对onclick的on做了检测,会转化为o_n
对<script>进行过滤,给你加一个_(实战留言板,评论区等不会出现这种操作)
未对<>进行转义,未转义<>就有无限可能。
思路:不转义<>直接不跟他啰嗦,闭合他的语句自己构建个新的完事。这里利用<a>标签配合javascript伪协议绕过on和<javascript>(很少有这种不转义<>的网站了)
payload: "><a href='javascript:alert(123);'>点击搜索</a>
总结:遇到甘愿更改用户输入内容来保证防御的网站,过滤on和<script>可以尝试使用伪协议
level6
检测:对on,script,href做了过滤。
思路:大小写绕过
payload:"> <ScRiPt>alert()</ScRiPt><"
总结:对于关键词判断可以使用大小写绕过尝试
level7
检测:他是把我们的输入的on关键字给删除,而且没有循环检测,只检测一次,那么包夹一下就能绕过
payload:" oonnclick="alert(123)
总结:遇到这种另类的几乎真实网站没见过的直接把我们某些字符给删除的操作,可以尝试包夹的方式绕过。
level8
检测:把我们输入的内容转交给下方链接的href属性。
下方链接同时过滤javascript。同时转义&和"。
但是输入框没有过滤&
思路:通常情况下网站使用的安全框架会把<>和&一起转义。但是他没有转义,所以我们可以用html十进制或者16进制码来绕过。
实体码:HTML实体编码对照表 - Oren
payload:
javascript:alert("jaden")
总结:遇到没有转义&的就有了无限可能,用实体码绕过。(虽然大多数直接给转义)
level9
检测:input标签都过滤了,绕不了,但是看源码发现链接他检测你有没有http://,没有转义&
思路://是javascript的注释符号。刚好用来绕过。
payload:javascript:alert("jaden")//http://www.baidu.com
总结:这个看源码才能看出来,实战看命。
level10
检测:这关没有输入框,有一个get传参。
查看网页源码能发现三个隐藏input标签:
type=hidden会隐藏输入框。
思路:尝试get传参给这三个input标签赋值。找到那个能够被赋值的标签,然后进行一个语句构造利用注释符把他提取出来。
解题过程:
我们传参看一下情况:
http://192.168.128.1/xss/level10.php?keyword=well%20done!&t_lick=aa&t_history=bb&t_sort=dd
再看一眼源码。
t_sort变了。开始整吧。
构造payload:
" type="text" οnclick="alert()"//
总结:其实这种难度挺大的,毕竟真的实战中代码一大片一大片的很难找这种隐藏的,如果真找到了也不一定想这个一点也没有过滤,作为一个思路吧。
总结
可以看到他不转义符号咱基本都好绕过,一旦转义了符号基本上就很难绕过了。即使绕过也需要一定的运气成分,后面的利用也会很困难。