如何将 eof 发送到 pwntools 中的进程/服务器?

问题描述

我试图让 read 在程序中返回 0(while 循环中的那个),然后正确执行第二次 read,这完全是手动的,使用 CTRL-D。但是我想在 pwntools (p = process("./test")) 中做同样的事情。我已经尝试用 p.sendline("\x04") 发送 eof 字符但没有用。程序接受像 "\x0a\x04" 这样的输入。 p.send() 不会改变任何东西。这是我的测试程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
   char buf[24];
   while(1) {
      if(read(0,buf,16)==0) {
         break;
      }
   }
   read(0,16);
   return 0;
}

我希望任何人都可以帮助我。

解决方法

这取决于连接类型。

如果是管道或套接字,除了关闭连接别无他法。

但是如果是伪终端(可以在pwntools中使用process(...,stdin=PTY)强制执行),可以使用操作系统的终端行编辑功能(参见termios(3)规范模式),您可以使用 p.send(b'\4')(即 Ctrl+D)向其发送 EOF 标记。

所以你的最终代码应该是这样的:

from pwn import *

p = process('./test',stdin=PTY)
p.send(b'\4')  # mind the b before binary data literal (text is not bytes)

# then something else maybe
p.interactive()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...