2017年12月

WhiteHat Grand Prix 2017 writeup Bonus

Bonus

Point: 1

Bonus challenge: You just need to join WhiteHat Grand Prix 2017’s support channels (IRC and Slack) and find out the flag J
ircに接続します。
02:40 チャンネルに入りました
02:40 *xxxxxx join #whitehatgrandprix2017 (~xxxxxx@yyy.zzz)
02:40 *topic : WhiteHat{bc0b6353ab20df0fb7bc7a89e57cdc3ace54cb1f}      New flag updated for Secure_token challenge !     New hint available for Cong Chieng challenge !    New hint available for Softweapon challenge !
フラグは、
WhiteHat{bc0b6353ab20df0fb7bc7a89e57cdc3ace54cb1f}
です。




InCTF writeup Warm Up

Warm Up

150

When warmup becomes magical, security disintegrates.

Link to the Challenge

問題に提示されているURLを表示します。

no title

”Forgot Password?”のリンクをクリックします。下図のようにphpのプログラムが表示されます。

1

入力されたidとパスワードを文字列連結してSELECT文を組み立てていますのでSQLインジェクションの脆弱性があります。パスワードの入力はmd5関数を通してそのハッシュ値を使っています。
過去のCTFでもmd5関数のハッシュ値を使ったSQLインジェクションの手法が取り上げられているようです。
http://cvk.posthaven.com/sql-injection-with-raw-md5-hashes

それでは、USERNAMEとPASSWORDにadmin/129581926211651571912466741651878684928を入力してSIGN INします。下図のようにフラグが表示されました。

2

フラグは、
inctf{Y0u_C4n_N3v3r_F1nd_7h1s_Fl4g}
です。



34C3 CTF writeup chaingang

  • Solves: 57
  • send 1505 szabo 457282 babbage 649604 wei 0x949a6ac29b9347b3eb9a420272a9dd7890b787a3

send szabo babbage wei でググると暗号通貨Ethereumに関係することが分かります。szabo、babbage、weiはそれぞれ以下の単位を表すようです。
szabo: 1.000.000.000.000
babbage: 1.000.000
wei: 1
Etherscanでアドレス0x949a6ac29b9347b3eb9a420272a9dd7890b787a3を検索してみます。
https://etherscan.io/address/0x949a6ac29b9347b3eb9a420272a9dd7890b787a3

no title

最後のTransactionを見てみます。
https://etherscan.io/tx/0x70e9f6de87a7db0fe5eb5c93c8b51413c017cdb51d4a8d82f91a0aaca6eb8939

1

[Tools & Utilities]-[Parity Trace]を選択します。
https://etherscan.io/vmtrace?txhash=0x70e9f6de87a7db0fe5eb5c93c8b51413c017cdb51d4a8d82f91a0aaca6eb8939&type=parity

2

outputの値がASCIIコードになっているように見えます。Pythonプログラムで文字列に変換します。
import binascii
a = b'333443335f6772616e646d615f626f756768745f736f6d655f626974636f696e'
print binascii.unhexlify(a)
実行すると次の文字列が出力されます。
フラグは、
34C3_grandma_bought_some_bitcoin
です。



34C3 CTF writeup m0rph

  • Solves: 154
  • To get you started :)

    files: Link

    difficulty: easy

解凍したファイルのファイルタイプをfileコマンドで確認します。Linux用の64bit実行ファイルです。
$ file morph
morph: ELF 64-bit LSB  shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=1c81eb4bc8b981ed39ef79801d6fef03d4d81056, stripped
実行してみますが何も表示されません。
$ ./morph 
objdumpコマンドで逆アセンブルします。
$ objdump -s -D morph >aaa.txt
下記の部分でコマンドライン引数の入力文字列の長さをチェックしています。23文字以外だと終了します。
 ae5: 48 8b 45 d0          mov    -0x30(%rbp),%rax
 ae9: 48 83 c0 08          add    $0x8,%rax
 aed: 48 8b 00              mov    (%rax),%rax
 af0: 48 89 c7              mov    %rax,%rdi #%rax=コマンドライン引数
 af3: e8 60 fc ff ff        callq  0x758 #<strlen>
 af8: 48 83 f8 17          cmp    $0x17,%rax #23と比較
 afc: 74 0a                je     0xb08
それでは、34C3_で始まる23文字の文字列をコマンドライン引数に指定してedbでデバッグ実行します。ステップ実行していくと下記の場所でコマンドライン引数に指定した文字列の1文字目と51(文字の'3')を比較しています。
no title


さらにステップ実行を進めていくと、下図の場所で5文字目と95(文字の’_’)を比較しています。
2

このようにステップ実行を進めていくと、コマンドライン引数の各文字を”34C3_M1GHTY_M0RPh1nG_g0”と比較していることが分かります。
コマンドライン引数に”34C3_M1GHTY_M0RPh1nG_g0”を指定して実行してみると下記のとおり表示されフラグであることが確認できます。
$ ./morph 34C3_M1GHTY_M0RPh1nG_g0
What are you waiting for, go submit that flag!
フラグは、
34C3_M1GHTY_M0RPh1nG_g0
です。

