일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 취약점 스캔
- smb
- 스캔
- Los
- 해킹도구
- 해킹
- CTF
- web hacking
- 스캐닝
- 칼리리눅스
- 내부침투
- 해킹툴
- root권한
- Kioptrix
- 취약점
- 침투테스트
- 취약점분석
- Metasploit
- 시스템 해킹
- Hacking
- 모의해킹
- 권한상승
- 메타스플로잇
- SQLINJECTION
- Samba
- 암호해독
- sql
- SQL Injection
- 포트스캔
- load of sqlinjection
- Today
- Total
감자 텃밭
[시스템] Return-Oriented-Programming - ROP [x64-64bit] 본문
[시스템] Return-Oriented-Programming - ROP [x64-64bit]
g2h 2021. 11. 23. 02:32기본적인 ROP사용법은 32bit ROP에서 확인하자.
[시스템] Return-Oriented-Programming - ROP [x86-32bit]
ROP기법이란 Return-Oreinted-Programming의 약자로 반환 지향형 프로그래밍 이다. ret영역에 가젯을 이용하여 연속적으로 함수를 호출하며 공격자가 원하는 흐름대로 프로그래밍 하듯 공격한다는 뜻의
hg2lee.tistory.com
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 |