newbieからバイナリアンへ

newbieからバイナリアンへ

コンピュータ初心者からバイナリアンを目指す大学生日記

【pwn(rev) 6.1】 GuessWhat - TrendMicroCTF2019

 

 

 

0: 参考

 

1: イントロ

9/7に開催されたTrendMicro CTF2019に一応参加した

今回はrev100の問題 GuessWhat.exe

 

f:id:smallkirby:20190909014535p:plain

 

 

 

だいぶ知ってるやつと毛色が違った・・・

 

2: 表層解析

./GuessWhat.exe: PE32 executable (console) Intel 80386, for MS Windows

 

stringsで気になったのは以下のやつ

img.jpg
<!--?xml version='1.0' encoding='UTF-8' standalone='yes'?-->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestversion="1.0">
  <trustinfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedprivileges>
        <requestedexecutionlevel level="asInvoker" uiaccess="false"></requestedexecutionlevel>
      </requestedprivileges>
    </security>
  </trustinfo>
</assembly>
</pre>



だが慣れないPEということで

この部分はこういうもんなのかなぁと思ってあまり注意を払えなかった。。。

 

 

3: flagっぽいものの入手

VM上のWindows10で実行してみるとすぐ落ちた

ghidraで読むと引数が必要

 

コードを読んで引数 "TM" で実行すると

以下のメッセージが表示される

 

Ok, now you're in :)

V2hhdCBkbyB5b3Uga25vdyBhYm91dCBjaXBoZXJzPwo=?????

Do you have something for me?

 

まんなかの文字列をbase64でデコードすると

What do you know about ciphers?

と表示される

だがここらへんの認証は正直あまりする必要がなく

普通にコードを読めば実行することなく先へすすめる

 

まあそれはさておき "rc4" と入力すると

 

A7A91F1EA45AE0BE03735A09577DA594230BDE854B
Now you have the encrypted string you probably need a key, right?
Take a closer look at the string functions.  

 

ここで暗号文が表示されるのだが文脈的にRC4と思われる

必要なkeyの値だがコードを読むと

わざわざ生成した文字列を上記の文字列で上書きしてしまう関数がある

よってデバッガで上書きされる前に文字列を眺めてみると

"0x7ffffff"

がスタックに入っていた

この文字列がkeyと思われる

 

以下を参考にしてRC4を復号する

 

inaz2.hatenablog.com

 

# -*- coding: utf-8 -*-
#各関数は上のリンクを参考のこと


def KSA(key):

def PRGA(S):

def RC4(data, key):

encrypted_str = "A7A91F1EA45AE0BE03735A09577DA594230BDE854B"
en0 = "\xa7\xa9\x1f\x1e\xa4\x5a\xe0\xbe\x03\x73\x5a\x09\x57\x7d\xa5\x94\x23\x0b\xde\x85\x4b"
key = "0x7fffffff"

print(RC4(en3,key))

 

結果は以下の通り

$ python ./test.py
&N0wu4rEgeTTinGth3re!

 

ここでflagのようなものが表示された

本番ではこれがもうflagと思って提出したがincorrectだった

(何回も形式を変えて提出した。。。)

それから&が先頭ということもあって

この前に何らかの文字列があるんじゃないかとものすごく探した

結局時間内にはこの先に進まなかった。。。

 

4: imgファイルの入手

PEファイルにはELFと違ってリソースセクションがある

ResourceHackerで見てみると以下のように

 

f:id:smallkirby:20190909033553p:plain

 

 

これをzipファイルとして出力保存し

展開しようとすると以下のように

 

f:id:smallkirby:20190909014636p:plain

 

パスワードの入力が求められる

ここでさっきの&N0wu4rEgeTTinGth3re!を入れると解答できる

 

 

展開されて出てくるのが以下のjpgファイル

 

f:id:smallkirby:20190909014535p:plain

ヒトカゲ先輩。。。??)

 

画像検索してみると以下のページにたどり着いた

Shell Meme (Original Memes) by 42Dannybob on DeviantArt

 

対象のファイルを img.jpg

オリジナルの方をimg_original.jpgとする

 

 ファイル情報を見てみると以下の感じ

./img.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 1x1, segment length 16, baseline, precision 8, 670x460, frames 3
./img_original.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 1x1, segment length 16, baseline, precision 8, 670x460, frames 3

 

$ binwalk -e ./img.jpg

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, JFIF standard 1.01
$ exiftool ./img.jpg
ExifTool Version Number         : 10.80
File Name                       : img.jpg
Directory                       : .
File Size                       : 43 kB
File Modification Date/Time     : 2019:09:09 01:43:42+09:00
File Access Date/Time           : 2019:09:09 01:43:58+09:00
File Inode Change Date/Time     : 2019:09:09 01:43:53+09:00
File Permissions                : rw-rw-rw-
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
JFIF Version                    : 1.01
Resolution Unit                 : inches
X Resolution                    : 1
Y Resolution                    : 1
Image Width                     : 670
Image Height                    : 460
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:4:4 (1 1)
Image Size                      : 670x460
Megapixels                      : 0.308

 

ここまでは2つのファイルとも全く同じように見える

 

続いて8字以上の文字列を見てみると

 

$ strings ./img.jpg -n8
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz
&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz
sUtO)>sQtK
-VYb3A41
MysY/_&~VV

 

短い文字列についても目grepしてみると

> q.C{E
> \M8.2F(
> Tt,F?@A
> `O&F.{
> v:aN(d
> Z%r'$
> ]r=(3i
> =*CC(5
> IuupJ\
> {5mN/
> jj]hr
> "zniG

 

なんかCTF{っぽい文字が見える。。。?



2つのファイルのdiffをとってみると

...snipped...
0x00000603 00 45
0x00000604 08 0F
0x00000605 3B E2
0x00000606 0F 07
0x00000608 5C 10
0x00000609 D0 76
0x0000060A 01 3F
0x0000060B FF FC
0x0000060C 00 B9
0x0000060D 08 A0
0x0000060E E7 03
0x0000060F C1 FE
0x00000610 0F 11
0x00000611 FA CF
0x00000612 28 82
0x00000613 7F 1F
0x00000614 10 F4
0x00000615 3F 50
0x00000616 F0 FE
0x00000617 83 20
0x00000618 B1 7F
0x00000619 FF E1
0x0000061A 00 07
0x0000061B E5 63
0x0000061C CD FF
0x0000061E 1F CB
...snipped...

結構なバイトでdiffがある

規則性があるようなないような・・・





うーん、ここまで手がかりなし

なんか適当にやれば見つからないかなぁと思って

ステガノツールで画像をいじったりしてみたが

 

f:id:smallkirby:20190909030650p:plain

 

全然見えてこない

 









つまりました

もうちょい時間立って思いついたり

他の人のwriteup見て理解できたら書きます





続く・・・