0

我正在学习计算机安全并且对命令有疑问。我有一个易受攻击的 Web 服务器,我可以通过使用 telnet 命令来利用缓冲区溢出,然后发送带有超长 URL 的 http get。URL 将溢出缓冲区。我知道这肯定有效。但是现在,我想使用 netcat 来自动化这个过程。到目前为止,我有

netcat localhost 8080 < payload1

我将它发送到本地主机,因为我在同一台计算机上运行服务器和攻击。Payload1 当前是格式错误的 HTTP Get 语句。但是,服务器无法理解这一点,因为它无法打开文件以查看 HTTP Get 语句。因此,我的问题是:如何使 HTTP Get 语句可执行,或者如何让服务器识别文件中的 HTTP Get?

谢谢!

编辑:似乎包含 uri 的 req 是 0。或者至少是当我用 GDB 检查它时。这是给我一个问题的代码行:

  if (req->uri == NULL || req->method == NULL ||
      req->headers == NULL || req->version == NULL) {
          return 0;
  }

GDB 在 if 语句中说这是一个分段错误。

我知道这可能没有多大意义,因为来自服务器的其余代码不存在。但是,netcat 语句发送的文件是:

get /aaaaaaaaaaaaAAAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAddddddddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa http/1.1

如果我使用 telnet 传输它,服务器确实会崩溃,所以我知道它是 netcat 的问题。有一个声明说payload1需要是带有CRLF结束行的DOS格式。为了检查这一点,我将文件传输到 Windows 机器并且它正确显示但是我想知道是否有另一种方法来检查这个?

4

1 回答 1

0

您看到什么错误让您认为服务器无法读取文件?使用您使用的命令行,“服务器”不会读取文件,您的操作系统外壳会打开文件并将其用作 netcat 进程的标准输入。

所以我请你:

  1. 检查payload1的路径。您可能需要使用类似的东西nc localhost 8080 < /path/to/payload1
  2. 检查您的服务器是否正在侦听 TCP 端口 8080
  3. 如果这些都不起作用,请提供一些错误消息/您遇到的问题的症状

更新(基于问题编辑):

这里的客户端是netcat。根据您的编辑,服务器似乎正在崩溃。所以请求正在通过服务器。您可能刚刚发现了服务器软件的另一个错误(除了原始缓冲区溢出之外)。当您尝试使用 telnet 时,您是否发送了相同的 URI?

于 2011-11-14T23:05:06.547 回答