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

pin*_*hic 12 apache security apache-modules http-request

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

我目前正试图用一些自定义模块打破Apache.

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

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

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

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

  • 破了UTF-8?(虽然我怀疑Apache关心编码 - 我想它只是杂乱的原始字节.)
  • 东西只是勉强太长,接着是0字节,接着是垃圾?
  • 等等

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

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

roo*_*ook 11

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

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

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

当公司担心安全时,他们会为Coverity等自动化源分析工具支付大量资金.美国国土安全部为Coverity提供了大量资金来测试开源项目,Apache就是其中之一.我可以直接告诉你,我发现了一个缓冲区溢出,而且覆盖层没有拾起模糊测试.Coverity和其他源代码分析工具(如开源Rats)会产生大量误报和漏报,但它们确实有助于缩小影响代码库的问题.

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

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

祝好运!


Avi*_*viD 4

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

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