挖洞经验 | 看我如何发现Paypal内部信息泄露漏洞

栏目: JSP · 发布时间: 6年前

内容简介:本文我要分享的是,在Paypal网站manager.paypal.com上的某个页面存在“表达式注入“漏洞(Expression Language Injection),利用该漏洞我可以间接获取到Paypal系统的内部IP、端口和方法类等敏感数据信息。我从2017年9月开始参与漏洞赏金项目,几乎每天都会花点时间来做一些Web漏洞挖掘测试,我比较喜欢用PayPal的漏洞众测范围非常广泛,只要是涉及*.paypal.com的网站都算。一开始的套路都是相似的:枚举子域名、枚举可访问文件、枚举目录….。经过几天的

本文我要分享的是,在Paypal网站manager.paypal.com上的某个页面存在“表达式注入“漏洞(Expression Language Injection),利用该漏洞我可以间接获取到Paypal系统的内部IP、端口和方法类等敏感数据信息。

我从2017年9月开始参与漏洞赏金项目,几乎每天都会花点时间来做一些Web漏洞挖掘测试,我比较喜欢用 bountyfactory.io 这个漏洞众测平台。在今年2月份,我给自己定了一个目标:发现PayPal的一个漏洞。

前期发现

PayPal的漏洞众测范围非常广泛,只要是涉及*.paypal.com的网站都算。一开始的套路都是相似的:枚举子域名、枚举可访问文件、枚举目录….。经过几天的折腾研究,我发现了一个有意思的页面:

挖洞经验 | 看我如何发现Paypal内部信息泄露漏洞 我当时的反应这样的:

挖洞经验 | 看我如何发现Paypal内部信息泄露漏洞 可以看到,这个页面中有好多个可填写区域,但是没提交按钮,和一些新式网页相比,这个页面貌似有些”老旧“,我们尽量通过它来看看能得到些什么东西吧!更奇怪的是,我的网站架构识别插件WappAlyzer竟然好像也失灵了,只识别到了 “Apache”,但却没任何版本信息: 挖洞经验 | 看我如何发现Paypal内部信息泄露漏洞

测试发现

好吧,那我来尝试看看网站会不会发生什么有意思的响应,所以,我在几个区域中填写了字段,并试图向Paypal发起请求:

挖洞经验 | 看我如何发现Paypal内部信息泄露漏洞 思路一:尝试发现反射型XSS

只可惜这招非常不灵,无疑 PayPal 的WAF非常管用,我没能发现任何可以绕过它的方法,当然也有可能是我太菜了。

思路二:尝试注入漏洞

由于反射型XSS的测试无效,我决定测试一些我之前在其它众测项目中学到的注入型Payload,即:

{7*7}
{{7*7}}
${7*7}

没想到,最后这种${7*7} Payload 竟然成功了,能有效返回 7*7 表达式的结果49:

挖洞经验 | 看我如何发现Paypal内部信息泄露漏洞 我就乐了 挖洞经验 | 看我如何发现Paypal内部信息泄露漏洞 既然能让Paypal服务器来执行一些这种数学操作,这就有意思了,但是还不能说明问题,于是,我决定再来研究研究目标服务器上的 Java 服务,以及这种”${param}”参数的运行机制。

“JSTL, JSTL everywhere”

在我朋友 Nico 的帮助下,最终我发现,在这个页面中存在一个JSTL标记库,并且可以执行多种有意思的表达式语法命令。

JSTL:在JSP页面中,使用标签库代替传统的Java片段语言来实现页面的显示逻辑中,由于自定义标签很容易造成重复定义和非标准的实现,因此,JSP 标准标记库(JSP Standard Tag Library,JSTL)就出现了,JSTL 是一个实现 Web 应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断、数据管理格式化、XML 操作以及数据库访问。

该漏洞的有趣部分是关于JSP页面和Servlet属性的。现在我们已经了解了如何访问请求参数、标记头、初始化参数、cookies和作用域变量,JSTL隐式对象还有一种功能可以测试利用:也就是访问servlet和JSP属性,例如请求的协议或服务器端口,或者容器支持的servlet API的主版本和次版本。通过pageContext隐式对象,你可以发现更多此类数据信息,通过这些发现的数据信息,可以实现对请求、响应、会话和应用程序等servlet context接口信息的访问。ServletContext,是一个全局的储存信息的空间,被Servlet 程序用来与Web 容器通信。

由于pageContext对象是JSP中很重要的一个内置对象,其pageContext隐式对象包含了多种属性:

pageContext.request
pageContext.response
pageContext.properties
pageContext.page
pageContext.servletConfig
pageContext.servletContext

这些属性我就不一一介绍了,但它们都是用于开发者和Web页面的交互,以及servlet 和 server服务器之间的通信。于是,我就通过一些公开文档和fuzzing方法,尝试来发现一些可用参数,我把以上属性涉及到的相关请求Payload全部添加到BurpSuite的Intruder功能中去:

挖洞经验 | 看我如何发现Paypal内部信息泄露漏洞 很好,这样,虽然可能性有限,但是不是就可以用形如SSRF的方式来提取出PayPal目标服务器中的信息了呢?以下是最终的测试效果图: 挖洞经验 | 看我如何发现Paypal内部信息泄露漏洞

利用 fuzzing 我发现我之前没发现的一个参数:${pageContext.servletContext.docRoot},利用它可以显示服务器上编译过的WAR文件相对路径。

可以实现RCE漏洞吗?

有了以上的发现之后,我尝试利用表达式注入来实现RCE漏洞,但最终还是不行。参考了很多JSTL表达式注入相关的writeup和PoC,这里的JSTL EL注入还是无效,我猜想可能由于PayPal服务器上的WAF阻拦了我的注入测试请求,所以最终响应的总是一些301跳转页面。

我也尝试用最基本的Payload方式来测试:${T(java.lang.System).getenv()},但还是不行,服务器响应总是在我注入时发生停止。当然,也有可能还是我技术不行,没找对方法实现RCE。最终,我只好如此这样把这些发现提交给了PayPal ,希望漏洞有效。

漏洞报送进程

[2018-03-06] 发现漏洞
[2018-03–07] 报送给 PayPal
[2018-03–08] 得到PayPal响应 : 安全风险不明,无条件获得赏金,这….
[2018-03-29]  再次得到PayPal响应 : 漏洞有效
[2018-04-03]  漏洞修复
[2018–04-11]   获得不菲赏金和2018年6月名人堂

*参考来源: medium ,clouds 编译,转载请注明来自FreeBuf.COM


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

查看所有标签

猜你喜欢:

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

CSS实战手册(第2版)

CSS实战手册(第2版)

[美] David Sawyer McFarland / 俞黎敏 / 电子工业出版社 / 2010-6 / 69.80元

本书从介绍最基本的CSS知识开始,到建立用于打印网页的CSS和改进你的CSS习惯的最佳实践。将关于CSS的选择器、继承、层叠、格式化、边距、填充、边框、图片、网站导航、表格、表单、浮动布局、定位网页上的元素,以及用于打印网页的CSS等技术通过逐步地讲解与教程串联了起来。每章内容从简单到复杂,一步一步地建立起一个完整的教程示例,并在每章都会详细讨论一些技巧、最佳实践和各浏览器之间一致性的兼容问题及如......一起来看看 《CSS实战手册(第2版)》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具