漏洞扫描技巧篇 「Web 漏洞扫描器」( 二 )


大致的流程图如下:

漏洞扫描技巧篇 「Web 漏洞扫描器」

文章插图
 
在获取到爬虫资产,对相关资产格式化之后,便下发到各个不同类型的 PoC 中进行检测,这样做的好处是分类明确,覆盖大多数检测阶段,也避免为了减少重复请求的下发而需要额外记录中间状态的行为 。
0x03 IASTAWVS 有个比较有趣的功能 AcuMonitor ,也就大家熟知的 dnslog、反连平台 。在 2014 年看到 AWVS 的这个功能时,就建议 WooYun 出个类似的功能,也就是 cloudeye,tangscan 也就算是国内比较早使用这种技术的扫描器,当然后续又出现了各种类似 cloudeye 的项目,自然而然也出现了各种使用该技术的扫描器 。
不过今天我们不打算继续介绍 AcuMonitor,而是介绍另外一个也很有趣的功能 AcuSensor。AcuSensor 就是IAST,只要稍微了解过 Web 漏洞扫描器的,都应该会知道 IAST 是干啥的 。那为什么我要单独拎出来讲这个呢?
主要是因为 AcuSensor 的实现方式非常有趣 。AcuSensor 提供了 JAVA、 .NET、php 这三个语言版本,其中比较有趣的是 PHP 版本的实现 。
PHP版本的AcuSensor使用方法是下载一个acu_phpaspect.php文件,再通过 auto_prepend_file 加载这个文件, 众所周知,PHP 是不能改直接 hook PHP 内置函数的,那么单单依靠一个 PHP 脚本,AcuSensor是如何做到类似 IAST 功能的呢?
很简单,直接替换所有关键函数 。嗯,真的就那么简单 。
我们来详细介绍一下这个过程,在 acu_phpaspect.php 中:
1.获取用户实际请求的文件内容
2.检查一下有没有相关 cache,如果有 cache 那么直接加载执行 cache,然后结束
3.使用 token_get_all获取所有 token遍历每一个 token,对自己感兴趣的函数或者语句使用自己定义的函数进行 wrap 并替换
4.将替换后的内容保存到 cache 中并使用 eval 执行
5.__halt_compiler中断编译
举个具体的例子:
1<?php23$link = NULL;4$sql = "select * from user where user_id=".$_GET["id"];56MySQLi_prepare($link, $sql);经过 acu_phpaspect.php 转换之后:
1<?php23$link = NULL; 4$sql = "select * from user where user_id=".$_GET[_AAS91("hello.php", 4, "$_GET", "id")]; 56_AAS86("hello.php",6,"mysqli_prepare",Array($link, $sql));整个过程简单粗暴有效,这样做的优点在于:
  • 实现简单,只需要编写 PHP 即可
  • 安装简单,无需安装扩展,只需修改配置文件可以
  • 兼容性强,比较容易兼容性各种环境,各种版本 PHP
如果有意向去做 IAST 或者想做类似我的 prvd http://github. com/fate0/prvd项目,但又不太喜欢写 PHP 扩展,那么我强烈建议你完整的看一遍 PHP 版本 AcuSensor 的实现 。如果对自己实现的检测逻辑效率比较自信的话,甚至可以基于这个原理直接实现一个 PHP 版本的 RASP 项目 。
0x04 限速在 Web 漏洞扫描器中,无论作为乙方的商业产品、甲方的自研产品,限速都是一个至关重要的功能,甚至可以说如果你的扫描器没有限速功能,那压根就不能上线使用 。接下来我们将介绍一下在扫描器中限速的几种方法 。
1.代理使用代理做限速功能,将所有执行扫描任务的 worker 的测试流量全转发proxy 服务器上:
漏洞扫描技巧篇 「Web 漏洞扫描器」

文章插图
 
由 proxy 服务器统一调度发送测试请求频率,直接使用 proxy 方案优点是可以兼容之前没做限速功能的扫描器,缺点是所有基于 time based 的检测均无效(当然也可以让 proxy 返回真正的响应时间来进行判断,不过仍需要修改检测模块),也不允许在检测模块中加入超时设置 。
2.双重队列另外一种方法是使用双重队列实现限速功能,流程图如下:
漏洞扫描技巧篇 「Web 漏洞扫描器」

文章插图
【漏洞扫描技巧篇 「Web 漏洞扫描器」】 
1.worker1 从队列中取到名为 target1 的任务
2.worker1 从 target1 队列中取出和 target1 相关的任务
3.默认单并发执行和 target1 相关任务,根据设置的 QPS 限制,主动 sleep 或者增加并发
这种方案的缺点是扫描器设计之初的时候就得使用这种方法,优点是每个并发可以稳定的和远程服务器保持链接,也不影响扫描功能 。
0x05 漏洞检测实际上这一节并不会讲具体某个漏洞检测方法,只是简单谈一下漏扫模块每个阶段该干的事情 。


推荐阅读