HTTP请求和Apache模块:Creative攻击向量

时间:2010-05-29 13:24:06

标签: apache security http-request apache-modules

这里有一点非正统的问题:

我目前正试图用一些自定义模块来破解Apache。

产生测试的是,Apache内部将其认为太大的请求(例如1 MB垃圾)转发给适当的模块,迫使他们处理垃圾数据 - 并且自定义模块中缺乏处理导致Apache进入它的整体火焰起来。哦,哎哟,哎哟。

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

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

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

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

我不认为自己是一个非常优秀的测试人员(我这样做是出于必要和缺乏人力;但遗憾的是,我甚至没有对Apache内部的基本掌握,这对我有帮助),这是为什么我希望有一个有见地的回应或两三个。也许你们有些人为自己的项目做过类似的测试?

(如果stackoverflow不是这个问题的正确位置,我道歉。不知道还能把它放在哪里。)

2 个答案:

答案 0 :(得分:11)

Apache是​​地球上最强硬的软件项目之一。在Apache的HTTPD中找到一个漏洞并不是一件容易的事,我建议你在一些更容易捕获的猎物上掏腰包。相比之下,更常见的是看到其他HTTPD中的漏洞,例如我今天看到的Nginx中的漏洞(不是开玩笑)。已经有其他源代码泄露漏洞非常相似,我会看this,这里是anotherlhttpd已经在sf.net上被遗弃了近十年,并且已知有影响它的缓冲区溢出,这使得它成为一个有趣的应用程序进行测试。

攻击项目时,您应该查看过去发现的漏洞类型。程序员可能会一次又一次地犯同样的错误,并且通常会出现一些模式。通过遵循这些模式,您可以发现更多缺陷。您应该尝试搜索Nist's search for CVEs等漏洞数据库。您将看到的一件事是apache模块最常被泄露。

像Apache这样的项目已经大量模糊。有一些模糊的框架,例如Peach。 Peach在很多方面帮助模糊测试,它可以帮助你的一种方法是给你一些讨厌的测试数据。对于成熟项目来说,模糊测试并不是一个非常好的方法,如果你走这条路线,我会尽可能少地下载apache modules。 (真正低下载量的警告项目可能会被破坏或难以安装。)

当公司担心安全时,他们会为Coverity等自动化源分析工具支付大量资金。美国国土安全部为Coverity提供了大量资金来测试开源项目和Apache is one of them。我可以直接告诉你,我发现a buffer overflow模糊了Coverity没有接受。 Coverity和其他源代码分析工具(如open source Rats)会产生大量误报和漏报,但它们确实有助于缩小影响代码库的问题。

(当我第一次在Linux内核上运行RATS时,我几乎从我的椅子上掉了下来,因为我的屏幕列出了成千上万次调用strcpy()和strcat(),但是当我挖掘代码时所有的调用工作都在静态文本,这是安全的。)

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

祝你好运!

答案 1 :(得分:4)

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

  • 编码不好 - 例如像你提到的那样超长utf-8,有些模块依赖于它,例如某些参数。
  • 参数操作 - 再次,取决于模块执行的操作,某些参数可能会混乱,通过更改值,删除预期参数或添加意外参数。
  • 与你的其他建议相反,我会查看只是勉强够短的数据,即比最大值短一个或两个字节,但是在不同的组合中 - 不同的参数,标题,请求体等等。
  • 查看HTTP Request Smuggling(还有herehere) - 错误的请求标头或无效的组合,例如多个Content-Length或无效的终结符,可能导致模块误解Apache的命令。
  • 还要考虑gzip,chunked编码等。自定义模块很可能无序地执行长度检查和解码。
  • 部分请求怎么样?例如,导致100-Continue响应或范围请求的请求?
  • @TheRook推荐的模糊测试工具Peach也是一个很好的方向,但不要期望第一次使用它时有很高的投资回报率。
  • 如果您有权访问源代码,那么专注的安全代码审核是一个好主意。或者,即使是自动代码扫描,使用像Coverity这样的工具(如@TheRook所提到的),或更好的...
  • 即使您没有源代码访问权限,也可以考虑由经验丰富的顾问/测试人员进行安全渗透测试,或至少使用自动化工具(有很多其他人) - 例如appscan,webinspect,netsparker,acunetix等等。