NX-bit binary exploit
Sunrin/Layer7

NX-bit binary exploit

컴파일 옵션 : gcc -o test2 test.c -fno-stack-protector -z norelro 

 

 

1. 버퍼의 시작 주소 알아내기

main을 disassemble 한다.

 

버퍼의 시작 주소를 의미하는 부분은 0x00000000004006f3이다. ( rbp-0x100 )

 

0x00000000004006f3 에 breakpoint를 걸고 run한다.

 

buf에 doyeon을 입력한다.

 

doyeon이 0x7fffffffde70에 들어갔다.

 

buf 시작 주소는 0x7fffffffde70 이다.

( 입력받은 문자열이 buf에 저장되기 때문)

 

 


 

2. rdi값 찾기

rdi는 함수의 첫 번째 인자이다.

rdi값을 찾기 위해서 gadget을 이용한다.

<가젯 명령어>

ROPgadget --binary (파일명)

 

ROPgadget --binary ./test 를 입력해서 

pop rdi를 부분을 찾는다.

 

rdi값은 0x00000000004007a3 이다.

 

 


 

3. 시스템 함수의 주소

p system을 이용해서 시스템 함수의 주소값을 알아낸다.

 

 

시스템 함수의 주소값은 0x7ffff7a334e0 이다.

 

 

 


4. Exploit 코드

:1

pwn 모듈을 import 해준다.

 

:3

binary에 "./test"를 집어 넣는다.

 

:5

test 실행파일을 불러온다.

aslr은 false로 해둔다.

 

:8

터미널을 새 창에서 연다.

 

:10

잠시 멈춤

 

:12

"What's your name?: " 까지의 문자열을 읽어온다.

 

:13

"doyeon" 입력을 받는다.

 

:15

위에서 구한 rdi 값을 집어넣는다.

 

:18

payload에 null값을 초기화한다.

 

:19

payload에 /bin/sh\x00을 payload에 넣어준다.

 

:20

payload에 A를 0x108개 넣어준다.

 

:21

payload에 rdi ( 함수의 첫 번째 인자 ) + 버퍼의 시작 주소값을 넣어준다.

 

:22

payload에 system 함수 주소를 넣어준다.

 

:24

"Last greeting : " 까지의 문자열을 읽어온다.

 

:25

payload 입력을 받는다.

 

:27

사용자와 상호작용을 하기 위한 코드이다.

 

 

 

 

 

 

'Sunrin > Layer7' 카테고리의 다른 글

Web hacking project idea note  (0) 2020.08.30
NX-bit binary exploit ( with ASLR )  (0) 2020.08.27
No-mitigation binary exploit  (0) 2020.08.18
Webhacking Project - PHP와 MySQL  (0) 2020.08.12
Dreamhack - Introduction of Webhacking 정리  (0) 2020.08.07