<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    逆向人的goby插件開發思路

    VSole2022-01-01 12:31:10

    前言

    Goby是一款新的網絡安全測試工具,由趙武Zwell(Pangolin、JSky、FOFA作者)打造,它能夠針對一個目標企業梳理最全的攻擊面信息,同時能進行高效、實戰化漏洞掃描,并快速地從一個驗證入口點,切換到橫向。我們希望能夠輸出更具生命力的工具,能夠對標黑客的實際能力,幫助企業來有效地理解和應對網絡攻擊。

    前些天寫了一文《淺談Goby Redteam版本破解》(https://t.zsxq.com/BmuN3RV) 中最終是通過寫插件來獲取了redteam版本的license。

    而接下來的本文將講述我以一個逆向人的思路,是如何從0基礎,沒看官方相關文檔而開發goby插件的。

    基礎信息收集

    首先確定自己要開發什么類型的插件。由于我本身不是很懂滲透并沒有什么想法,就從官方的里面選了一個。

    訪問goby官方的github的project,鏈接如下

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

    各種插件:

    最后我選擇的是數據編碼解碼的插件,確定目標后接下來就是如何開發插件,這里我選擇了一個goby的編碼插件xcode來作為我的參照。在goby上下載插件。根據goby的程序頁面顯示,插件存放在extensions目錄下。

    打開目錄后找到我們下載的xcode的文件夾。

    可以看到目錄如下:

    其中README.md是記錄軟件使用方法,也就是插件下載頁面的詳情。

    CHANGELOG.md是更新日志,也就是插件下載頁面的更新日志。

    程序的主要功能和代碼在package.json和src文件夾中。

    xcode的package.json內容如下:

    {
        "name": "Xcode",
        "publisher": "ettercap",
        "description": "The tool is used for string encoding",
        "version": "0.1.2",
        "icon": "src/assets/img/encode.png",
        "engines": "1.6.170",
        "initEvents": "",
        "main": "./src/extension.js",
        "contributes": {
            "views": {
                "scanDia": [
                    {
                        "command": "encode",
                        "title": "Xcode",
                        "tips":"Xcode",
                        "icon": "src/assets/img/encode.png"
                    }
                ],
                "toolbar": [
                    {
                        "command": "encode",
                        "title": "Xcode",
                        "icon": "./src/assets/img/encode.png",
                        "tips":"Xcode"
                    }
                ]
            }
        },
        "language":{
            "CN":"src/assets/translate/CN/translate.json"
        },
        "scripts": {},
        "devDependencies": {},
        "dependencies": {}
    }
    

    主要是和展示在goby主界面相關的信息,例如圖標標題等,主要需要注意的是

    "main": "./src/extension.js"
    # 以我的理解 這個類似于入口點,主函數
    "command": "encode",
    # 這個是點擊插件欄目調用的命令。
    

    接下來看一下src文件夾,看一下其內容。

    打開code.html看一下,界面如下:

    goby啟動插件后界面如下:

    至此,我們得到一個結論,goby的插件實際上就是一個JavaScript項目。同時也有一個疑惑,為何兩個界面展示不一樣,而后進行進一步的分析。

    以下是extension.js的內容:

    function activate(content) {
        let translate  = require(__dirname+'/assets/js/translate.js');
        goby.registerCommand('encode', function(content){
            let path = __dirname + "/code.html"
            let title = getTranslate('Xcode');
            goby.showIframeDia(path,title, "800", "800");
        });
        goby.bindEvent('onChangeLang',()=>{
            let iframes = Array.from(document.querySelectorAll('#iframe-dia iframe'));
            let iframe = iframes.find((iframe)=>{
                return iframe.contentWindow.goby.id == goby.id;
            })
            iframe && changeLang(iframe);
        })
        function changeLang(iframe){
            let title = getTranslate('Xcode')
            goby.showIframeDia(iframe.getAttribute('src'),title , "800", "800");
        }
        function getTranslate(key) {
            let lang = goby.getLang();
            try {
                let content = eval("translate[lang][key]");
                if(content == undefined){
                    try {
                        let content = eval("translate['EN'][key]");
                        if(content == undefined){
                            return key;
                        }else{
                            return content;
                        }
                    } catch (error) {
                        console.log(error);
                        return key;
                    }
                }else{
                    return content;
                }
            } catch (error) {
                try {
                    let content = eval("translate['EN'][key]");
                    if(content == undefined){
                        return key;
                    }else{
                        return content;
                    }
                } catch (error) {
                    console.log(error);
                    return key;
                }
            }
        }
    }
    exports.activate = activate;
    

    主要功能是調用goby的API綁定事件,注冊命令等。

    goby.registerCommand('encode', function(content){
            let path = __dirname + "/code.html"
            let title = getTranslate('Xcode');
            goby.showIframeDia(path,title, "800", "800");
        });
    // 注冊命令:path是顯示的頁面,也就是一個html文件;title也就是標題;后面兩個參數就是界面長寬
    

    除了主要功能之外,作者還綁定了onChangeLang事件,也就是當設置的語言改變時,界面內容也會跟隨變化。

    隨后看code.html內容有這么一段代碼:

        let goby = parent.goby; // 獲取GobyAPi
        let fs = parent.require('fs');
        let results = []; // 定義搜索結果數組
        let net = parent.require('net')
        // 字符串轉base64
        function encode(str) {
          var base64 = $.base64.encode(str);
          return base64;
        }
        function lang() {
          //獲取當前Languzge
          let language = goby.getLang();
          //判斷翻譯文件是否存在
          let translateState = fs.existsSync(goby.__dirname + '/assets/translate/' + language + '/html.json');
          //翻譯文件存在則使用翻譯文件,否則使用默認EN翻譯
          let lang = translateState ? language : 'EN';
          let a = $.i18n.init({
            lng: language, //指定語言
            useCookie: false,
            resGetPath: './assets/translate/' + lang + '/html.json',//語言包的路徑
          }, function (err, t) {
            if (!err) {
              $('[data-i18n]').i18n(); // 通過選擇器集體翻譯
              return;
            }
            goby.showErrorMessage(err)
          });
        }
        lang();
        //當lang改變時更新頁面內容
        goby.bindEvent('onChangeLang', () => {
          lang();
        })
    

    這段代碼用于根據語言加載內容,使用了goby的API這也解釋了為什么我們自己使用瀏覽器和goby打開界面為何不同。

    下面開始插件的開發。

    插件開發

    當了解其架構之后,插件的開發就相當簡單了。(其實我并不懂JavaScript,但我會復制粘貼)

    想到數據編碼這方面我就想到了一個特別好用的工具,Cyberchef(要看效果可以訪問http://pcat.cc/cc),這是英國通信總部GCHQ的一款開源產品,被稱為“網絡版瑞士軍刀”,功能強力,基本上可以解決絕大多數編碼問題以及加密解密問題。到其github(https://github.com/gchq/CyberChef/releases)下載編譯好的,也不用我去編譯。

    第一步直接創建插件文件夾,把xcode的文件夾的內容全部拷貝過來。

    第二步修改package.json主要需要修改的就是圖標的位置,名字之類的。

    第三步修改extension.js,這里我把不需要的東西刪除掉。我的extension.js代碼如下

    function activate(content) {
        goby.registerCommand('encode', function(content){
            let path = __dirname + "/CyberChef_v9.28.0.html"
            let title = "Cyberchef";
            goby.showIframeDia(path,title, "1000", "800");
        });
    }
    exports.activate = activate;
    

    只有一個功能,注冊encode指令。

    第四步把Cyberchef的文件全部拷貝到src文件夾中。

    把這些都修改完之后可以打開你的goby發現已下載的插件多了一個。如果發現寫的插件存在問題,比如打不開之類的可以下載官方的debug插件。

    打開插件可以通過看控制臺,觀察運行是否有什么問題。

    最后插件開發成功,如下圖。

    開發過程中的問題

    在上傳的過程中,出現了一些問題導致上傳失敗。但經過goby團隊的大佬的幫助還是解決了非常感謝。

    主要原因就是上傳的格式不對。

    需要注意的是打包上傳的文件夾需要是如下結構。

    里面的第一層文件夾,需要和壓縮包名字一樣。

    結語

    其實我是不太懂滲透web這方面的知識,本來是不想寫的,后來想了想為社區貢獻嘛,不寒顫。然后就硬著頭皮開始搞了,后來發現并沒有我想象中的那么難。很多事情就是這樣,看著很難,但當你真的走進去之后你會發現,并沒有那么難,其中很大一部分困難都是我們想象出來的,或者因為自身惰性虛構出來的。

    xcode
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    SentinelOne的研究人員發現了一系列涉及新XcodeSpy的攻擊,這些XcodeSpy用于提供自定義變種的后門,其后代名為EggShell。SentinelOne還報告稱,XcodeSpy于2020年末針對美國一家組織的攻擊,并且基于8月5日和10月13日上傳到VirusTotal的樣本,XcodeSpy也被用于針對日本開發人員的攻擊。SentinelOne提供了有關惡意軟件的詳細信息以及這些攻擊的已知IoC的完整列表。攻擊者通過誘使開發人員使用偽造的Apple Xcode,將惡意代碼嵌入到應用程序中。
    據外媒,近期一個新的惡意軟件XcodeSpy被發現,從名字也可以了解到,該軟件專門針對Xcode開發者。開發者利用Xcode為iPhone、iPad、Mac等設備創建應用程序,而該惡意軟件會感染macOS上的Xcode集成開發環境。
    在這種情況下,會將惡意代碼注入到本地Xcode項目中,以便在構建項目時運行惡意代碼。這尤其對Xcode開發人員構成了風險。通過Xcode項目和由惡意軟件創建的惡意修改,目前還不清楚威脅最初是如何進入這些系統的。這最終導致主要的XCSSET惡意軟件被刪除并在受影響的系統上運行。一旦出現在受影響的系統上,XCSSET就會具有以下行為: 利用漏洞利用,它濫用了現有的Safari和其他已安裝的瀏覽器來竊取用戶數據。
    針對Xcode開發者的Mac惡意軟件XCSSET現在被重新設計,并用于針對蘋果新推出的M1芯片的宣傳活動中。XCSSET是由趨勢科技于2020年8月發現的Mac惡意軟件,它正在Xcode項目中傳播,并利用兩個零日漏洞來從目標系統竊取敏感信息并發起勒索軟件攻擊。該惡意軟件還允許攻擊者捕獲屏幕截圖并將被盜的文檔泄露到攻擊者的服務器。該惡意軟件還實施勒索軟件行為,能夠加密文件并顯示勒索記錄。指出卡巴斯基發表的報告。
    對于應用程序開發人員來說,低級虛擬機位碼在過去七年中一直是 Apple 工具鏈和 Android 原生開發工具包的主要內容。隨著Xcode 14 beta的發布,從今年開始很快成為 iOS 和 MacOS 開發的標準,Apple 已經棄用了構建位碼應用程序的選項。
    近期,安全研究人員發布了有關一系列MacOS惡意軟件從多個應用程序中竊取登錄信息的方法的詳細信息,使其幕后操控者能夠竊取賬戶,密碼等敏感信息。
    XCSSET是由趨勢科技于2020年8月發現的Mac惡意軟件,它正在Xcode項目中傳播,并利用兩個零日漏洞來從目標系統竊取敏感信息并發起勒索軟件攻擊。該惡意軟件還允許攻擊者捕獲屏幕截圖并將被盜的文檔泄露到攻擊者的服務器。該惡意軟件還實施勒索軟件行為,能夠加密文件并顯示勒索記錄。指出卡巴斯基發表的報告。2月,Red Canary的惡意軟件研究人員發現了另一種名為Silver Sparrow的惡意軟件,該惡意軟件正在使用世界各地最新的Apple M1芯片感染Mac系統。
    今天給大家推薦的項目是「lemon-cleaner」,騰訊檸檬清理,是針對 macOS 系統專屬制定的清理工具。整體設計上清新簡潔,狀態欄小巧好用,是一款 Mac 設備必備的實用工具。功能亮點深度掃描清理:針對 Xcode、Sketch 等常見應用逐一定制掃描方案,精準分析應用文件,分類通俗易懂,隨時保持 Mac 干凈清爽。大文件清理:全面查找占用超過 50M 的大文件,揪出磁盤元兇,支持自定義掃描文件夾。瀏覽器隱私清理:保護瀏覽器隱私,防止惡意竊取,支持 Safari/Chrome 等多款瀏覽器。
    把他扔到ida中,等待ida分析完成就好。定位到這個方法,對比抓包結果判斷這個方法就是用于添加請求頭的位置,分析代碼找到X-PA-SIGN應該是由下面這個函數返回。
    日前名為Zhuowei Zhang的開發者分享了最新成果,他利用iOS 16.1.2上公開的CVE-2022-46689漏洞,實現了免越獄替換系統字體。Zhang 表示這款應用使用 CVE-2022-46689 漏洞來覆蓋默認的 iOS 字體,以便用戶可以使用默認字體以外的其它字體來自定義系統外觀。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类