[LAZENCA] ROP-x64 part.3
이전 포스팅
[LAZENCA] ROP-x64 part.1
참고 자료 https://www.lazenca.net/display/TEC/02.ROP%28Return+Oriented+Programming%29-x64 02.ROP(Return Oriented Programming)-x64 - TechNote - Lazenca.0x0 Excuse the ads! We need some help to keep our site up. List Return Oriented Programming(ROP) -x64
yi-barrack.tistory.com
[LAZENCA] ROP-x64 part.2
이전 포스팅 2023.11.09 - [시스템해킹] - [LAZENCA] ROP-x64 part.1 [LAZENCA] ROP-x64 part.1 참고 자료 https://www.lazenca.net/display/TEC/02.ROP%28Return+Oriented+Programming%29-x64 02.ROP(Return Oriented Programming)-x64 - TechNote - Lazenca.0
yi-barrack.tistory.com
참고 자료
02.ROP(Return Oriented Programming)-x64 - TechNote - Lazenca.0x0
Excuse the ads! We need some help to keep our site up. List Return Oriented Programming(ROP) -x64 ROP( Return-oriented programming )는 공격자가 실행 공간 보호(NXbit) 및 코드 서명(Code signing)과 같은 보안 방어가있는 상태
www.lazenca.net
자 그러면 전에 말한 확인해야할 정보들에 대해 알아보자.
확인해야할 정보
- vuln의 ret까지의 offset
- "/bin/sh"문자열이 저장된 영역
- libc offset
- printf
- system
- setresuid
- 가젯의 위치
- pop rdi,ret
- pop rsi,ret
- pop rdx,ret
왜 가젯의 위치라고 하고 가젯들이 정확하게 등장했는지는... 나중에 설명하고(궁금하면 lazenca 들어가서 읽어봐용)
주의
현재 PIE가 설정되어 있음으로 offset을 구할땐 당연히 프로그램을 재시작 하지말고 구하자. 재시작하면 base주소 바뀌어서... 못알아 듣겠다면...
전 포스트의 계단에서 지면으로부터의 사람의 머리 높이 구하기(키) 예시를 다시 들어보자. 만약 재시작 한다면 3번째 칸에서의 어깨높이로 8번째칸에 있는 사람의 머리 높이를 구하려고 노력하는 꼴이 될 수 있다. (어케 사람 머리가 170cm) 이런 결과가 나오지 않으려면 계단을 이동하지 않은 상태에서 구해야 하는게 당연하겠죠...?
vuln ret까지의 offset 구하기
disass vuln을 통해 vuln+0 과 vuln+82(read@plt) 부분에 breakpoint를 걸어두자.
vuln을 실행하자마자 rsp값을 기록해둔다.
자 call 위치에서 rsi의 값을 구한다. rsi는 버퍼의 위치이다. 따라서 이 rsi와 rsp의 차를 구하면 offset이 나온다.ㅇㅈ?
그러티그러티. offset이 72라고 한다.
"/bin/sh" 문자열의 위치 찾기
우리 pwndbg 형님은 search 기능을 가지고 계신다.
(pwndbg 형님 search 쓰신다)
자 그러면 이 개쩌는 기능을 써보자. 간단하게 search "/bin/sh" 하면 끝.
와. 장군님.
libc의 베이스 주소 찾기
info proc map 명령어를 사용하면 현재 libc의 베이스 주소를 볼 수 있다.
자 libc.so.6 start addr 에서 offset 값이 0x0인 곳을 보면 그곳이 libc의 베이스 주소이다.(물론 1회성...)
자 이 값을 통해서 /bin/sh의 offset을 구하면 0x1d8698 값이 나온다.
printf, system, setresuid의 offset 찾기
libc의 주소를 다 뺴주며 offset을 구하면 해당 값이 나온다.
Find gadget!
우리가 필요한 가젯은
1. pop rdi; ret;
2. pop rsi; ret;
3. pop rdx; ret;
이다. 해당 가젯들을 찾으려면 pwndbg에서 rop --grep "찾는 가젯" 이라고 적으면 된다.
자. 이제 모든 준비가 끝났다.(끝났나..?) 이제 익스 하러 가보자구.