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 分鐘可以解 ...


最後

還是希望大家多來信與我作交流哦 !

感恩 ~ 感恩 ~


Personal Diary 類別的文章 :
丁丁貝殼Taiwan Linux Forum Seminar

Security 類別的文章 :
HIT 資安技術教育訓練課程 與 Syscan in Taipei 2007Taiwan Linux Forum Seminar

新增留言

*

*

訂閱這則留言的 RSS Feed


各分類文章

最近的 20 篇文章