前言
对xss的绕过进行了系统的学习与实践后,重新审视一下xss,对他的绕过进行一个总结。
(当然我也是个小白,这些也是我当时瞎鸡儿乱搞绕过了几个xss自己做的小总结)
可能有点丑陋,献丑了。
好博客推荐
这段时间的实践中,我看了这篇博客,里面内容十分详细,我这里推荐一下,也以便以后好寻找使用:
没错就是他,特别赞。
基本的绕过标签等都在这个博客中,我就省略了,感觉我再怎么整理也比不上他。
我这里整理一下我遇到的实战中的一些特定条件下的xss绕过思路。
前置测试阶段
1.随便输入看源码
我喜欢先找几个有回显的地方看他的源码,了解一下他的闭合情况。
2.输入所有用到的特殊符号,观察他的转义或者是过滤情况
< > ' " & # /
长度限制突破
很多时候我们会遇到一些输入框,看起来可能能绕过,但是它限制了长度,导致很难办。
1.前端校验
这个没什么好说的,看标签里的max属性直接删除就行。
2.选择性编码
有时候我们是需要编码绕过的,但是我们直接全部编码就会很长,对于那些检测关键字的,我们可以选择性的在关键字中只编码某一个字符,尽最大程度减少长度。
关键词检测突破
很多时候,尤其是网站安装了waf之后,基本上都会检测我们的关键词。这时候就需要对关键词进行一下修饰。
1.最简单的替换
替换标签,替换属性,替换为他不检测的标签或者属性。
2.html编码(不过滤编码字符)
但是这种编码有个前提,我们他不会过滤我们的编码字符;&#
3.html编码(仅过滤;)
这个是我实战中遇到的一个,他会过滤alert和;。我们可以把这个检测字符末尾的t给编码,同时去掉;,这样配合()就能完成一个绕过。
遇到这种检测关键词,并且过滤;的情况,可以尝试编码关键词的最后一个词配合空格或者其他的词来进行绕过尝试
4.eval绕过
这种通常是针对过滤我们执行的代码的检测,我们获取cookie等操作被检测的话,如果他没有过滤eval,就可以用很多种编码类型去进行绕过。
5.空格绕过
在他检测的关键字之间添加空格,他会检测不到我们的关键词,但是html是可以正常执行我们的语句的。(在一定的条件下可以执行)
过滤删除类型绕过
这类检测的形式是强行把我们的关键词或者字符给删除。针对他删除的特性可以(尝试)一下几种方法。
1.嵌套绕过
比如他过滤on(一种很通杀的过滤,直接干掉大部分的自动触发属性),我们可以使用oonn来尝试过滤,因为他可能会过滤一次,如果他没有循环检测过滤的话,我们就可以利用这种方法绕过。
2.大小写绕过
有可能他没有写转化为小写的代码,导致被绕过。
3.编码绕过
这个前提还是别把我们的符号给过滤掉
4.eval绕过
添加类型过滤绕过
有时候他会强行给我们关键字添加-导致我们无法组成关键字。
这种就是不能嵌套过滤,只能大小写配合编码绕过,或者直接 换!
隐藏标签绕过
有些标签是用来接收信息的,但是他设置了type=hidden,导致我们看不到,我们只需要再加一个type在他前面就可以绕过
数据包中构造xss
有些xss是出现在数据包中的,比如他可能会检测我们的浏览器类型,或者是referer等,这种我们可以通过在数据包中构造xss语句进行一个测试xss。
符号过滤绕过
1.html编码绕过
用于没过滤& # ;这种情况
2.十六进制绕过
javascript也可以识别16进制,所以也可以尝试使用16进制在javascript中进行绕过。
3.双\\+unicode绕过
javascript也可以识别这个,所以也可以用他来拼凑成<>进行一个绕过