Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- web hacking
- 포트스캔
- 취약점
- Samba
- Los
- root권한
- CTF
- 시스템 해킹
- 내부침투
- SQLINJECTION
- 취약점 스캔
- 취약점분석
- 칼리리눅스
- SQL Injection
- smb
- load of sqlinjection
- sql
- 메타스플로잇
- Kioptrix
- 권한상승
- 해킹도구
- 스캐닝
- Metasploit
- 스캔
- Hacking
- 해킹툴
- 모의해킹
- 침투테스트
- 해킹
- 암호해독
Archives
- Today
- Total
감자 텃밭
[시스템] mprotect ROP 본문
보통 ROP는 Dynamic Link 바이너리에서 plt와 got를 이용하여 해결하는 기법이다.
하지만 주어진 바이너리파일이 Dynamic Link된 파일이 아닌
Static Link된 파일일 경우 사용할 수 없게 된다.
필요한 모든 함수구현 코드들이
실행파일 안에 존재하기 때문이다 하지만 해당 함수코드중 system()함수가 없는 경우 공격이 힘들어진다.
이렇게 system()함수가 존재하지않고 Static Link된 바이너리 파일에서의 ROP공격을 하기 위한 기법이
mprotect ROP이다. 특정 메모리 영역에 ShellCode를 삽입하여 사용하는 기법이다.
일단 해당 ROP를 하기위해서는 mprotect 함수에 대해 우선적으로 알아보자.
mprotect() 함수는 할당된 메모리 영역의 권한을 변경하는 함수이다.
함수의 원형은 아래와 같다.
함수원형
- int mprotect (void *addr, size_t len, int prot);
- 여기서 void *addr은 접근을 제어할 주소이며, 값은 0x1000 즉 4096의 배수여야 한다.
(addr의 값은 페이지 경계에 맞게 정렬 되어 있어야 하며, 페이지의 크기는 4096이다.)
- len은 주소 기준으로 관여할 길이이며,
- prot는 다음 값들의 비트 or 값이다.
(쉽게 생각해서 rwx와 같이 권한이라 생각하면된다.)
● PROT_NOTE : 접근할 수 없다.
● PROT_READ : 일기
● PROT_WRITE : 쓰기
● PROT_EXEC : 실행
반환값 : 성공 - 0, 에러 - -1 반환
주의할 점
- mprotect [주소값] 부터 [주소값 + 길이-1]를 포함하는 메모리 페이지의 접근 권한을 수정하는 것
- 전달되는 매개변수 addr은 반드시 정렬된 boundary여야 한다.
해당 기법의 강력한 장점은 NX메모리 보호기법이 걸려 있다 하더라도
ShellCode를 실행시킬 수 있다는 점이다.
NX 메모리 보호기법으로 실행권한이 없더라도
mprotect() 함수를 사용하여 사용할 영역에 실행권한을 줄 수 있기 때문이다.
사용할 영역은 보통 ASLR이 걸려있더라도 주소값이 바뀌지 않는
고정된 영역인 .bss 영역에 ShellCode를 저장한다.
해당 기법을 적용시킨 문제는 아래에서 확인할 수 있다.
참고자료
https://dokhakdubini.tistory.com/421
※ 내용이 이상하거나 문제가 있을경우, 또는 설명에 부족한 내용이 있으시면 알려 주시면 감사합니다.
'System > System Hacking Techniques' 카테고리의 다른 글
[시스템] Frame Pointer Overflow [FPO], SFP Overflow, SFPO (1) | 2021.12.07 |
---|---|
[시스템] Return-Oriented-Programming - ROP [x64-64bit] (0) | 2021.11.23 |
[시스템] Return-Oriented-Programming - ROP [x86-32bit] (0) | 2021.11.22 |
[시스템] GOT Overwrite (2) | 2021.11.22 |
[시스템] RTL-Chaining (0) | 2021.11.21 |