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

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

时间:2019-12-10 11:47:45  来源:  作者:

首先我们要了解到漏洞扫描器的扫描原理怎样的

网络漏洞扫描器对目标系统进行漏洞检测时,首先探测目标系统的存活主机,对存活主机进行端口扫描,确定系统听开放的端口,同时根据协议指纹技术识别出主机的操作系统类型。

然后扫描器对开放的端口进行网络服务类型的识别,确定其提供的网络服务。

漏洞扫描器根据目标系统的操作系统平台和提供的网络服务,调用漏洞资料库中已知的各种漏洞进行逐一检测,通过对探测响应数据包的分析判断是否存在漏洞。

 

一.编码/解码/协议

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

既然我们要讲解的是 Web 漏洞扫描器,那么就先假设是 AMF over HTTP

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

  1. 先解析 HTTP 中 AMF 格式数据
  2. 然后在测试参数中填写 payload
  3. 重新封装 AMF 格式数据
  4. 发送 HTTP 请求

 

伪代码如下:

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

整个流程下来没什么问题,但是如果又来了一个 X 协议(X over HTTP),那么我们就得继续修改 SQL 注入模块以便支持这种 X 协议

但是扫描器中可不是只有 SQL 注入检测模块,还有其他同类模块,难道每加一个新协议我还得把所有检测模块都改一遍?


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

 

伪代码如下:

# utils.py
def decode(data):
 if is_amf(data):
 data = decode_amf(data)

 if is_X(data):
 data = decode_X(data)

 # 递归 decode
 for i in data:
 data[i] = decode(data[i])

 return data


# detect_module.py
req = {"method": "POST", "url": "http://fatezero.org", "body": "encoded data"}
data = decode(req["body"])
for key, value in data.items():
 d = copy.deepcopy(data)
 d[key] = generate_payload(value)
 body = encode(d)
 requests.request(method=req["method"], url=req["url"], body=body)

上面的递归 decode 主要是为了解码某种格式的数据里面还有另外一种格式的数据,虽然看起来这种场景比较少见


但是仔细想一下 multipart 带着 json,json 里的字符串是另外一个 json 字符串,是不是又觉得这种情况也并不少见。

那 encode/decode 剥离出来就可以了吗?请注意到上面伪代码使用了 requests.request 发送请求


那如果某天需要我们去测试 websocket 协议,那是不是又得在检测模块中多加一套 websocket client 发送请求?


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

 

伪代码如下:

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

 # check

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

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

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

 

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

假如某天出现了这么一种流行编码格式 http://www.a.com/key1,value1,key2,value2,那我们所有的检测模块也无需修改


仅仅需要在上一层再添加一套 encode/decode 操作即可。假如某天出现了一种比较流行的协议,我们也仅需要在上一层提供一套 client 即可。


检测模块的工作就仅仅剩下生成并填写 payload

 

二.分类

在 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 中进行检测,这样做的好处是分类明确,覆盖大多数检测阶段

也避免为了减少重复请求的下发而需要额外记录中间状态的行为。

 

三.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
  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 漏洞扫描器中,无论作为乙方的商业产品、甲方的自研产品,限速都是一个至关重要的功能,

甚至可以说如果你的扫描器没有限速功能,那压根就不能上线使用。接下来我们将介绍一下在扫描器中限速的几种方法。

代理

使用代理做限速功能,将所有执行扫描任务的 worker 的测试流量全转发到 proxy 服务器上:

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

 

由 proxy 服务器统一调度发送测试请求频率,直接使用 proxy 方案优点是可以兼容之前没做限速功能的扫描器

缺点是所有基于 time based 的检测均无效(当然也可以让 proxy 返回真正的响应时间来进行判断,不过仍需要修改检测模块),也不允许在检测模块中加入超时设置。

 

双重队列

另外一种方法是使用双重队列实现限速功能,流程图如下:

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

 

  1. worker1 从队列中取到名为 target1 的任务
  2. worker1 从 target1 队列中取出和 target1 相关的任务
  3. 默认单并发执行和 target1 相关任务,根据设置的 QPS 限制,主动 sleep 或者增加并发

 

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

 

五.漏洞检测

项目之初,没有相关积累,那么可以选择看一下 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:Web漏洞   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、SQL注入漏洞SQL 注入攻击( SQL Injection ),简称注入攻击、SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。在设计程序,忽略了对输入字符串...【详细内容】
2021-12-10  Tags: Web漏洞  点击:(23)  评论:(0)  加入收藏
AWVS是Acunetix Web Vulnerability Scanner的缩写它是一个自动化的Web应用程序安全测试工具,审计检查漏洞。它可以扫描任何可通过Web浏览器访问的和遵循HTTP/HTTPS规则的Web...【详细内容】
2021-01-27  Tags: Web漏洞  点击:(410)  评论:(0)  加入收藏
CSRF跨站请求伪造(Cross-Site Request Forgery)CSRF经常配合XSS一起进行攻击!(同XSS类似,都属于跨站攻击,不攻击服务器端而攻击正常访问网站的用户!)XSS利用站点内的信任用户,CS...【详细内容】
2020-10-22  Tags: Web漏洞  点击:(562)  评论:(0)  加入收藏
前边的文章中,我们已经介绍过许多漏洞扫描的工具,今天我们就来介绍其中一款名叫AWVS漏洞扫描工具的使用。Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的网络漏洞扫...【详细内容】
2020-09-04  Tags: Web漏洞  点击:(253)  评论:(0)  加入收藏
可以检查安全应用程序中的漏洞。攻击者可能会发现他们可能利用的隐藏目录和敏感文件等漏洞。Ots ANQ本地文件包含带有URL /gui/file_viewer.php的应用程序可能容易受到本地...【详细内容】
2020-08-03  Tags: Web漏洞  点击:(169)  评论:(0)  加入收藏
Kali工具库之Nikto作者:Arch3r工具简介Nikto是一个开源的WEB扫描评估软件,可以对Web服务器进行多项安全测试,能在230多种服务器上扫描出 2600多种有潜在危险的文件、CGI及其他...【详细内容】
2020-05-29  Tags: Web漏洞  点击:(139)  评论:(0)  加入收藏
SSI 注入全称Server-Side Includes Injection,即服务端包含注入。SSI 是类似于 CGI,用于动态页面的指令。SSI 注入允许远程在 Web 应用中注入脚本来执行代码。SSI是嵌入HTML页...【详细内容】
2020-05-25  Tags: Web漏洞  点击:(97)  评论:(0)  加入收藏
CSRF介绍什么是CSRF呢?我们直接看例子。https://mp.toutiao.com/profile_v3/graphic/preview?do=delete&pgc_id=6829574701128352260这个URL是头条删除pgc_id为6829574701128...【详细内容】
2020-05-25  Tags: Web漏洞  点击:(127)  评论:(0)  加入收藏
仅用于学习测试,违法自负! 这里给大家分享几点关于越权漏洞的发现方法,这类型漏洞通常发生在Web应用提供给用户基于输入的对象中,漏洞造成的影响将会致使攻击者可以绕过授权限...【详细内容】
2020-01-09  Tags: Web漏洞  点击:(136)  评论:(0)  加入收藏
首先我们要了解到漏洞扫描器的扫描原理怎样的网络漏洞扫描器对目标系统进行漏洞检测时,首先探测目标系统的存活主机,对存活主机进行端口扫描,确定系统听开放的端口,同时根据协议...【详细内容】
2019-12-10  Tags: Web漏洞  点击:(221)  评论:(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)  加入收藏
最新更新
栏目热门
栏目头条