๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

ํ”„๋กœ์ ํŠธ/์‹œ์Šคํ…œ ํ•ดํ‚น

[์‹œ์Šคํ…œ ํ•ดํ‚น] ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์ทจ์•ฝ์  ํ•ดํ‚น ์‹ค์Šต (1)

728x90

https://youtu.be/ZRHncXwedZ8

๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์ทจ์•ฝ์  ํ•ดํ‚น ์‹ค์Šต์„ ์œ ํŠœ๋ธŒ๋ฅผ ๋ณด๋ฉฐ ๊ณต๋ถ€ํ•œ๋‹ค.


#nano overflow.c

ํ•˜๋‚˜์˜ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

#include <stdio.h>

int main(int argc, char *argv[]){
        char buf[16];
        if(argc!=2)
                return -1;
        strcpy(buf,argv[1]);
        return 0;
}

argc๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์‹œ ์ „๋‹ฌ๋˜๋Š” ์ธ์ž๋ฅผ ๋œปํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ./oveflow 6 3 ์ด๋Ÿฐ์‹์œผ๋กœ ํ•˜๋ฉด

./overflow๊ฐ€ 0๋ฒˆ์งธ ์ธ์ž, 6์ด 1๋ฒˆ์งธ ์ธ์ž, 3์ด 2๋ฒˆ์งธ ์ธ์ž๊ฐ€ ๋œ๋‹ค.

 

์—ฌ๊ธฐ์„œ strcpy๊ฐ€ ์ทจ์•ฝํ•˜๋‹ค.

์ธ์ž๊ฐ’์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์ง€์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

argv[1]์˜ ๊ฐ’์ด buf์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„  ํฌ๊ธฐ๋ผ๋„ strcpy๋ฅผ ํ†ตํ•ด ๋ฎ์–ด์“ฐ๊ฒŒ ๋œ๋‹ค.

buffer์˜ ํฌ๊ธฐ๋ฅผ ๋„˜์–ด RSP(RBP)๊นŒ์ง€ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด๊ฒƒ์ด ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋‹ค.

 

์ด๋ฅผ ๋Œ€์ฒ˜ํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด strncpy์ด๋‹ค.

 


 

#gcc -o overflow overflow.c

strcpy์ž์ฒด๊ฐ€ ์ทจ์•ฝํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ จ warning์ด ๋œฌ๋‹ค.

 

#gdb overflow

gdb๋ฅผ ์ด์šฉํ•ด ๋””๋ฒ„๊น…์„ ํ•ด๋ณธ๋‹ค.

2023.01.17 - [ํ”„๋กœ์ ํŠธ/์‹œ์Šคํ…œ ํ•ดํ‚น] - [์‹œ์Šคํ…œ ํ•ดํ‚น] ๋””๋ฒ„๊น…

 

[์‹œ์Šคํ…œ ํ•ดํ‚น] ๋””๋ฒ„๊น…

https://youtu.be/SVw0VnG5UDM ์œ ํŠœ๋ธŒ๋ฅผ ๋ณด๋ฉด์„œ ๋””๋ฒ„๊น…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณธ๋‹ค. starce, pwndbg ํ™œ์šฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž. ๋””๋ฒ„๊น…์€ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์„ ๋•Œ, ์—ญ์œผ๋กœ ์ถ”์ ํ•ด์„œ ์–ด๋–ป๊ฒŒ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ž‘ํ•˜๋Š”

dangsdangs.tistory.com

์ด์ „์— root ๋ง๊ณ  kali๊ณ„์ •์— pwndbg๋ฅผ ์„ค์น˜ํ–ˆ์–ด์„œ ๋‹ค์‹œ ์„ค์น˜ํ•˜๊ณ  ์™”๋‹ค...

pwndbg> run `perl -e 'print "X" x 24, "S" x 8'`

perl ์€ ์ž…๋ ฅ์„ ์ž๋™ํ™”ํ•ด์„œ ๋„ฃ๋Š”๊ฒƒ์ด๋‹ค.

X๋ฅผ ์ด 24๊ฐœ, S๋ฅผ 8๊ฐœ ๋งŒ๋“ค์–ด ๋„ฃ๋Š”๋‹ค.

์ด 32๊ธธ์ด๊ฐ€ ์ธ์ž๊ฐ’์œผ๋กœ ๋„ฃ์–ด์ง„๋‹ค.

 

ret๋ฅผ ๋ณด๋ฉด 0x53์ด S์ธ๋ฐ ์ด๋Š” ์œ„์—์„œ ๋„ฃ์€ S 8๊ฐœ๊ฐ€ ๋“ค์–ด๊ฐ„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Š” Buffer๋ถ€ํ„ฐ RSP(RBP)๊นŒ์ง€ 24ํฌ๊ธฐ์ธ๋ฐ ์ด๊ณณ์— X 24๊ฐœ๊ฐ€ ๋“ค์–ด๊ฐ„ ๊ฒƒ์ด๊ณ ,

๊ทธ ๋ฐ‘์˜ RET 8ํฌ๊ธฐ์— S 8๊ฐœ๊ฐ€ ๋“ค์–ด๊ฐ„ ๊ฒƒ์ด๋‹ค.

 

# sysctl -w kernel.randomize_va_space=0

์ปค๋„์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋žœ๋คํ™”๋ฅผ ๊บผ์ค€๋‹ค.

์ด๋Š” ASLR์ด๋ž€ ๋ณด์•ˆ ๊ธฐ๋Šฅ์ด๋‹ค.

#ldd ./overflow

ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๋‚˜์˜จ๋‹ค.

์ด๋ฅผ ๋ฐ˜๋ณต ์‹คํ–‰์‹œ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๋‚˜์˜ค๋ฉด, aslr ๊ธฐ๋Šฅ์ด ๊บผ์ง„ ๊ฒƒ์ด๋‹ค.