1. NX 가 걸려있어서 쉘코드는 못 올리고…PIE가 있어서 메모리 주소가 계속 변한다…
=> offset 구하고 exploit 코드 짤 때 실행 시 libc base 주소나 libc function 주소 구하면 된다.
2 .최근 푸는 바이너리들은 disas main도 안 되서 디버깅을 못 했었는데 방법을 찾았다.
=> 그냥 run 하면 된다! (계속 오류떠서 안 되는 줄 알았다^^;)
(bp를 잡아서 buffer와 return address 거리는 못 구하지만..이건 방법을 찾아봐야겠다.)
3. (gdb) set stop-on-solib-events 1
이번 r0pbaby 처럼 실행하면 while(1)이 계속 있어서 gdb 가 멈추기 힘든데…
(gdb) set stop-on-solib-events 1
(gdb) run
(gdb) c
하면 offset 구할 때 편하다. (굳이 bp를 잡지 않아도..!)
4. IDA로 buffer 크기 구하려는데 [rbp+0h] 일 때!!!
당황하지 않고 “아…rbp니까 SFP에 위치하나보다” 라고 생각하자.
(이번 문제는 따로 buffer와 return address를 구하지 않아도 되서 편했다는..)
따라서 savedregs가 SFP부터 시작하므로 SFP(8) + return address(8) + …
으로 return address를 변조할 수 있다.
5. x64의 인자 전달 => “pop rdi; ret”
System 함수처럼 인자 값 하나를 저장할 때 “pop rdi; ret” 가젯을 사용한다.
두 번째 인자는 “pop rsi; ret”
첫 번째, 세 번째 인자 저장은 “pop rdi; pop rdx; ret”
6. x64의 구조 => “pop rdi; ret” + 첫 번째 인자 + &system
따라서 RTL 공격 시
&”pop rdi; ret” + &“/bin/sh” + &system
으로 payload 전달하면 된다.
7. ROP에 필요한 정보 구하기
Gdb-peda와 pwndbg 가 안 되는 상황에서 어떻게 하면 두 개의 debugger 없이 gadgets과 “/bin/sh” 주소를 어떻게 구할까 했는데… 구할 방법이 있었다!
# gadget 구하기
- ++rp 사용 (x86이면 rp-lin-x86 실행파일, x64이면 rp-lin-x64 실행파일 설치)
$ ./rp-lin-x64 -f /lib/x86_64-linux-gnu/libc-2.23.so -r 4 | grep "pop rdi"
위와 같이 원하는 가젯 주소나 offset을 구할 수 있다.
(libc 파일로 할 경우 offset을, 공격 대상 파일로 할 경우 주소를 구할 수 있다.)
- objdump 명령어 사용
$ objdump -d ./ropsaurusrex | grep -B3 “ret”
위와 같이 사용.
둘다 사용해본 결과, ++rp가 더 잘 찾는다.
# address 구하기
gdb에서 실행파일 run 한 후,
(gdb) x system
또는
(gdb) p system / p &system
으로 구한다.
* “/bin/sh” 찾기
(gdb) find &system, +9999999, “/bin/sh”
$ strings -t x /libc/x86_64-linux-gnu/libc-2.23.so | grep "/bin/sh"
# offset 구하기
gdb에서 run한 상태에서
(gdb) info proc map
으로 libc start addr를 찾는다. 그리고
(gdb) p/d &system - &(libc start addr) => decimal로 offset 구하기
(gdb) p/x &system - &*libc start addr) => hexdecimal로 offset 구하기
$ gdb -q /lib/x86_64-linux-gnu/libc-2.23.so
로도 debugging해서 필요한 정보(주소, offset 등) 찾을 수 있다.
[tuCTF] shella-easy (0) | 2019.08.23 |
---|---|
[HITCON-Training] lab4 : ret2lib (0) | 2019.08.18 |
[Defcon 2015] r0pbaby (0) | 2019.08.16 |
[PlaidCTF 2013] ropasaurusrex (0) | 2019.08.15 |
[HITCON-Training] lab5 : simplerop (0) | 2019.08.15 |