일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SQLINJECTION
- smb
- 스캐닝
- 취약점분석
- 해킹툴
- 침투테스트
- 취약점
- root권한
- load of sqlinjection
- Hacking
- Samba
- CTF
- 스캔
- Metasploit
- SQL Injection
- 시스템 해킹
- 권한상승
- web hacking
- 모의해킹
- Kioptrix
- 내부침투
- sql
- 암호해독
- 포트스캔
- 취약점 스캔
- 메타스플로잇
- 칼리리눅스
- 해킹
- 해킹도구
- Los
- Today
- Total
감자 텃밭
[시스템] Return-Oriented-Programming - ROP [x64-64bit] 본문
[시스템] Return-Oriented-Programming - ROP [x64-64bit]
g2h 2021. 11. 23. 02:32기본적인 ROP사용법은 32bit ROP에서 확인하자.
64bit ROP는 32bit ROP와 사용법이 살짝 다르다.
32bit ROP에서는 POP POP ret 등의 가젯에서,
pop 명령어의 피연산자의 종류가 상관이 없었다.
하지만 64bit 환경에서는 이 피연산자의 종류가 중요하다
그 이유는 호출 규약인 System V AMD64 ABI로 인한,
64bit 환경에서는 함수를 호출할 때 우선적으로 인자값을 레지스터에 저장 후
함수를 호출하기 때문이다.
x64 ROP에서 POP 명령어의 역할은 아래와 같이 분류할 수 있다.
1. ESP 레지스터의 값을 증가시켜 함수를 연속으로 호출하는 것
2. 호출할 함수에 전달될 인자 값을 레지스터에 저장하는 것
3. 인자 값은 Stack에 저장되어 있음
이러한 역할로 인해 x64 ROP에서는 Gadget을 찾기가 어려워 진다.
레지스터 저장에도 사용되는 레지스터에는 순서가 존재한다.
보통 RDI, RSI, RDX, RCX, R8, R9 ... 순서로 사용되며,
호출할 함수의 전달되는 인자값들을 저장하기 위해서 아래의 형태와 같이 사용된다.
● 첫 번째 인자 값을 저장 : pop rdi; ret
● 두 번째 인자 값을 저장 : pop rsi; ret
● 세 번째 인자 값을 저장 : pop rdx; ret
보통 3개를 쓰며, 그 이상일 경우 위의 레지스터 순서대로 사용된다.
또한, 3개를 한번에 사용할 경우, 순서가 섞여 첫 번째, 세 번째 인자값을 저장할 경우는 아래와 같이 쓰인다.
● 한번에 3개를 사용 : pop rdi; pop rsi; pop rdx; ret
● 첫 번째, 세 번째 값을 저장 : pop rdi; pop rdx; ret
Payload 에서의 사용법을 살펴보기 위해 아래 사진을 참고하자.
위 Payload를 보면
pop rdi; ret가젯과 pop rsi; pop rdx; 가젯 두 개를 사용 하여 레지스터에 값을 넣고 필요 함수를 호출한다.
x64와 x32ROP 의 차이는 레지스터에 값을 저장 후 함수를 호출하는것을 제외한 나머지
방법은 동일하다.
참고자료
https://www.lazenca.net/display/TEC/02.ROP%28Return+Oriented+Programming%29-x64
※ 내용이 이상하거나 문제가 있을경우, 또는 설명에 부족한 내용이 있으시면 알려 주시면 감사합니다.
'System > System Hacking Techniques' 카테고리의 다른 글
[시스템] Frame Pointer Overflow [FPO], SFP Overflow, SFPO (1) | 2021.12.07 |
---|---|
[시스템] mprotect ROP (1) | 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 |