项目展示

CTF-Web:xxe+jar协议缓存实现命令执行

2025-07-10

0x01 代码分析

object方法

object方法通过@RequestParam注解获取object参数,然后根据该参数拼接出一个文件路径file:///home + object。接着调用check方法检查该文件是否存在 <script> 标签,如果存在则返回 X E , X E , XX E;
否则读取该文件并将其解析为SCXML状态机,然后执行该状态机并返回 `X ME

check方法

该方法用于检查文件中是否存在<script>标签。

首先通过
DocumentBuilderFactory.newInstance()创建一个DocumentBuilderFactory实例,然后通过newDocumentBuilder()方法创建一个DocumentBuilder实例。

接着使用builder.parse(fileName)方法将文件解析为一个Document对象,最后通过getElementsByTagName("script")方法获取所有<script>标签元素并检查其数量,如果为0,则返回true,否则返回false

xxe方法

xxe方法通过@RequestParam注解获取uri参数,然后使用DocumentBuilder将该参数解析为一个Document对象。接着遍历该Document对象的所有子节点,并将其文本内容连接起来返回。由于没有对解析出来的文本进行任何过滤或验证,因此存在XXE漏洞。

0x02 漏洞利用

  • object方法中存在SCXML解析漏洞,攻击者可以通过object参数构造一个包含恶意SCXML状态机的文件,从而在服务器上执行任意代码。
  • xxe方法中存在XXE漏洞,攻击者可以通过uri参数构造一个恶意XML文件,从而读取服务器上的任意文件。

通过xxe读取根目录,发现readflag,也可以列目录获取缓存文件地址:

通过jar协议缓存文件特点,通过工具使文件解压后不删除,通过xxe列目录获取tmp文件路径

CTF-Web:xxe+jar协议缓存实现命令执行

https://github.com/pwntester/BlockingServer

构造命令执行,通过assign绕过script标签过滤:

  • Payload

复制代码

  • 目录穿越指定缓存文件

POST/object HTTP/1.1 Host: 192.168.2.42:8080 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 126 object=../../../../../../../../../../private/var/folders/86/8qfmjpl965j4x4ykyk1sfkf80000gn/T/jar_cache12949212024815436877.tmp 复制代码

  • 通过el表达式,注入内存马:

复制代码

0x03 其他标签:

标签

复制代码

标签:

加拿大28

复制代码

标签:

复制代码



from https://1oecho.github.io/mCQ5Tu20m/