1. JOP(Jump-Oriented Programming)
-JMP 명령어를 이용하여 프로그램의 흐름을 제어하는 방법
-JOP의 gadget : “Exploit에 필요한 코드 + JMP 명령어”
Ex. x64 환경에서 함수의 첫 번째 인자값에 0 저장 : “mov rdi, 0; jmp [R9]”
2. Vuln code
-dlsym 함수로 prinf 함수 주소 leak
-read(0, buf, 256) : 크기 50 바이트인 buf에 256 바이트 입력 -> overflow 취약점
* return address와 buf 변수 사이 거리
Bp1 : vuln 함수 첫 번째 명령어 -> return address
Bp2 : vuln 함수 read 함수 호출 부분 -> buf 함수 주소
3. JOP 구조로 쉘 따기
-ROP gadget 이용해 rax에 system 함수 주소 저장
-ROP gadget 이용해 rdi에 system 함수의 첫 번째 인자값 (“/bin/sh”) 저장
-“JMP rax” 로 system 함수 호출
4. Gadget offset
* “pop rax; ret” gadget offset : 0xabc07
* “pop rdi; jmp rax” gadget libc offset : 0x104052
5. Exploit
[Heap Exploitation] The House of Spirit (0) | 2019.11.11 |
---|---|
[TechNote] malloc (Heap) (0) | 2019.11.02 |
[Exploit Tech] One gadget (3) | 2019.11.02 |
[Exploit Tech] ROP (Return Oriented Programming) -x64 (0) | 2019.08.17 |
[Exploit Tech] ROP (Return Oriented Programming) -x86 (0) | 2019.08.17 |