编写自己的漏扫—Web漏洞扫描技巧篇( 二 )


如果不谈扫描质量 , 只关注整体项目设计以及产品中使用到的猥琐技巧 , 那么其中最让我眼前一亮的当属 AWVS
接下来我将详细介绍一下我从 AWVS 中学习到的 PoC 分类 。
 
PoC 分类:
类型描述PerServer用于检测 Web Server 级别中存在的漏洞
比方说各种中间件 , Web 框架的漏洞PerFile用于检测某个文件中是否存在漏洞
比如对应文件的备份 , Bash RCE 等PerFolder用于检测某个目录中是否存在漏洞
比如敏感信息的泄漏 , 路径中的 SQL 注入等PerScheme用于检测某个参数中是否存在漏洞
比如 SQL 注入 , XSS 等PostCrawl在爬虫结束之后启动
直接使用爬虫的资源进行检测PostScan在扫描结束之后启动 , 用于检测二阶注入 , 存储 XSS等WebApps用于检测比较常用的 Web 应用的漏洞
 
大致的流程图如下:

编写自己的漏扫—Web漏洞扫描技巧篇

文章插图
 
【编写自己的漏扫—Web漏洞扫描技巧篇】在获取到爬虫资产 , 对相关资产格式化之后 , 便下发到各个不同类型的 PoC 中进行检测 , 这样做的好处是分类明确 , 覆盖大多数检测阶段
也避免为了减少重复请求的下发而需要额外记录中间状态的行为 。
 
三.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
  4. 遍历每一个 token , 对自己感兴趣的函数或者语句使用自己定义的函数进行 wrap 并替换
  5. 将替换后的内容保存到 cache 中并使用 eval 执行
  6. __halt_compiler 中断编译
 
举个具体的例子:
<?php$link = NULL;$sql = "select * from user where user_id=".$_GET["id"];MySQLi_prepare($link, $sql);经过 acu_phpaspect.php 转换之后:
<?php$link = NULL;$sql = "select * from user where user_id=".$_GET[_AAS91("hello.php", 4, "$_GET", "id")];_AAS86("hello.php",6,"mysqli_prepare",Array($link, $sql));整个过程简单粗暴有效 , 这样做的优点在于:
  • 实现简单 , 只需要编写 PHP 即可
  • 安装简单 , 无需安装扩展 , 只需修改配置文件可以
  • 兼容性强 , 比较容易兼容性各种环境 , 各种版本 PHP
 
如果有意向去做 IAST 或者想做类似我的 prvd 项目 , 
但又不太喜欢写 PHP 扩展 , 那么我强烈建议你完整的看一遍 PHP 版本 AcuSensor 的实现 , 
如果对自己实现的检测逻辑效率比较自信的话 , 甚至可以基于这个原理直接实现一个 PHP 版本的 RASP 项目 。
 
四.限速
在 Web 漏洞扫描器中 , 无论作为乙方的商业产品、甲方的自研产品 , 限速都是一个至关重要的功能 , 


推荐阅读