XSS实用绕过姿势总结

1. 嵌套字符以应对字符删除型过滤

如:xss-labs-master level7

image-20230418113233600

image-20230418113429060

此处直接删除了字符script和href

可以采用嵌套的方式绕过

  • hhrefref
  • sscriptcript

此时,只会删除掉特定的连续字符串,但是剩下的字符又会重新组合成这个字符串,达成绕过的目的。


2. 尝试使用锚点注入的方式绕过(不一定会成功)

锚点注入: 在URL的井号后面添加JavaScript脚本是一种称为“锚点注入”的技术,它可以实现在页面加载时执行JavaScript代码。但是,这种技术并不是所有浏览器都支持,而且也存在一些安全风险。

如果浏览器支持锚点注入,那么在URL的井号后面添加JavaScript脚本是可以运行的。例如,以下URL会在页面加载时弹出一个警告框:

1
http://example.com/page.html#<script>alert('Hello, world!');</script>

但是,为了保证网站的安全性,大多数现代浏览器已经禁止了锚点注入这种技术。因此,不建议在URL中使用锚点注入来执行JavaScript代码,而应该使用更安全的方法,如在HTML文档中嵌入JavaScript代码或在外部JavaScript文件中编写代码。

例:dvwa DOM型XSS level high

image-20230413193725293

这里对url中的字符进行了严密的过滤,但是没有过滤掉 ‘#‘

在URL最后添加上#和脚本语句

image-20230413204911747

发现弹窗了

image-20230413205049632

检查网页,发现选项English部分的下面多了script标签()

3. script标签被截断的应对方法 如截断成s_cript

比较简单,不放图举例了

  • 大小写绕过
  • 使用img标签
  • 使用a标签
  • 给该文本框或下拉列表添加事件属性

4. 存储型XSS限制输入字符个数的应对方法

存储型,目的是把脚本存入服务器数据库里

此时可以通过用浏览器检查功能修改标签的限制属性,再往里边写代码

例:dvwa存储型XSS

image-20230416153751520

存储型,注意到有两个文本框,一个是姓名,一个是评论消息。

可能只对评论信息做了过滤,名字通过前端限制了输入字长,但没做过滤。

尝试修改名字的限制长度,然后在名字的文本框发脚本。

image-20230416154209736

改成100,然后痛快地写脚本

image-20230416154853881


5. 页面回显的字符被转义,而输入框内容未被清空

此时可以推断出输入框value属性的值未被清空,可以使用双引号或单引号闭合value,再添加属性

例:xss-labs-master level2

image-20230416163152800

image-20230416164148387


6. 使用unicode编码绕过

当URL中 script、onclick、href 等特殊字符串被过滤掉时,可以将脚本部分使用unicode编码,再将编码后的字符串填入达成目的。

例: xss-labs-master level8

image-20230420163308647

image-20230420163537287

image-20230420163557363