声明:该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。
本项目是frp的二开项目。frp是fatedier开发的一款优秀的反向代理工具,可以将本地服务器暴露在互联网上。但原程序对攻击队而言并不优雅,希望本项目可以为攻击队贡献一个完美的FRP二开项目!
01-项目功能修改
程序运行判断是否存在frpc.ini或frps.ini文件,不存在则自动创建。
// 自动生成frpc.ini和frps.ini
func init() {
frpcini := "frpc.ini"
if _, errFileExist := os.Stat(frpcini); errFileExist != nil {
f, err := os.Create(frpcini)
if err != nil {
os.Exit(1)
}
_, err = f.Write(config.DefaultiniBytefrpc)
}
}
02-敏感信息隐藏
配置文件自动删除:frpc.exe --delini
// 删除配置文件
// 程序运行时添加--delini命令
if delEnable == true {
err := os.Remove(cfgFile)
if err != nil {
return err
}
}
远程加载配置文件:frpc.exe -c http://127.0.0.1/frpc.ini
func GetRenderedConfFromFile(path string) (out []byte, err error) {
var b []byte
rawUrl := path
if strings.Contains(rawUrl, "http") {
log.Info("Remote load ini file")
response, _err1 := http.Get(path)
if _err1 != nil {
return
}
defer response.Body.Close()
body, _err := io.ReadAll(response.Body)
if _err != nil {
return
}
httpContent := string(body)
var content = []byte(httpContent)
out, err = RenderContent(content)
return
} else {
log.Info("Local load ini file")
b, err = os.ReadFile(path)
if err != nil {
return
}
localContent := string(b)
var content = []byte(localContent)
out, err = RenderContent(content)
return
}
}
服务端IP地址加密:需要在代码上面修改aes的key和加密后的字符
使用说明:在代码中修改AESKey和AESencryptCode的值为自己的。AESKey可不修改,默认使用Erfrp的md5值。在frpc.ini中将server_addr的值修改为AESencryptCode。
package dscrypto
// 对服务器IP进行隐藏需要修改此处的AESKey和AESencryptCode。
// 同时需要对frpc.ini中的server_addr进行修改,修改成AESencryptCode。
// server_addr支持正常的ip和加密之后的ip,2种形式。
var (
VpsIP = "192.168.1.22"
AESKey = "9d9d14b5f6650726afe17e1af4052632" //Erfrp
AESencryptCode = "J6X+PfMnVldSaM1tpjaNKw=="
//AESencryptCode = "2HrQDAPV5JgjckfYkO9u4g=="
)
03-静态特征修改
04-流量特征修改
05-使用及截图
配置文件自动删除:frpc.exe --delini
远程加载配置文件:frpc.exe -c http://x.x.x.x/frpc.ini
下载地址
点击下方名片回复"Erfrp"获取
推荐阅读