Yahoo 開始有了 Bug Bounty 制度! 緣起也滿有趣的,國外有個資安專家找到 Yahoo 的 XSS 漏洞結果回報後只得到 $12.50 Yahoo Company Store 優惠卷,結果當然超不爽的,只好 po 個 爆料文 XDDD
結果開始各界撻伐 Yahoo 事情越演越烈,Yahoo Security Team 的 Director 只好發文解釋
(不負責任標題翻譯: 對,我就是那個送你感謝潮T的人)
內文大意整件事件的始末,說明 Yahoo 並沒有完善的漏洞通報流程機制(商品卷還是自掏腰包買的),說明會改善這個機制,會有新的獎勵機制在 10/31 公佈,並且新的機制可追溯到 7/1 號後回報漏洞的人,並承諾會有 $150 - $15000 的 Reward(所以至少會有 150 美金耶$_$)
當初看到時覺得挺有趣的就找了幾個問題回報 Yahoo,Client Side 如 XSS 就算了,比較關注在 Server Side 上面的弱點(可以直接打進 Server 比較爽)
主要回報流程是寄到 security@yahoo-inc.com 這個信箱進行回報的動作(英文來來回回了好多信,英文苦手嗚嗚T_T),經過回信確認且修補完成後來發個文章記錄一下細節!
有找過兩個弱點,預計分成兩篇文章記錄一下攻擊思路跟細節
第一篇是 台灣 Yahoo Blog 的任意檔案下載漏洞,第二篇是 *.login.yahoo.com Remote Code Execution 遠端代碼執行漏洞。
其實兩個都不算少見的 Vulnerability,發現也不難,只是比起一般弱點,第一個需要細心以及一些經驗,第二個必須要瞭解漏洞原理並且改寫漏洞攻擊代碼
正文開始
Yahoo Blog 以及無名小站將於今年關閉,官方提供了一個線上備份下載的服務,無名小站以及 Yahoo 部落格有著我國高中時期青春美好回憶,到底這樣的服務有沒有問題呢? 讓我們繼續看下去!
點擊備份,完成後會得到一個鏈結,
http://tw.download.blog.yahoo.com/eol/user_start_download.php
?filename=<username>-twblog.zip
點了可以下載(廢話)
本著閒閒沒事找事做的心態,<username>
的部分改成別人的使用者名稱會成功嗎?
登登,看起來失敗了 T__T
不過沒關係我們可以來研究研究,把網址改成
http://tw.download.blog.yahoo.com/eol/user_start_download.php
?filename=./<username>-twblog.zip
會怎麼樣呢?
It works(感動T_T)
看起來是有東西可以玩玩,踹踹 passwd
http://tw.download.blog.yahoo.com/eol/user_start_download.php
?filename=../../../../../etc/passwd
失敗T_T 不過 /tmp 下的檔案卻可以成功,
http://tw.download.blog.yahoo.com/eol/user_start_download.php
?filename=../../../../../tmp/.ICE-unix
大致先猜想有 open_basedir 之類的限制,那換成一個逗點看看呢?
http://tw.download.blog.yahoo.com/eol/user_start_download.php
?filename=.
檔名是 user_start_download.php
大小是 8.0 KB
不過實際下載後,內容是空的,大致可以先猜想一下程式邏輯檔名部分先取得,最後再組裝路徑去讀取(或者發生某些錯誤),再把網址換成
http://tw.download.blog.yahoo.com/eol/user_start_download.php
?filename=/
檔名變成了 7fee0293d346458a97363c56378e68d5,
配合前面幾個測試,大致可以猜想程式的邏輯,檔案存放的路徑在
<user-hash> / <username> -twblog.zip
不過似乎 zip 存放的地方與 webroot 不同,又有 open_basedir 的限制不能跳出來,不過如果我們可以猜到 web 路徑或是 web server 的設定檔路徑,還是有機會可以繼續玩下去的!
經過一些猜測搜尋以及發揮你駭客的直覺!會發現設定檔在:
/home/y/conf/yapache/yapache.conf
直接讀了啦!!!
http://tw.download.blog.yahoo.com/eol/user_start_download.php
?filename=../../../../../home/y/conf/yapache/yapache.conf
BINGO ^____^ 由於 Server 又是 Unix 或是 bsd-like 的系統,所以可以直接讀取目錄
http://tw.download.blog.yahoo.com/eol/user_start_download.php
?filename=../../../../home/y/share/htdocs/intlblogs/
最後就是讀 PHP 的 Source Code,來看一下程式邏輯到底是怎麼寫的?
$filename
從 GET 取得,沒經過檢查就放入路徑
1 | $downloadFile = $downloadServer .$md5yuid. '/'. $filename; |
最後再丟入 fopen 進行讀取的動作 ,$md5yuid
應該就是剛剛所說的 <user-hash>
,產生方式是 md5($yuid)
$yuid
雖然不明瞭如何產生,不過在進行備份的動作時可以看到自己送出去的 yuid,多看幾個賬號的 yuid 靠歸納法大致可以知道是
<username>#<2_bytes_random_char>
( Ex: account#gy )
看懂的應該很好寫一個下載任意帳號備份的 Proof-of-Concept 吧XD
到此結案收收寄信通報! 八卦是程式碼裡面有看到簡體字還有表情符號滿可愛的 XDD