[张三的渗透日记]一次xss-bypass
2023-3-7 15:52:51 Author: www.freebuf.com(查看原文) 阅读量:20 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

做项目时,遇到了一个形式上,但是存在自定义的waf拦截,本篇简单的讲下我的绕过思路。

这个xss的发现很简单,就直接加上">就能直接看出来是存在XSS的了
image

后续的正常思路就直接输入"><img src=1 onerror=alert(1)>,然后G掉
1678170530230.png
所以能够意识到是存在waf拦截的,我们上面输入的XSS语句太明显了,被检测出来了,所以需要考虑怎么绕过。
在XSS的绕过中,我一般是倾向先慢慢删,把payload删到不拦截为止,所以我直接删完了
通过尝试发现<img就直接被拦截,所以尝试更换使用<image>可以,然后就正常的向后构造,直到构造到这里<image src=| onerror=alert(1)//>又G了
1678171078187.png
通过把alert删除后发现能够正常访问
1678171221929.png
所以我们需要考虑怎么把alert绕过去

函数替换

首先第一思路肯定是用confirm或者prompt替换,然后发现全都过滤了
1678171426903.png

编码绕过

一般编码绕过我都只尝试Unicode编码,将prompt编码为pr\u006fmpt,结果还是被拦住了
1678171563204.png

混淆绕过

在一般的waf拦截中,大多都是采用的正则的方式进行匹配,一般不会是只要某个字符出现就拦截,所以我们在绕过waf的时候可以考虑混淆

比如这个代码

this[`al`+/ert/.source](1)

制作一个alert函数来进行弹窗,这种构造在面对正则的匹配时一般是能绕过去的,所以当我输入这个payload时很明显的发现自动的给我们的payload改动了一些,导致弹窗失败
1678172044095.png
后续尝试这种构造也是存在上面的这个问题,我们输入的payload会被改动,在最后会有个=

window['a'+'l'+'e'+'r'+'t'](123)

所以这条路就只能宣告暂时无法走通了

目前大致尝试了多种方法,均无法利用,所以后续能够考虑的比较有效的思路就只有两种了

  1. 模糊测试,FUZZ看看有没有什么特殊字符能够拼接然后绕过

  2. 对上面的混淆绕过重新考虑利用方式

由于我使用的是热点,在简单的FUZZ后,发现效率很慢,所以转变思路在混淆绕过上面了。
跟具我多次的尝试,发现当我们输入的paylaod中带有如下等符号时,会自动的在最后给我们加上一个=或者是直接删除掉我们的特殊符合等,导致我们的payload失效

' " ` /

所以后续的考虑点就变成了,不用任何特殊符合的混淆,且网站对编码进行了严格的检测,所以还不能使用编码来混淆。
所以使用top对象,转30进制,构造paylaod为:

top[8680439..toString(30)](document.cookie)

最后成功弹窗
1678174182742.png

这个waf属于自研的,比较简单,在日常遇到的waf中,通用的思路还是在上面的方法走不通后,还是倾向于去FUZZ特殊字符比如这种:
1678174639359.png


文章来源: https://www.freebuf.com/articles/web/359617.html
如有侵权请联系:admin#unsafe.sh