您当前的位置:首页 > 电脑百科 > 安全防护 > 网络安全

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

时间:2020-06-20 16:57:26  来源:  作者:

0x00 前言

之前我们简单介绍了一下扫描器中爬虫的部分,接下来将继续介绍扫描器中一些我们认为比较有趣的技巧。

0x01 编码/解码/协议

在很久以前有人提问 AMF 格式的请求怎么进行检测,或者有什么工具可以检测。

既然我们要讲解的是 Web 漏洞扫描器,那么就先假设是 AMF over HTTP (这里并不需要你了解 AMF,你只需要知道 AMF 是一种数据格式类型就行)。

假设我们需要测试一个 AMF 格式数据的 SQL 注入问题,那么按照通常的思路就是在 SQL 注入模块中:

1.先解析 HTTP 中 AMF 格式数据

2.然后在测试参数中填写 payload

3.重新封装 AMF 格式数据

4.发送 HTTP 请求

伪代码如下:

1req = {"method": "POST", "url": "http://fatezero.org", "body": "encoded data"}
2data = decode_amf(req["body"])
3for key, value in data.items():
4    d = copy.deepcopy(data)
5    d[key] = generate_payload(value)
6    body = encode_amf(d)
7    requests.request(method=req["method"], url=req["url"], body=body)

整个流程下来没什么问题,但是如果又来了一个 X 协议(X over HTTP),那么我们就得继续修改 SQL 注入模块以便支持这种 X 协议,但是扫描器中可不是只有 SQL 注入检测模块,还有其他同类模块,难道每加一个新协议我还得把所有检测模块都改一遍?

所以我们需要把这些协议解析和封装单独抽出来放在一个模块中。

伪代码如下:

 1# utils.py
 2def decode(data):
 3    if is_amf(data):
 4        data = decode_amf(data)
 5
 6    if is_X(data):
 7        data = decode_X(data)
 8
 9    # 递归 decode
10    for i in data:
11        data[i] = decode(data[i])
12
13    return data
14
15
16# detect_module.py
17req = {"method": "POST", "url": "http://fatezero.org", "body": "encoded data"}
18data = decode(req["body"])
19for key, value in data.items():
20    d = copy.deepcopy(data)
21    d[key] = generate_payload(value)
22    body = encode(d)
23    requests.request(method=req["method"], url=req["url"], body=body)

上面的递归 decode 主要是为了解码某种格式的数据里面还有另外一种格式的数据,虽然看起来这种场景比较少见,但是仔细想一下 multipart 带着 json,json 里的字符串是另外一个 json 字符串,是不是又觉得这种情况也并不少见。

那 encode/decode 剥离出来就可以了吗?请注意到上面伪代码使用了 requests. request 发送请求,那如果某天需要我们去测试 websocket 协议,是不是又得在检测模块中多加一套 websocket client 发送请求?

所以我们也需要将具体的网络操作给剥离出来,具体的协议类型直接由上面来处理,检测模块只需要关注具体填写的 payload。

伪代码如下:

1for key, value in x.items():
2    data.reset()
3    x[key] = generate_payload(value)
4    x.do()  # 负责将数据重新组装成原来的格式,并按照原始协议发送
5
6   # check

因为每个检测模块的检测依据大致就几种:

  • 返回内容
  • 消耗时间 (time based)
  • 另外一条信道的数据 (比方说 DNSlog)

所以即便是我们将网络操作剥离出来也不会影响检测的效果。

在编写检测模块的时候,编写者可以不用关心基础协议是什么,怎么对数据编码解码,只用关心根据 value 生成 payload 并填写到相对应的 key 中。

假如某天出现了这么一种流行编码格式 http://www.a.com/key1, value1,key2,value2,那我们所有的检测模块也无需修改,仅仅需要在上一层再添加一套 encode/decode 操作即可。假如某天出现了一种比较流行的协议,我们也仅需要在上一层提供一套 client 即可。检测模块的工作就仅仅剩下生成并填写 payload。

0x02 PoC 分类

