HackIM 2016

HackIM 2016 writeup Hiding In Plain Sight.

Hiding In Plain Sight. 200 pts

Find out the secret key hidden in these packets!



m200-HiPs.rar

ダウンロードしたファイルを解凍すると、3つのpcapファイルが得られます。Wiresharkで内容を確認すると、pingのrequestとreplyのパケットキャプチャであることが分かります。pingのデータ部分に何かあると思われますが、一見しただけではよく分かりません。ある範囲内のバイトデータのみ出現しているようなので、データ部分に出現するバイトデータの頻度分析をしてみます。
頻度分析の結果は、下表のようになります。0x0D(改行)を除くと、0x34~0xA8の範囲内にあります。これを0x2Aだけ減算すると、改行コードを除くと0x20~0x7EとなりすべてASCIIコードの印字可能文字になります。
元データ 出現数 変換後(-2A) 文字
0D 99 0D  
34 194 0A
4A 11 20  
4F 516 25 %
50 557 26 &
52 506 28 (
53 552 29 )
54 521 2A *
55 528 2B +
56 510 2C ,
57 528 2D -
58 512 2E .
59 548 2F /
5B 1 31 1
5C 2 32 2
5D 1 33 3
64 536 3A :
66 569 3C <
67 577 3D =
68 532 3E >
69 517 3F ?
6A 516 40 @
6B 7 41 A
6D 2 43 C
73 10 49 I
74 1 4A J
75 8 4B K
78 7 4E N
7B 1 51 Q
7D 3 53 S
80 1 56 V
81 9 57 W
83 3 59 Y
84 10 5A Z
85 547 5B [
87 511 5D ]
88 532 5E ^
8B 4 61 a
8C 11 62 b
8D 4 63 c
8E 1 64 d
8F 9 65 e
90 1 66 f
91 1 67 g
92 5 68 h
93 10 69 i
95 1 6B k
96 1 6C l
98 5 6E n
99 10 6F o
9A 1 70 p
9D 3 73 s
9E 8 74 t
A0 1 76 v
A3 10 79 y
A5 526 7B {
A6 505 7C |
A7 536 7D }
A8 570 7E ~

このルールでpingパケットのデータ部分をデコードすると、以下の文字列を得ることができます。
(略)
>%&{[+<*,=([-^@{,/(=]</:&^,:&)=-)&
ZWNobyAiZiIKZWNobyAibCIKZWNobyAiYSIKZWNobyAiZyIKZWNobyAieyIKZWNo
byAibWQ1c3VtIgplY2hvICIoJ2ZsYWcnKSIKZWNobyAifSIK
:{+]=^~~.@-^<+.>
(略)
この赤字部分をBASE64でデコードすると、以下のようになります。
echo "f"
echo "l"
echo "a"
echo "g"
echo "{"
echo "md5sum"
echo "('flag')"
echo "}"
したがって、フラグは、
flag{327a6c4304ad5938eaf0efb6cc3e53dc}
です。

ハッカーの学校
IPUSIRON
データ・ハウス
2015-01-23



HackIM 2016 writeup CatchMeIfYouCan

CatchMeIfYouCan 100 pts

We got this log which is highly compressed. Find the intruder's secret.



f100

ダウンロードしたファイルは様々な圧縮形式で何度も圧縮されています。fileコマンドでファイル形式をチェックし、対応する解凍コマンドで解凍していくシェルスクリプトを書きます。
cp f100 secret2
while :
do
    out=`file secret2`
    echo $out
    case "$out" in
        *ARC* )
            nomarch secret2
            mv secret secret2
            ;;
        *PPMD* )
            ppmd d secret2
            mv secret secret2
            ;;
        *Cab* )
            cabextract secret2
            mv secret secret2
            ;;
        *bzip2* )
            mv secret2 secret2.bz2
            bunzip2 secret2.bz2
            ;;
        *XZ* )
            mv secret2 secret2.xz
            xz -d secret2.xz
            ;;
        *7-zip* )
            7z x secret2
            mv secret secret2
            ;;
        *gzip* )
            mv secret2 secret2.gz
            gunzip secret2.gz
            ;;
        *POSIX* )
            tar xvf secret2
            mv secret secret2
            ;;
        *Zip* )
            unzip secret2
            mv secret secret2
            ;;
        *KGB* )
            kgb secret2
            mv secret secret2
            ;;
        *ARJ* )
            unar secret2
            mv secret secret2
            ;;
        *rzip* )
            mv secret2 secret2.rz
            rzip -d secret2.rz
            ;;
        *Zoo* )
            mv secret2 secret2.zoo
            zoo e secret2.zoo
            mv secret secret2
            ;;
        *RAR* )
            mv secret2 secret2.rar
            rar x secret2.rar
            break
            ;;
        * )
            break
            ;;
    esac
