网站存在一个有意思的功能点,通过上传Excel会将内容显示在页面上,也就是说后端会解析Excel
Excel是通过XML来存储数据的,也就是说网站解析了XML,那么我们就可以在XML中注入语句来尝试攻击
新建一个"新建 Microsoft Excel 工作表.xlsx",将后缀改为.zip并解压
尝试在"[Content_Types].xml"中注入语句,之后再压缩回.zip然后重命名为"新建 Microsoft Excel 工作表.xlsx"
%b;%c;%xxe;]>
在自己服务器构造x.dtd,并开启access.log日志
">
使用网站解析Excel,查看日志
成功调用外部实体
利用方式不用多说了吧,可以利用伪协议读取文件或系统命令执行
">
登录上后修改密保(忘记密码时通过回答问题来修改密码)进行抓包
尝试用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
找到一个登录框,直接登录,看到一排按钮
个人 | 登录日志 | 设置 |
本次漏洞就出在这个登录日志上,点开它
IP | 时间 | 状态 |
x.x.x.x | 2022 | 成功 |
到这里就应该有思路了,页面显示了用户的IP,也就是存在交互点,那么我们就可以尝试将JS注入IP一栏
状态显然不止有"成功",肯定也有"失败",不然它就没有意义了,也就是说如果存在注入,我们无需登录即可将JS注入用户界面,进而在用户登录后造成攻击
现在的问题是,如何修改IP,也就是探究网站识别用户IP的方式是什么
简单试了一下添加XFF请求头,X-Forwarded-For:
先故意输入错误的密码,然后去掉XFF请求头正常登录
成功弹框,验证了漏洞存在,关掉弹框看一下,逗号左边就是JS代码了,只不过看不到
IP | 时间 | 状态 |
x.x.x.x | 2022 | 成功 |
,x.x.x.x | 2022 | 失败 |
x.x.x.x | 2022 | 成功 |
先插一下试试
结果页面显示了并没有出现弹框,说明<>被编码了
添加一个链接然后发表,并进行抓包
将href值修改为javascript:alert(1);
成功弹框,也就是说有些标签的<>不会被编码
再找一个绕过方式
添加一个图片然后发表,并进行抓包
修改为
结果并没有出现弹框,查看前端代码,onerror被替换为空了
尝试双写绕过onerroonerrorr,让中间的onerror被替换为空,最后保留一个onerror
成功弹框,可以领钱了
本文为免杀三期学员笔记:https://www.cnblogs.com/Night-Tac/category/2231935.html