在 2014 年的时候,我做了大量的竞品分析,包括使用逆向工程逆向商业的 Acunetix WVS, HP Webinspect, IBM AppScan, Netsparker 扫描逻辑,也包括阅读开源的 w3af, arachni 代码。

如果不谈扫描质量,只关注整体项目设计以及产品中使用到的猥琐技巧,那么其中最让我眼前一亮的当属 AWVS,接下来我将详细介绍一下我从 AWVS 中学习到的 PoC 分类。

PoC 分类:

类型描述PerServer用于检测 Web Server 级别中存在的漏洞,比方说各种中间件,Web 框架的漏洞PerFile用于检测某个文件中是否存在漏洞,比如对应文件的备份,Bash RCE 等PerFolder用于检测某个目录中是否存在漏洞,比如敏感信息的泄漏,路径中的 SQL 注入等PerScheme用于检测某个参数中是否存在漏洞,比如 SQL 注入,XSS 等PostCrawl在爬虫结束之后启动,直接使用爬虫的资源进行检测PostScan在扫描结束之后启动,用于检测二阶注入,存储 XSS等WebApps用于检测比较常用的 Web 应用的漏洞

大致的流程图如下:

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

 

在获取到爬虫资产,对相关资产格式化之后,便下发到各个不同类型的 PoC 中进行检测,这样做的好处是分类明确,覆盖大多数检测阶段,也避免为了减少重复请求的下发而需要额外记录中间状态的行为。

0x03 IAST

AWVS 有个比较有趣的功能 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<?php
2
3$link = NULL;
4$sql = "select * from user where user_id=".$_GET["id"];
5
6MySQLi_prepare($link, $sql);

经过 acu_phpaspect.php 转换之后:

1<?php
2
3$link = NULL; 
4$sql = "select * from user where user_id=".$_GET[_AAS91("hello.php", 4, "$_GET", "id")]; 
5
6_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 漏洞扫描器」

 

1.worker1 从队列中取到名为 target1 的任务

2.worker1 从 target1 队列中取出和 target1 相关的任务

3.默认单并发执行和 target1 相关任务,根据设置的 QPS 限制,主动 sleep 或者增加并发

这种方案的缺点是扫描器设计之初的时候就得使用这种方法,优点是每个并发可以稳定的和远程服务器保持链接,也不影响扫描功能。

0x05 漏洞检测

实际上这一节并不会讲具体某个漏洞检测方法,只是简单谈一下漏扫模块每个阶段该干的事情。

项目之初,没有相关积累,那么可以选择看一下 AWVS 的检测代码,虽然说网上公开的是 10.5 的插件代码,但其实从 8.0 到 11 的插件代码和 10.5 的也差不多,无非新增检测模块,修复误漏报的情况,也可以多看看 SQLMap 代码,看看检测逻辑,但是千万不要学习它的代码风格。从这些代码中可以学习到非常多的小技巧,比如动态页面检测,识别 404 页面等。看代码很容易理解相关的逻辑,但我们需要去理解为什么代码这样处理,历史背景是什么,所以多用 git blame。

到了中期,需要提升漏洞检测的精准度,漏洞检测的精准度是建立在各种 bad case 上,误报的 case 比较容易收集和解决,漏报的 case 就需要其他资源来配合。作为甲方如果有漏洞收集平台,那么可以结合白帽子以及自己部门渗透团队提交的漏洞去优化漏报情况。

如果扫描器是自己的一个开源项目的话,那么就必须适当的推广自己的项目,让更多的人去使用、反馈,然后才能继续完善项目,从而继续推广自己的项目,这是一个循环的过程。总而言之,提升漏洞检测的精准度需要两个条件:1. bad case,2. 维护精力

到了后期,各种常规的漏洞检测模块已经实现完成,也有精力持续提升检测精准度,日常漏洞 PoC 也有人员进行补充。

那么事情就结束了么?

