컴파일 옵션 : 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 |