done
最後のRARファイルを解凍すると、dlフォルダとlogフォルダができます。一通り眺めてみてもよくわかりません。dl/46bd85560d104fb45dda1b28397c51fbc76faa09512ba3a24a14ce30244f0a53ファイルのURLを一つずつ調べていきます。

wget https://gist.github.com/anonymous/ac2ce167c3d2c1170efe
ここで得られるjavascriptをブラウザで実行すると、下図のようにalertが表示されます。

no title

1

2
・・・(略)

その文字をつなぐと次のとおり文字列が得られます。
s-e-c-r-e-t-f-l-a-g-{-D-i-d-Y-o-u-R-e-a-l-l-y-F-i-n-d-M-e-}-
フラグは、
flag{DidYouReallyFindMe}
です。



HackIM 2016 writeup ZorroPub

ZorroPub 100 pts

ZorroPub



zorro_bin

ダウンロードしたファイルを実行すると、「Straight to the point. How many drinks you want?」、「OK. I need details of all the drinks. Give me 1 drink ids:」と、2回入力を求めてきます。
$ ./zorro_bin
Welcome to Pub Zorro!!
Straight to the point. How many drinks you want?1   
OK. I need details of all the drinks. Give me 1 drink ids:2
Invalid Drink Id.
Get Out!!
まず、objdumpコマンドで逆アセンブルし、動作を確認します。
$ objdump -s -D zorro_bin > aaa.txt
以下の箇所でscanf関数で1回目の入力を受け付けています。入力値は%eaxに格納されていますので、test %eax, %eaxで0との比較を行い、jg(より大きい場合jump)命令が続いています。入力値が0以下の場合は、”You are too drunk!! Get Out!!”とメッセージを表示して、プログラム終了します。
  400a08:    48 8d 85 fc fe ff ff     lea    -0x104(%rbp),%rax
  400a0f:    48 89 c6                 mov    %rax,%rsi
  400a12:    bf c1 0d 40 00           mov    $0x400dc1,%edi                //%d
  400a17:    b8 00 00 00 00           mov    $0x0,%eax
  400a1c:    e8 8f fe ff ff           callq  4008b0 <__isoc99_scanf@plt>
  400a21:    8b 85 fc fe ff ff        mov    -0x104(%rbp),%eax
  400a27:    85 c0                    test   %eax,%eax                    //if(eax==0)
  400a29:    7f 19                    jg     400a44 <rand@plt+0x184>        //より大きい場合jump
  400a2b:    bf c4 0d 40 00           mov    $0x400dc4,%edi                //You are too drunk!! Get Out!!
  400a30:    b8 00 00 00 00           mov    $0x0,%eax
  400a35:    e8 b6 fd ff ff           callq  4007f0 <printf@plt>
  400a3a:    bf ff ff ff ff           mov    $0xffffffff,%edi                //-1
  400a3f:    e8 ec fd ff ff           callq  400830 <exit@plt>            //終了
