专业的JAVA编程教程与资源

网站首页 > java教程 正文

PayPal严重漏洞可通过不安全的JAVA反序列化对象

temp10 2024-12-01 04:18:56 java教程 14 ℃ 0 评论

在2015年12月,我在PayPal商业网站(manager.paypal.com)中发现了一个严重的漏洞,这个漏洞的存在,使得我可以通过不安全的JAVA反序列化对象,在PayPal的网站服务器上远程使用shell命令,并且获取访问生产数据库的权限。我迅速将这个漏洞向PayPal的安全团队报告,这个漏洞随后很快就被解决。

具体细节:

PayPal严重漏洞可通过不安全的JAVA反序列化对象

在对PayPal的网站进行安全检测的时候,我被一个不同寻常的附件表单参数“oldForm”所吸引,这个参数在经过base64解码后,看上去比较复杂。

在经过一些研究后,我意识到这是一个没有任何标记的java序列化对象,它由应用程序处理。这就意味着你可以向服务器发送任何现有类别的序列化对象,和“readObject”(或“readResolve”)。如果想利用这个漏洞,你需要在“classpath”中找到一个合适的类别,一个可以进行序列化和具有有趣(只是站在开发利用的角度来看)的内置的“readObject”方案。你可以在最近的由FoxGlove Security安全团队所做的一篇文章中,了解到这项技术。一年前,Chris Frohoff (@frohoff)和Gabriel Lawrence (@gebl)做了一项伟大的工作,他们在Apache Common Collections库中找到了合适的类,这使得他们可以进行远程代码操控,并且还在他们的 github page主页上公布了“ysoserial”有效负载生成工具。

开发利用:

我迅速下载了这个工具,然后生成了一个简单的有效负载,并向我自己的服务器上通过执行“curl x.s.artsploit.com/paypal”shell命令,发送DNS和HTTP请求:

然后我向程序服务器发送了那个在“oldFormData”参数中的base64加密的有效负载,之后令我印象深刻的是,当来自PayPal网络的请求在我的NGINX访问日志中出现的时候:

我意识到我可以在manager.paypal.com网页服务器上执行任意的操作命令,此外,我可以建立一个后台连接,连接到我喜欢的服务器上,比如,上传和执行一个后门。结果是,我可以获取manager.paypal.com应用程序所使用的生产数据库的访问权限。

取而代之的是,我只是读取“/etc/passwd” 文件,通过把它发送到我的服务器上,并将它所为漏洞的例证:

我还录制了一段视频,关于如何重新生成此漏洞,并将它向PayPal安全团队进行报告。

在那之后,我在manager.paypal.com程序中发现许多其他端点,它们同样使用序列化对象,也同样可以被利用。

大约一个月后,PayPal给了我一笔奖金,用来奖励我此次对该漏洞所做的报告,但据我所知,另一位研究员Mark Litchfield在2015年12月11日也对类似的漏洞做了报告,比我还提早两天。但不管怎么说,PayPal决定给我一笔奖金,我尊重他们的决定。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表