HIT 2007
2007-07-24 23:32
盛況空前的 Hacks In Taiwan Conference 2007 , 終於在前幾天順利落幕了
個人在今年的場次中 ,
共參與了四個部份 -
Wargame Designer
Training Course
0day exploit
Session speaker
老實說, 平日工作就非常的忙碌 , 加上這些要作大量的準備,
已經快超出我能負荷的程度 ....
所以前一個月 幾乎每天都沒辦法好好入眠
一閉上眼就想到再不趕快弄 就要被主辦單位追殺了 XDD
anyway , 除了 wargame 部份來不及設計完交給關主之外,
其他的場次倒是還算順利進行完了 ,
來大致作些檢討.
Training Course - Protect Your Website (7/20)
主要是講一些 web 的攻擊手法及工具、以及防禦/事後處理 等等觀念.
本來預計要講 5 小時左右的課程 ,
後來為了與其他課程統一時間 , 改為 3 個小時
也減低了大家的負擔 ... 上一整天課還是蠻累的 ...
不過 155 pages 的 slide , 還是太趕了 ,
讓一些操作的 demo 做太少 , 本來規劃的 lab 也都沒有做到 ...
最後還是超出了大約半個小時 ....
這些問題, 以後要多多考慮才是 .
課程後稍微看了一下問卷調查 ,
大部份都是 普通~滿意 , 少數是非常滿意,
但也有一位說不滿意的 ...
如果以後還有機會的話, 我想應該要
1. 課程內容再加深些
2. demo 部份多做一點
3. 讓學員有實作的機會
課程的時間 , 大約要抓 6~8 小時 , 才會比較足夠 .
0day exploit - Joomla upload file mishandling vulnerability (7/21)
其實一開始就有講
這個問題和 Apache 有關係
造成的後果不是只有 Joomla 會發生
我只是以它作例子而已
本來是排在 7/22(日) 下午講的
不過因為前一天的 0day 發表者沒有來
在與主辦單位協商後, 往前挪了先講
於是 7/21(六) 下午就先上場了.
由於一直聯絡不到台灣官網的管理者 ,
身為奉公守法的好青年, 我們不應該在未徵得對方同意前亂測試,
所以最後的 live demo 就沒有做了 ...
僅在 local 用 VM 試了一下而已 ...
短短 20 分鐘, 有簡介有實作 , 效果應該還不錯 ,
因為多數的人都還沒有注意到這個問題 ,
下場後也有人找我作後續的討論 ....
本場次之簡報在 這裡
或者 , 也可以到 HIT2007 官網 下載區
Session Seeaker - Implementation of Web Application Firewall (7/22)
之前應主辦單位之邀 希望我講一個場次 但是題目還沒決定
後來仔細看了一下 Call For Paper , 裡面有段是特別希望有 WAF 的介紹
『歡迎近年來對於加強 Web 應用程式安全的 WAF (Web Application Firewall)
的各項技術研究。』
剛好前陣子也在玩這些設備 ... 就決定講這個題目了 !
主要的目標有兩個 -
一來希望能把這個觀念介紹給更多的人知道,
Web 的弱點大部份不是 Firewall/IPS 能有效阻擋的,
另一方面就是分享用 Open Source 所兜出來的解決方案,
讓買不起昂貴設備的單位仍可以自己土砲達到一些保護.
整個場次來說,
時間沒掌控好、demo 做的不夠多 是比較失敗的地方
其他的部份應該還算講得清楚 ..... 吧 ?
本場次之簡報在 這裡
或者 , 也可以到 HIT2007 官網 下載區
不過我的習慣是簡報裡只放簡單的關鍵字 ,
大部份的內容是由嘴巴講出來 ,
所以光看 slide 會不容易瞭解我要表達的東西吧 :p
這是我第一次在這麼大的場合作演講, 本來是很緊張的 ,
不過一踏到台上 , 看著自己準備的資料 , 心裡就穩定下來了
是的 , because I'm well prepared ! .... ( ... sure ?? XD)
不管是 30 人或是 300 人 , 我只要把想表達的東西傳遞出來就好了 !
希望沒有讓聽眾失望才好 ....
如果對我有任何的建議、或對內容有想討論的地方
都歡迎來信給我指教 謝謝 :)
接著 , 來紀錄一些 wargame 的解法
在前一個星期 , 我們內部設計的關主就已經互相先玩過了 ,
基本上 , 我是個 Windows 白痴 ,
所以在會場 , 我很快的解完 Linux 和 Misc 的關卡後 ,
就沒再玩其他 Windows 的了 ...
不過我是工作人員 , 所以玩再高分也不算 XD
Linux 1 (忘了題號了 這裡並未照會場內的順序)
login linux server 後 ,
執行一支 ./game1 的程式 , 進行猜密碼的遊戲
關卡說明是
『猜密碼遊戲 ! 如果猜錯了 能從什麼地方得到更多的資訊呢 ?』
因為該程式的權限只能執行 , 不能讀取 ,
所以無法用 disassembler 或一些工具作靜態分析 ...
這題我是在內部試玩時 , 聽到關鍵字 “return value” 才解的
執行 ./game1 && echo $? , 或者是用 strace ./game1
可以觀察到輸入正確的位數後, 程式傳回值會反映真正的密碼
例如 A 時傳回 255 , C 時傳回 1 , 那該位字元就是 B
再推測到程式是一個字一個字檢查的 ,
如此反覆做就可以找出每一位的密碼.
Linux 2
login linux server 後 ,
執行一支 ./game2 , 進行猜數字的遊戲
結果會長得像這樣子 :
Guess(1-10): 2
Guess(1-10): 2
Guess(1-10): 2
Guess(1-10): 2
Guess(1-10): 2
Guess(1-10): 2
Guess(1-10): 2
Guess(1-10): 2
Guess(1-10): 2
Guess(1-10): 2
Access denied..
correct: 1, incoreect: 9
有點像 ?A?B 的遊戲, 只是沒有 A 的部份 , and 位數比較長 而已
解法應該不用講了 , 會場內最多人解過的就是這題了 XD
Linux 3
關卡說明是
『再安全的系統 總會有些可笑的弱點 試著連結 192.168.100.2:3388 吧!
比起 telnet , nc 似乎是比較好的選擇 ! 』
這關也是在試玩時 , 聽到提示才過的 ,
基本上這關在判斷密碼上有問題 ,是一個字一個字檢查的 ,
所以只要用 brute force 的方式 , 就可以爆出每一位是啥字 ...
我用的程式是這樣 :
#!/usr/bin/perl
use IO::Socket;
$pass = '';
while(1)
{
for (32..126)
{
$c = chr($_) ;
my $sock = IO::Socket::INET->new( PeerAddr => '192.168.100.2' ,
PeerPort => 3388 ,
Proto => "tcp" ) or die "error creating socket: $!";
$try = $pass . $c;
syswrite( STDERR, "pass = $pass??? , trying [$try] ...\n" );
syswrite( $sock , "$try\n" );
$received = join( '' , <$sock> );
unless( $received =~ /Access Denied/ ) {
$pass .= $c ;
syswrite( STDOUT, “[$pass]\n” );
last;
}
$sock->close;
}
}
在會場內大概跑個半小時可以解出 key ...
(因為錯誤時 server 會停頓 3 秒鐘 , 所以就有點久 ... )
Misc 1
關主提供一個把 python 編譯成 bytecode 後的 .pyc 檔案
執行後會在本機 8000 port 起一隻 web server ,
連入後看到說明為
The game have more 10000 pages.
The KEY is behind the only 1 page.
Find it.
[Start]
按下 Start 後會以 POST 對 /?LEVEL=1&PAGE=xxxx 作 request
如果 xxxx 對了 , 就會看到 key
不對的話就再一直按下去 ....
我猜 PAGE = 1~10000 ,
由於程式沒有精確的檢查 referer ,
於是寫了支小 script 去找 ....
touch null
i=1
while (test $i -lt 10000)
do
wget --post-file null -O $i "http://localhost:8000/?LEVEL=1&PAGE=$i"
i=`expr $i + 1`
done
然後 grep key * 就找到了 .
這作法比較笨 , 是把所有的頁面都撈出來才找 ,
實際上可以邊撈就邊找找有沒有 key ,
不過那時我不知道含 key 頁面的關鍵字是啥 不知道怎麼找
所以就一次先撈出來再說吧 XDD
Misc 2
一張圖片 ,
本關提示為 『答案就在圖片中 ! 』
仔細看了圖片 , 瞪大雙眼還是看不出個所以然 ....
難道是我的 LCD 太差 , 灰階不明顯 所以觀察不出來 ?
或者要側著頭看、倒著頭看 ??
.... 最後當然還是看不出來 XD
拿 vim 和 strings 仔細觀察了一下這個 jpg 圖檔,
發現其中有兩個 JFIF (jpg header) ,
推測是把一個圖檔塞到另一個圖檔裡 ,
於是算好位置 , 把後面的圖檔 parse 出來 , 就得到 key 了.
Misc 3
算術題 , 連上 192.168.100.2:9966 ,
會出現 w * x + y << z 的算術
連續 5 題 , 要在 5 秒內算出正確答案 , 而且每次題目都亂數產生 ...
基本上是不可能用人腦算的 ,
就算算來得及 , 手指也來不及敲 XD
於是寫了支程式 ....
#!/usr/bin/perl
use POSIX;
use IO::Socket;
$host = '192.168.100.2' ;
$port = 9966 ;
my $sock = IO::Socket::INET->new( PeerAddr => $host ,
PeerPort => $port ,
Blocking => 0,
Proto => "tcp" ) or die "error creating socket: $!";
while(1)
{
select( undef , undef , undef , 0.1 );
my ( $buf , $data );
while( ($rv=$sock->read( $buf, POSIX::BUFSIZ, 0))>0 )
{
$data .= $buf ;
}
if( $data =~ /\((\d+) \* (\d+) \+ (\d+)\) << (\d+)/ ) {
$ans = sprintf("%d\n",($1 * $2 + $3 ) << $4 );
print "($1 * $2 + $3 ) << $4 = $ans";
syswrite( $sock , $ans );
} elsif( $data =~ /Okay/ ) {
syswrite( STDOUT, $data );
$sock->close;
last;
} else {
syswrite( STDOUT, $data );
}
}
會連上去 抓出每個欄位的數字 套入運算式 並送出答案 ,
就過了 !
Misc 4
會場內有一台 wireless ap , 是用 WEP 加密的 , 試著 crack 它 !
基本上 , 平常有在玩 wireless cracking 的人 ,
都知道怎麼解 ,
就不多說了 XD
Misc 5
前面那隻 .pyc 執行後的第二關 , 關卡說明為
HEAD, GET, POST, PUT, and TRACE are the documented HTTP requests.
The game implements an undocumented HTTP request.
The name of undocumented request is ****.
Try to recover the mask:)
Go go go~~
一開始先 strings 了一下 ,
看到有 do_POST、do_GET、do_HEAD , 及一個 do_HACK
所以就猜那個 request method 是 HACK 囉 !
$ nc localhost 8000
HACK / HTTP/1.0
Hello player, this is level 2.
f(x)=y, x=KEY y=b4e2f5e4c7637e3d1fbc912c906f5116
Please enter the x:
這裡隨便輸入個 1 , 會得到
y=4cac24830a9b3228d0cc05a9f65748b9
於是可以知道 f(x) 是 md5(x) 後 , 兩位兩位交換
再把 4b2e5f ... 拿去作 md5 crack , 就可以得到 key 了 .
我是用 mdcrack 這隻程式 , 跑了約 20 分鐘 ,
後來回家後用 rainbow crack , 則是約 5 分鐘可以解 ...
最後
還是希望大家多來信與我作交流哦 !
感恩 ~ 感恩 ~
丁丁貝殼Taiwan Linux Forum Seminar
.Security 類別的文章 :
HIT 資安技術教育訓練課程 與 Syscan in Taipei 2007Taiwan Linux Forum Seminar
新增留言
訂閱這則留言的 RSS Feed