2回目の入力では17~65535の数値のみを受け付けます。
  400a7b:    e8 30 fe ff ff           callq  4008b0 <__isoc99_scanf@plt>
  400a80:    8b 85 00 ff ff ff        mov    -0x100(%rbp),%eax
  400a86:    83 f8 10                 cmp    $0x10,%eax                    //if(eax==16)
  400a89:    7e 0d                    jle    400a98 <rand@plt+0x1d8>        //小さいか等しい場合jump
  400a8b:    8b 85 00 ff ff ff        mov    -0x100(%rbp),%eax
  400a91:    3d ff ff 00 00           cmp    $0xffff,%eax                    //if(eax==65535)
  400a96:    7e 23                    jle    400abb <rand@plt+0x1fb>        //小さいか等しい場合jump
  400a98:    bf 24 0e 40 00           mov    $0x400e24,%edi                //Invalid Drink Id.
  400a9d:    e8 7e fd ff ff           callq  400820 <puts@plt>
さらに、2進数で表したときに1が立つビットの数が10になる数値しか受け付けないようです。
  400af4:    83 85 0c ff ff ff 01     addl   $0x1,-0xf4(%rbp)                //e=e+1
  400afb:    8b 85 04 ff ff ff        mov    -0xfc(%rbp),%eax                //eax=c
  400b01:    83 e8 01                 sub    $0x1,%eax                    //eax=eax-1
  400b04:    21 85 04 ff ff ff        and    %eax,-0xfc(%rbp)                //c=eax&c
  400b0a:    83 bd 04 ff ff ff 00     cmpl   $0x0,-0xfc(%rbp)                //if(c==0)
  400b11:    75 e1                    jne    400af4 <rand@plt+0x234>        //等しくない場合jump
  400b13:    83 bd 0c ff ff ff 0a     cmpl   $0xa,-0xf4(%rbp)                //if(e==10)
  400b1a:    74 1e                    je     400b3a <rand@plt+0x27a>        //等しい場合jump
  400b1c:    bf 40 0e 40 00           mov    $0x400e40,%edi                //Looks like its a dangerous combination of drinks right there.
  400b21:    e8 fa fc ff ff           callq  400820 <puts@plt>
次のRubyプログラムで17~65535の範囲で2進数表記で1が立つビットが10である数値を求め、ファイル「A2.txt」に保存します。実行した結果、8008個該当しました。

def numofbits1(bits)
  num = 0
  eax = bits - 1
  aaa = bits & eax
  num = num + 1
  while(aaa != 0) do
    num = num + 1
    eax = aaa - 1
    aaa = aaa & eax
  end
  num
end

for num in 17..65535 do
  if numofbits1(num) == 10
    p num
  end
end
ということで、この8008個の数値を与えて結果を確認します。ファイル「A2.txt」から1行ずつ読み取り、ヒアドキュメントを使って、zorro_binに値を渡すシェルスクリプトを書きます。
cat A2.txt | while read line
do
echo $line
./zorro_bin << EOS
1
$line
EOS
done
シェルスクリプトを実行すると、入力値が59306のときにフラグが出力されました。
59306
Welcome to Pub Zorro!!
Straight to the point. How many drinks you want?OK. I need details of all the drinks. Give me 1 drink ids:
You choose right mix and here is your reward: The flag is nullcon{nu11c0n_s4yz_x0r1n6_1s_4m4z1ng}
フラグは、
nullcon{nu11c0n_s4yz_x0r1n6_1s_4m4z1ng}
です。

デバッガによるx86プログラム解析入門【x64対応版】
Digital Travesia管理人 うさぴょん
秀和システム
2014-10-22


記事検索
ギャラリー
  • TetCTF 2023 NewYearBot
  • UUT CTF writeup Find The Password
  • UUT CTF writeup The Puzzle
  • Hack Zone Tunisia 2019 writeup Microscope
  • Hack Zone Tunisia 2019 writeup Welcome
  • SwampCTF 2019 writeup Brokerboard
  • SwampCTF 2019 writeup Leap of Faith
  • SwampCTF 2019 writeup Last Transmission
  • CBM CTF 2019 writeup Long road
カテゴリー