XSS各种过滤手段,如何绕过写payload
XSS简介
XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,意思就是说可以任意执行js代码,包括js的而已代码
如何进行payload的构造:
我们知道xss漏洞不会这么简单的被你发现,通常来说开发者都会对用户输入的东西进行过滤,比如简单的就是 将<script>
<ifraname>
还有< 等进行过滤,用户输入的时候就可以防止js命令随意的执行,但是我们知道这种方法并不是绝对安全的,我们可以通过其他标签来构造payload,在ctf比赛中非常喜欢考察。
事件过滤:
例如:
1 | onbeforeprint |
一些常见的fuzz,我们在渗透测试中可以进行输入测试,对它进行fuzz测试
测试到没有进行过滤的事件,那么我们可以用来构造payload
1 | <a href="javascript:alert('xss')">点</a> |
敏感关键词(字符串过滤)
关键字过滤大部分是针对敏感变量或函数而进行的,如cookie、eval等,这部分的过滤可通过字符串拼接、编码解码等方法进行绕过。
字符串拼接与混淆
在Javascript中可以通过调用 数组来执行xss命令,比如
1 | window['alert'](/xss/) |
将base64转换为原来的,输出的那么就是 alert 了
编码解码
1 | xss漏洞中常见的编码方式 |
过滤“.”
在Javascript中使用with 可以设置变量的作用域,利用此特征可以对“.”进行过滤
1 | with(document)alert(cookie); |
空格过滤
在标签可以使用 0x09、0x10、0x12、0x13、0x0a 等代替空格进行过滤
1 | https://xxx.com/xss.php?text=<img0x09src=javascript:alert('xss')> |
SVG标签
svg标签和语句遵循的规则是直接继承xml而不是html,区别在于svg内部的script标签中允许在部分进制或编码后的字符(比如实体编码)
字符串集编码导致绕过
当字符集编码存在问题时常常会导致一些出乎意料的绕过。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Carrotの小窝!