5.6 KiB
Ret2esp / Ret2reg
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Ret2esp
ESP(스택 포인터)는 항상 스택의 맨 위를 가리키기 때문에, 이 기술은 EIP(명령 포인터)를 jmp esp
또는 call esp
명령의 주소로 교체하는 것을 포함합니다. 이렇게 하면 셸코드가 덮어쓴 EIP 바로 뒤에 배치됩니다. ret
명령이 실행되면 ESP는 다음 주소를 가리키며, 정확히 셸코드가 저장된 위치입니다.
**주소 공간 배치 무작위화(ASLR)**가 Windows 또는 Linux에서 활성화되지 않은 경우, 공유 라이브러리에서 발견된 jmp esp
또는 call esp
명령을 사용할 수 있습니다. 그러나 ASLR이 활성화된 경우, 이러한 명령을 찾기 위해 취약한 프로그램 자체를 살펴봐야 할 수 있습니다(그리고 PIE를 우회해야 할 수도 있습니다).
게다가 EIP 손상 이후에 셸코드를 배치할 수 있는 것은, 스택의 중간이 아닌, 함수의 작동 중에 실행되는 push
또는 pop
명령이 셸코드에 간섭하지 않도록 보장합니다. 셸코드가 함수의 스택 중간에 배치되면 이러한 간섭이 발생할 수 있습니다.
공간 부족
RIP를 덮어쓴 후에 쓸 공간이 부족한 경우(아마도 몇 바이트 정도), 초기 jmp
셸코드를 다음과 같이 작성하십시오:
sub rsp, 0x30
jmp rsp
그리고 스택의 초기에 셸코드를 작성하십시오.
예시
이 기술의 예시는 https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp에서 찾을 수 있으며, 최종 익스플로잇은 다음과 같습니다:
from pwn import *
elf = context.binary = ELF('./vuln')
p = process()
jmp_rsp = next(elf.search(asm('jmp rsp')))
payload = b'A' * 120
payload += p64(jmp_rsp)
payload += asm('''
sub rsp, 10;
jmp rsp;
''')
pause()
p.sendlineafter('RSP!\n', payload)
p.interactive()
Ret2reg
유사하게, 함수가 셸코드가 저장된 주소를 반환하는 것을 알고 있다면, call eax
또는 jmp eax
명령어(일명 ret2eax 기법)를 활용하여 셸코드를 실행할 수 있는 또 다른 방법을 제공합니다. eax와 마찬가지로, 흥미로운 주소를 포함하는 다른 레지스터도 사용할 수 있습니다 (ret2reg).
Example
You can find an example here: https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/ret2reg/using-ret2reg
Protections
- NX: 스택이 실행 가능하지 않다면, 셸코드를 스택에 배치하고 실행하기 위해 점프해야 하므로 도움이 되지 않습니다.
- ASLR & PIE: 이러한 보호는 esp 또는 다른 레지스터로 점프할 명령어를 찾기 어렵게 만들 수 있습니다.
References
- https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode
- https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.