XSS的绕过姿势(一)
xss的绕过姿势(一)
本章提及的几种姿势将在dvwa靶场进行演示
下拉列表DOM型XSS的绕过姿势
安全等级:Medium
URL:
1 | http://localhost:8081/dvwa/vulnerabilities/xss_d/?default=English |
猜测与尝试
注意到有下拉列表,且在URL中修改default=后面的值时能回显至页面的下拉列表中
例:
1 | http://localhost:8081/dvwa/vulnerabilities/xss_d/?default=xxxxxxxx |
尝试提交payload
提交后发现default后面的值又变回English了
猜测是做了过滤,检测到尖括号或者关键词就替换回 English
查看源代码
1 |
|
原来是检测到 <script 就马上重定向
尝试大小写绕过
失败,查资料后发现stripos()函数是不区分大小写的
stripos () 函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)。 注释: stripos () 函数是不区分大小写的。
解决方案
注意到关键点:下拉列表
下拉列表html源码如下
考虑让下拉列表提前闭合,让回显的选项暴露在外。
闭合直接闭合 select 标签“:(不用担心没有闭合option标签,浏览器很智能的,会给你补全)
成功,选项都暴露在外边了
那么换成xss代码(script标签被过滤了,换img标签)
成功。
安全等级:high
猜测与尝试
难度提升,继续上传上面构造的payload
马上被重定向了
猜测1:img标签被过滤
猜测2:select标签被过滤
猜测3:无论在default后面加什么都不会生效
进行验证:
发现无论在default后面输入什么都会被重定向
查看源码:
1 |
|
原来是进行了白名单过滤,只允许提交以上的值
解决方案
锚点注入技术的运用
锚点注入: 在URL的井号后面添加JavaScript脚本是一种称为“锚点注入”的技术,它可以实现在页面加载时执行JavaScript代码。但是,这种技术并不是所有浏览器都支持,而且也存在一些安全风险。
如果浏览器支持锚点注入,那么在URL的井号后面添加JavaScript脚本是可以运行的。例如,以下URL会在页面加载时弹出一个警告框:
1 http://example.com/page.html#<script>alert('Hello, world!');</script>但是,为了保证网站的安全性,大多数现代浏览器已经禁止了锚点注入这种技术。因此,不建议在URL中使用锚点注入来执行JavaScript代码,而应该使用更安全的方法,如在HTML文档中嵌入JavaScript代码或在外部JavaScript文件中编写代码。
关键: 在井号后面添加javascript脚本
在URL后面加井号,在井号后面随便加点什么
没有被重定向!
接下来 换成js脚本
第一次回车没反应,第二次回车成功执行alert语句
这是是GPT关于我以上疑问的解释。我信你个鬼!!!!
还得靠自己琢磨:
分析新的问题
在井号后面随便加点什么东西:如aaaa
发现第一次回车时,页面下拉列表选中的还是English
第二次回车时,下拉列表中才变成English#aaaa
STFW,看到了这个
仅改变井号后面的内容,只会使浏览器滚动到相应的位置,并不会重现加载页面。
改变策略,同样在井号输入aaaa。但是只回车一次,没反应。然后右键,重新加载
起到了和两次回车一样的效果:
可见改变井号后面的内容,然后回车时,这属于是修改操作,没有重新加载页面。
而点击URL,再次按回车时,此时的回车会导致页面重新加载。
所以会不会是因为缓存的原因?
再次请GPT出山
第一次回车时,由于没有重新加载页面,此时井号后面添加的脚本还没有被缓存到浏览器
第二次回车时,浏览器重新加载了页面,此时井号后面的脚本被缓存到了浏览器,并被加载执行。