不,依旧有很多事情我们可以去做,扫描器的主要目标是在不影响业务的情况下,不择手段的发现漏洞,所以除了常规的资产收集方式之外,我们还可以从公司内部各处获取资产相关的数据,比方说从 HIDS 中获取所有的端口数据、系统数据,从流量中或业务方日志中获取 url 相关数据等。

当然除了完善资产收集这块,还有辅助提升检测效果的事情,比如说上面提到的 AcuSensor,这部分事情可以结合公司内部的 RASP 做到同样效果,还有分析 access log、数据库 log 等事情。总的来说,做漏扫没有什么条条框框限制,只要能发现漏洞就行。

以上都是和技术相关的事情,做漏扫需要处理的事情也不仅仅只有技术,还需要去搞定详细可操作的漏洞描述及其解决方案,汇报可量化的指标数据,最重要的是拥有有理有据、令人信服的甩锅技巧



Tags:漏洞扫描   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
什么是Nessus?Nessus 是目前全世界最多人使用的系统漏洞扫描与分析软件。总共有超过75,000个机构使用Nessus 作为扫描该机构电脑系统的软件步骤如下:查看当前kali系统内核版本...【详细内容】
2021-09-09  Tags: 漏洞扫描  点击:(112)  评论:(0)  加入收藏
一、Nessus简单介绍Nessus是全球使用人数最多的系统漏洞扫描与分析软件,这是一个免费、威力强大、更新频繁并简易使用的远端系统安全扫描程序,功能十分强大。二、Nessus安装下...【详细内容】
2021-03-12  Tags: 漏洞扫描  点击:(655)  评论:(0)  加入收藏
AWVS是Acunetix Web Vulnerability Scanner的缩写它是一个自动化的Web应用程序安全测试工具,审计检查漏洞。它可以扫描任何可通过Web浏览器访问的和遵循HTTP/HTTPS规则的Web...【详细内容】
2021-01-27  Tags: 漏洞扫描  点击:(410)  评论:(0)  加入收藏
声明:禁止用作非法目的,谢绝一切形式的转载。在这里对OpenVas进行了简单的介绍。这篇文章着重介绍通过OpenVas扫描出来漏洞之后,如何利用这些漏洞达到获取被入侵机器"肉鸡"的sh...【详细内容】
2020-09-21  Tags: 漏洞扫描  点击:(198)  评论:(0)  加入收藏
前边的文章中,我们已经介绍过许多漏洞扫描的工具,今天我们就来介绍其中一款名叫AWVS漏洞扫描工具的使用。Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的网络漏洞扫...【详细内容】
2020-09-04  Tags: 漏洞扫描  点击:(253)  评论:(0)  加入收藏
网站漏洞想必有网站的人都比较了解,想要了解网站漏洞,最好的办法就是给网站做一次漏洞扫描,网站漏扫产品比较多,费用也从几十/次到几千/次不等,但是对于我这种小企业来说,几千一次...【详细内容】
2020-08-07  Tags: 漏洞扫描  点击:(207)  评论:(0)  加入收藏
渗透测试收集信息完成后,就要根据所收集的信息,扫描目标站点可能存在的漏洞了,包括我们之前提到过的如:SQL注入漏洞、跨站脚本漏洞、文件上传漏洞、文件包含漏洞及命令执行漏洞...【详细内容】
2020-07-22  Tags: 漏洞扫描  点击:(108)  评论:(0)  加入收藏
漏洞扫描工具是IT部门中必不可少的工具之一,因为漏洞每天都会出现,给企业带来安全隐患。漏洞扫描工具有助于检测安全漏洞、应用程序、操作系统、硬件和网络系统。漏洞扫描程序...【详细内容】
2020-07-18  Tags: 漏洞扫描  点击:(261)  评论:(0)  加入收藏
我们在挖漏洞没有思路的时候,或者面对多如牛毛的公益src不想一个个挖的时候,我们可以用medusa Medusa是一个漏洞扫描、漏洞利用、子域名探测、C段扫描、资产发现、敏感信息检...【详细内容】
2020-06-30  Tags: 漏洞扫描  点击:(209)  评论:(0)  加入收藏
0x00 前言之前我们简单介绍了一下扫描器中爬虫的部分,接下来将继续介绍扫描器中一些我们认为比较有趣的技巧。0x01 编码/解码/协议在很久以前有人提问 AMF 格式的请求怎么进...【详细内容】
2020-06-20  Tags: 漏洞扫描  点击:(78)  评论:(0)  加入收藏
▌简易百科推荐
(报告出品方:德勤)数字化转型网络安全及转型挑战在任何行业,保持竞争力都需要快速开发新产品和 服务并推向市场。创新型业务模式不仅仅是简单地将现有 流程数字化,其正在覆盖供应...【详细内容】
2021-12-22  认是    Tags:网络安全   点击:(29)  评论:(0)  加入收藏
10月18号, W3C中网络平台孵化器小组(Web Platform Incubator Community Group)公布了HTML Sanitizer API的规范草案。这份草案用来解决浏览器如何解决XSS攻击问题。 网络安全中...【详细内容】
2021-12-07  实战Java  博客园  Tags:脚本攻击   点击:(20)  评论:(0)  加入收藏
一、背景介绍大家在Linux的日常使用中都晓得如何通过命令行去配置Linux的端口开放规则,但是大家知道如何配置Windows入站出站规则吗?有哪些常见的危险端口呢?如何解决上述问题...【详细内容】
2021-12-01  Kali与编程    Tags:防火墙   点击:(30)  评论:(0)  加入收藏
网络安全服务商Randori公司日前发布了一份调查报告,列出了网络攻击者最有可能攻击或利用的IT资产。在遭遇Solarwinds黑客攻击一周年之际,以及在网络安全(尤其是勒索软件和供应...【详细内容】
2021-10-28  企业网D1net   企鹅号  Tags:网络攻击   点击:(57)  评论:(0)  加入收藏
0x01.背景实验利用Dns Administrators 组成员,通过远程配置Dns服务,进行Dll inject从而实现特权提升。 在域内,Dns server 通常为Dc Server,Dns服务器管理基于rpc,通过调用c:\wi...【详细内容】
2021-10-22  IT影子    Tags:特权提升   点击:(37)  评论:(0)  加入收藏
本文主要介绍和总结了CSRF跨站请求伪造的基本原理和主要防范措施,工作中有用到的朋友不妨收藏转发一下,以备您参考。什么是CSRF?CSRF跨站点请求伪造(Cross&mdash;Site Request...【详细内容】
2021-10-13  快乐中恒    Tags:CSRF   点击:(49)  评论:(0)  加入收藏
waf拦截在打某市 Hvv 第一天就找到一个文件上传的点,经过测试,可以直接任意文件上传,没有什么道理。 直接尝试上传 Php 文件,被 waf 拦截了 2021最新整理网络安全/渗透测试/安...【详细内容】
2021-10-11  KaliMa    Tags:防火墙   点击:(56)  评论:(0)  加入收藏
应用程序与文件系统的交互始终是高度安全敏感的,因为较小的功能漏洞很容易成为可利用漏洞的来源。这种观察在web文件管理器的情况下尤其正确,其作用是复制完整文件系统的功能...【详细内容】
2021-09-17  IT野涵    Tags:漏洞链   点击:(56)  评论:(0)  加入收藏
您的苹果手机尽管iPhone比Android更安全,但也可以通过各种方式入侵。避免黑客入侵的最佳方法是警惕奇怪的链接或粗略的应用程序,并仅在必要时提供信息。电池寿命差和性能低下...【详细内容】
2021-09-16  Hackers爱好者    Tags:黑客入侵   点击:(633)  评论:(0)  加入收藏
防火墙一般布置在逻辑区域的入口处,位于三层网络架构的核心和汇聚之间,起到隔离逻辑区域,为逻辑区域创建安全策略的作用。 上面就是应用区的防火墙布置方式,他布置在应用区,可以...【详细内容】
2021-09-03  知来知去    Tags:主备模式防火墙   点击:(109)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条