[STACK] mprotect ROP
두비니
·2021. 3. 17. 22:57
ROP using mprotect
오늘은 기존의 ROP와는 조금 다른 것을 해보려고 합니다.
기존에는 system함수를 이용해서 권한을 얻는 식이라면, 이번에는 mprotect함수를 이용해서 권한을 획득하는 방식의 ROP에 대해서 알아보려고 합니다.
1. mprotect함수란
기본적으로 mprotect함수에 대해서 알아보도록 합시다.
mprotect함수는 메모리에 대한 접근을 제어하는 함수로, 원형은 다음과 같습니다.
#include <sys/mman.h>
int mprotect(const void *addr, size_t len, int prot);
- addr : 접근을 제어할 주소
- len : 주소 기준으로 관여할 길이
- prot : 다음 값들의 비트OR값이다.
PROT_NONE : 접근할 수 없다.
PROT_READ : 읽기
PROT_WRITE : 쓰기
PROT_EXEC : 실행
- 반환값 : 성공시 0, 에러시 -1 리턴
**주의** addr의 값은 페이지 경계에 맞게 정렬되어 있어야 한다. |
2. exploit plan
이 mprotect함수가 강력한 이유는, 기존에 메모리에 대한 접근이 제한되어 있는 메모리에도 권한을 부여할 수 있다는 점입니다. 즉 NX를 무력화 시킬 수 있다는 것이죠.
보통은 shellcode를 써놓고, 그 영역에 실행 권한을 줘서 exploit하는 방식으로 진행합니다.
즉, 다음과 같이 함수를 실행시키면 exploit가 가능해집니다.
1. shellcode를 작성(고정주소를 이용해야하기 때문에 보통 bss영역 사용)
2. mprotect(&shellcode, 0x1000의 배수, 0x7)
이걸 보통 rtl chaining이나 rop와 엮어서 하고, 익스 코드를 짜면 다음과 비슷하게 생겼습니다.
문제풀이 자체가 궁금하신 분은 >> dokhakdubini.tistory.com/422
3. 결론
system함수를 쓸 수 없는 상황에서 사용하기 좋은 방법인 것 같습니다.
참고로 mmap함수도 비슷한 방법으로 활용할 수 있기 때문에 더 공부하고싶으시다면 아래 글 참조하면 좋을 것 같습니다. 라젠카 최고
참고 : www.lazenca.net/display/TEC/03.ROP%28Return+Oriented+Programming%29+-+mmap%2C+mprotect
blog.yes24.com/blog/blogMain.aspx?blogid=ukyo&artSeqNo=1588571
'SYSTEM HACKING > PWNABLE&REVERSING' 카테고리의 다른 글
[PWN] shellcode 정리 (0) | 2022.04.06 |
---|---|
[Python] Built-in 객체 사용하기, 응용하기 (Python RCE) (0) | 2021.05.14 |
그래서 우리가 포너블을 하는 이유 (2) | 2021.03.07 |
[Stack] Stack Frame 공부하기 - 2 (0) | 2021.03.02 |
[Stack] Stack Frame 공부하기 - 1 (0) | 2021.03.01 |