12

这里有点不正统的问题:

我目前正在尝试使用一些自定义模块来破坏 Apache。

引发测试的是 Apache 在内部将它认为太大的请求(例如 1 MB 垃圾)转发给适当连接的模块,迫使它们处理垃圾数据 - 并且自定义模块中缺乏处理导致 Apache 整体火上浇油。哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎。

幸运的是,该特定问题已得到解决,但问题是是否存在其他类似漏洞。

现在我有一个工具可以让我向服务器发送原始 HTTP 请求(或者更确切地说,通过已建立的 TCP 连接的原始数据,如果它遵循一个形式,例如“GET”,则可以解释为 HTTP 请求...”)我正在尝试提出其他想法。(像 Slowloris 和 Nkiller2 这样的 TCP 级攻击目前不是我关注的重点。)

有没有人有一些好主意如何将服务器的自定义模块混淆到服务器自焚的地步?

  • UTF-8 坏了?(虽然我怀疑 Apache 是否关心编码——我想它只是处理原始字节。)
  • 只是勉强太长的东西,然后是一个 0 字节,然后是垃圾?
  • 等等

我不认为自己是一个非常好的测试人员(我这样做是必要的,而且缺乏人力;不幸的是,我什至没有对 Apache 内部有帮助的基本掌握),这就是为什么我我希望得到一个或两个或三个有见地的回应。也许你们中的一些人为自己的项目做了一些类似的测试?

(如果 stackoverflow 不适合这个问题,我很抱歉。不知道该放在哪里。)

4

2 回答 2

11

Apache 是地球上最坚固的软件项目之一。在 Apache 的 HTTPD 中找到一个漏洞可不是一件小事,我建议您在一些更容易的猎物上切齿。相比之下,在其他 HTTPD 中看到漏洞更为常见,例如我今天在Nginx中看到的这个漏洞(不是开玩笑)。还有其他非常相似的源代码泄露漏洞,我会看看这个,这里是另一个. lhttpd在 sf.net 上已被废弃近十年,并且已知缓冲区溢出会影响它,这使其成为一个有趣的测试应用程序。

攻击项目时,您应该查看过去发现了哪些漏洞。程序员很可能会一次又一次地犯同样的错误,并且经常会出现一些模式。通过遵循这些模式,您可以发现更多缺陷。您应该尝试搜索 vulnerablites 数据库,例如Nist 搜索 CVEs。您将看到的一件事是 apache 模块最常受到攻击。

像 Apache 这样的项目已经被严重模糊了。有诸如Peach之类的模糊测试框架。Peach 在很多方面都有助于模糊测试,它可以帮助您的一种方法是为您提供一些令人讨厌的测试数据。Fuzzing 对于成熟的项目来说不是一个很好的方法,如果你走这条路,我会以apache 模块为目标,下载量尽可能少。(警告下载量非常低的项目可能会损坏或难以安装。)

当一家公司担心安全性时,他们通常会花很多钱购买自动化源分析工具,例如 Coverity。国土安全部给了 Coverity 一大笔钱来测试开源项目,而Apache 就是其中之一。我可以直接告诉你,我发现了一个带有模糊测试的缓冲区溢出,Coverity 没有发现。Coverity 和其他源代码分析工具(如开源 Rats)会产生大量误报和误报,但它们确实有助于缩小影响代码库的问题范围。

(当我第一次在 Linux 内核上运行 RATS 时,我差点从椅子上摔下来,因为我的屏幕列出了数千个对 strcpy() 和 strcat() 的调用,但是当我深入研究代码时,所有使用静态文本的调用,这是安全的。)

漏洞研究和漏洞利用开发非常有趣。我建议利用 PHP/MySQL 应用程序并探索The Whitebox。这个项目很重要,因为它表明存在一些现实世界的漏洞,除非您手动逐行阅读代码,否则无法找到这些漏洞。它还具有非常容易受到攻击的现实世界应用程序(博客和商店)。事实上,这两个应用程序都因安全问题而被放弃。像Wapiti这样的 Web 应用程序模糊器或 acuentix 将强奸这些应用程序和类似的应用程序。博客有一个技巧。全新安装不会受到太多影响。您必须稍微使用一下该应用程序,尝试以管理员身份登录,创建一个博客条目,然后对其进行扫描。在测试用于 sql 注入的 Web 应用程序时,请确保打开错误报告。在 php 中,您可以 display_errors=On在 php.ini 中进行设置。

祝你好运!

于 2010-06-01T23:05:04.947 回答
4

根据您连接的其他模块,以及激活它们的其他模块(或者它只是太大的请求?),您可能想尝试以下一些:

  • 错误的编码 - 例如你提到的超长 utf-8,在某些情况下模块依赖于它,例如某些参数。
  • 参数操作 - 同样,根据模块的功能,某些参数可能会与它们混淆,要么通过更改值、删除预期参数或添加意外参数。
  • 与您的其他建议相反,我会查看刚刚足够短的数据,即比最大值短一或两个字节,但组合不同 - 不同的参数、标头、请求正文等。
  • 查看HTTP 请求走私(也在此处此处) - 错误的请求标头或无效组合,例如多个 Content-Length 或无效终止符,可能会导致模块误解来自 Apache 的命令。
  • 还要考虑gzip,分块编码等。自定义模块很可能实现了长度检查和解码,乱序。
  • 部分请求呢?例如导致 100-Continue 响应的请求或范围请求?
  • @TheRook 推荐的 fuzzing工具Peach也是一个不错的方向,但不要指望第一次使用它会有很大的投资回报率。
  • 如果您可以访问源代码,那么重点关注安全代码审查是一个好主意。或者,甚至是自动代码扫描,使用像 Coverity 这样的工具(正如@TheRook 提到的那样),或者更好的工具......
  • 即使您没有源代码访问权限,也可以考虑由经验丰富的顾问/渗透测试人员进行安全渗透测试,或者至少使用自动化工具(有很多工具) - 例如 appscan、webinspect、netsparker、acunetix 等.
于 2010-06-06T22:03:45.783 回答