モーフィング入門―DOS/Vで体験するCGマジック
スコット アンダーソン
海文堂出版
1994-12


InCTF writeup EasyOne

EasyOne

50

I have the flag mate but I don't know the password to read it. Can you crack it?

Link to the Challenge



flag.zipファイルにはパスワードがかかっています。
もうひとつのファイルchal.imgをfileコマンドで確認します。ファイルシステムです。
$ file chal.img 
chal.img: x86 boot sector
次にstringsコマンドで文字列を確認します。wavファイルがありそうです。
$ strings chal.img
(略)
RIFF
WAVEfmt 
(略)
該当箇所をバイナリエディタで確認してみます。RIFFの次の4バイトがデータサイズになります。データサイズはリトルエンディアンなので0x0005D084=381060byteになります。
 ADDRESS   00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F   0123456789ABCDEF 
------------------------------------------------------------------------------
 00109000  52 49 46 46 84 D0 05 00 57 41 56 45 66 6D 74 20   RIFF��..WAVEfmt  
したがって、0x109000~0x16608bまでをコピーして別ファイルとして保存します。そのファイルをAudacityで開いてスペクトログラムを表示すると下図のように文字列が隠されていることが分かります。

1

この文字列(thisisthepasswordtoolongtobruteforce)でflag.zipファイルを解凍するとflag.txtファイルができます。このファイルにフラグが記載されています。
フラグは、
inctf{th1s_1s_pr3tty_3asy_w4rmup}

InCTF writeup Time

Time

50

All of you want is time and all you have is time.



ダウンロードしたファイルをfileコマンドで確認します。LinuxのARM CPUの実行ファイルのようです。
$ file Time 
Time: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, stripped
qemuで実行してみます。動きません。
$ qemu-arm ./Time 
/lib/ld-linux.so.3: No such file or directory
Dynamicリンクの場合ライブラリの場所を指定する必要があります。-Lオプションでライブラリの場所を指定して再度実行してみます。
$ qemu-arm -L /usr/arm-linux-gnueabi/lib/ ./Time
/lib/ld-linux.so.3: No such file or directory
それでも動きませんので、/libフォルダにリンクを張ります。
$ sudo ln -s /usr/arm-linux-gnueabi/lib/ld-linux.so.3 .
$ sudo ln -s /usr/arm-linux-gnueabi/lib arm-linux-gnueabi
そして再度実行してみます。Keyを聞いてきますので適当に入力するとチェックではじかれるようです。
$ qemu-arm ./TimeYou sucessfully loaded the file :)
Enter your Key
123456
Flag check failed
それでは、ARMのobjdumpで逆アセンブルします。
$ arm-linux-gnueabi-objdump -s -D Time > aaa.txt
以下の箇所を見ると、アドレス0x1084cのデータと0x7とのxorを取っているようです。
    8574: e59f3058 ldr r3, [pc, #88] ; 0x85d4
    8578: e51b2008 ldr r2, [fp, #-8]
    857c: e7933102 ldr r3, [r3, r2, lsl #2]
    8580: e2233007 eor r3, r3, #7
    8584: e1a00003 mov r0, r3
    8588: ebffff8b bl 0x83bc
(略)
    85d4: 0001084c andeq r0, r1, ip, asr #16
アドレス0x1084cを見てみます。0x7とxorをとるとフラグになりそうですね。
セクション .data の内容:
 10844 00000000 00000000 6e000000 69000000  ........n...i...
 10854 64000000 73000000 61000000 7c000000  d...s...a...|...
 10864 53000000 6f000000 36000000 74000000  S...o...6...t...
 10874 58000000 26000000 74000000 58000000  X...&...t...X...
 10884 6d000000 52000000 74000000 73000000  m...R...t...s...
 10894 58000000 73000000 6f000000 34000000  X...s...o...4...
 108a4 58000000 45000000 34000000 60000000  X...E...4...`...
 108b4 6e000000 69000000 49000000 6e000000  n...i...I...n...
 108c4 69000000 60000000 7a000000 98a9365a  i...`...z.....6Z
それでは、文字列"nidsa|So6tX&tXmRtsXso4XE4`niIni`z"を1文字ずつ0x7とxorを取ってみます。
s = "nidsa|So6tX&tXmRtsXso4XE4`niIni`z"
a = ""
for c in s:
a = a + chr(ord(c) ^ 0b00000111)
print a
このPythonプログラムを実行すると以下のとおり出力されます。
inctf{Th1s_!s_jUst_th3_B3ginNing}
フラグは、
inctf{Th1s_!s_jUst_th3_B3ginNing}
です。



InCTF writeup Sanity Check

Sanity Check

1

Find the flag in the official IRC channel of the CTF.

ircに接続します。
15:15 チャンネルに入りました
15:15 *xxxxxx join #bi0s-ctf (~xxxxxx@yyy.zzz)
15:15 *topic : Welcome to InCTF, https://ctf.inctf.in/ | Flag for Sanity check inctf{w3lc0me_t0_inctf} | The reversing challenge messed up was updated at 23:55 UTC | New hint for liar released
フラグは、
inctf{w3lc0me_t0_inctf}
記事検索
ギャラリー
  • 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
カテゴリー