同人サークルE.N.Nachが主催するCyberRebeat CTFのwrite-upです.
Binary
SimpleBinary
与えられたバイナリファイルを一通り調べる.
# file SimpleBinary
SimpleBinary: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=98f51339e195ba048b503cf4e966d7351ed4b198, stripped
# binwalk SimpleBinary
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 ELF, 64-bit LSB executable, AMD x86-64, version 1 (SYSV)
# strings
特に意味のある文字列は見当たらない
気になる情報は見当たらないので動かしてみるしかなさそう.
# ./SimpleBinary AAAAAAAAAAAAAAA
何も表示されない
メモリ上にデータが乗っている可能性があるので解析していく.
# gdb SimpleBinary
gdb-peda$ start
[----------------------------------registers-----------------------------------]
RAX: 0x0
RBX: 0x0
RCX: 0x400740 (push r15)
RDX: 0x1a
RSI: 0x1a
RDI: 0x7fffffffe590 ("{iCC .sith t'u Fn}dImTgaRh")
RBP: 0x7fffffffe560 --> 0x7fffffffe5c0 --> 0x0
RSP: 0x7fffffffe4d0 --> 0x1a00000000
RIP: 0x40056d (mov DWORD PTR [rbp-0x70],0x3)
R8 : 0x7ffff7dd5e80 --> 0x0
R9 : 0x0
R10: 0x7fffffffe250 --> 0x0
R11: 0x7ffff7a30350 (<__libc_start_main>: push r14)
R12: 0x400450 (xor ebp,ebp)
R13: 0x7fffffffe6a0 --> 0x1
R14: 0x0
R15: 0x0
EFLAGS: 0x246 (carry PARITY adjust ZERO sign trap INTERRUPT direction overflow)
[-------------------------------------code-------------------------------------]
0x40055e: mov rax,QWORD PTR fs:0x28
0x400567: mov QWORD PTR [rbp-0x8],rax
0x40056b: xor eax,eax
=> 0x40056d: mov DWORD PTR [rbp-0x70],0x3
0x400574: mov DWORD PTR [rbp-0x6c],0xb
0x40057b: mov DWORD PTR [rbp-0x68],0x0
0x400582: mov DWORD PTR [rbp-0x64],0x16
0x400589: mov DWORD PTR [rbp-0x60],0xf
RDIに気になる文字列が展開されている. トレースしていくと0x400630から0x40069aでループして文字列を操作しているようだ.
[-------------------------------------code-------------------------------------]
0x40068b: mov BYTE PTR [rdx],al
0x40068d: add DWORD PTR [rbp-0x74],0x1
0x400691: mov eax,DWORD PTR [rbp-0x74]
=> 0x400694: cmp eax,DWORD PTR [rbp-0x8c]
0x40069a: jl 0x400630
0x40069c: nop
0x40069d: mov rax,QWORD PTR [rbp-0x8]
0x4006a1: xor rax,QWORD PTR fs:0x28
ループを抜けた0x40069cにブレークポイントを置いて一気に進める. フラグを回収できた.
gdb-peda$ b *0x40069c
gdb-peda$ c
[-------------------------------------code-------------------------------------]
0x400691: mov eax,DWORD PTR [rbp-0x74]
0x400694: cmp eax,DWORD PTR [rbp-0x8c]
0x40069a: jl 0x400630
=> 0x40069c: nop
0x40069d: mov rax,QWORD PTR [rbp-0x8]
0x4006a1: xor rax,QWORD PTR fs:0x28
0x4006aa: je 0x4006b1
0x4006ac: call 0x400420 <__stack_chk_fail@plt>
[------------------------------------stack-------------------------------------]
0000| 0x7fffffffe4d0 --> 0x1a00000000
0008| 0x7fffffffe4d8 --> 0x7fffffffe590 ("CRCTF{It's a humid night.}")
Stegano
Alpha
AlphaというタイトルのPNGが1枚渡される.
αチャンネルに何か仕込まれているだろうと予想してGIMPで開いてみる.
不透明度の大部分は253だが一部252の部分がある.
境界線を可視化できればフラグが入手できると予想されるが選択ツールで不透明度の境界を抽出できない(そもそも可能なのか?)
この手の問題解決でよく噂を聞くうさみみハリケーンを使う
252と253の差はビット0の有無なのでαチャンネルビット0を抽出する.
Misc
Opening Movie
@otameshi61さんのwriteupのトレースです
Windows用ILSpyを落としてきてMoviePlayer.dllを開く.
namespaceが4つあるので一つずつ見ていくとMoviePlayer.Pagesにそれらしいコードが見つかった.
C#知ってる人ならピンポイントで見にいけるのかな?
countが300を超えるとtxtをiframeで読み込む処理になっている.
if (this.count >= 300)
{
builder.AddContent(11, "\t");
builder.OpenElement(12, "div");
builder.AddAttribute(13, "class", "div");
builder.AddContent(14, "FLAG:");
builder.CloseElement();
builder.AddContent(15, "\n\t");
builder.OpenElement(16, "iframe");
builder.AddAttribute(17, "src", this.txt);
builder.CloseElement();
builder.AddContent(18, "\n");
}
txtはencrypt(str) + ".txt"
で作られている.
private string txt
{
get
{
return this.encrypt("FLAG_IS_HERE") + ".txt";
}
}
encryptメソッドはこれ.
private string encrypt(string str)
{
MD5CryptoServiceProvider mD5CryptoServiceProvider = new MD5CryptoServiceProvider();
return BitConverter.ToString(mD5CryptoServiceProvider.ComputeHash(Encoding.UTF8.GetBytes(str))).ToLower().Replace("-", "");
}
pythonで書き直す
import hashlib
from binascii import hexlify
import requests
md5 = hashlib.md5()
md5.update(bytes("FLAG_IS_HERE", "utf-8"))
r = requests.get("http://blazor.cyberrebeat.adctf.online/" + hexlify(md5.digest()).decode("utf-8") + ".txt")
print(r.text)
CRCTF{to the twilight of the internet}
他にも読みたいwriteup
- https://hiziriai.hatenablog.com/entry/2018/09/09/172539
- https://st98.github.io/diary/posts/2018-09-09-cyberrebeatctf.html
- http://otameshi61.hatenablog.com/entry/2018/09/09/154341