CATALOG
参考资料
原理
假设有两个主机,域名分别为www.a.com与www.b.com。这两个主机都是被ip为1.1.1.1的cdn进行加速的。
这时候使用curl命令请求cdn 1.1.1.1,并自定义host段为www.b.com的话。就会返回www.b.com的页面。
命令为:curl 1.1.1.1 -H "Host: www.b.com" -v
同理请求同样的cdn,但是将host改为www.a.com,这时候就会返回A页面的信息。
如果将curl 后请求的ip改为 www.a.com, host 改为 www.b.com。命令为:
Curl www.a.com -H "Host: www.b.com" -v
上述命令还是显示的是www.b.com的页面,所以最终请求的还是www.b.com。
所以,域前置技术的核心基础设施是cdn。
当使用https的时候(一般都会使用https,http明文流量容易被检测到),技术实现的核心是在不同的通信层使用不同的域名,DNS解析的时候跟TLS服务器名称指示(sin),的时候使用的是合法的CDN的域名或者ip(建议使用域名),但实际访问域名却是host上写的域名.
host头对于检查器是不可见的,但是对于接受https请求的前端服务器是可见的。
这里借用一张图片来表示:
CS上的实现
-
准备一个自带域名的teamserver
-
给teamserver配置一个cdn,并记录一个cdn上的安全的ip/域名
如上图所示,申请完cdn后,cdn厂商会给你一个cdn上的域名,如上图,用户访问这个域名的时候会访问到真正的C2服务器。合法域名则通常可以从相关CDN子域进行寻找,我们可以采用一些知名网站或网络安全公司相关的域名来逃避检测。
-
配置profile中的http get与http post块,设置header头为teamserver的域名。
在http-config模块还要将trust_x_forwarded_for 属性设置为true:
- 创建listener,将http hosts设置为任意的cdn的安全域名或者ip。
获得安全域名或者cdn ip的方式
在站长之家有个ping的工具,在网址那一栏填写分配给你的cdn的域名即可:
获取到cdn代理到ip后,使用curl ip -H "Host: c2的域名" -v
测试一下看是否可以连接通。
- 如果木马无法上线,则关闭系统自带的防火墙,让外部能访问进来。 Ubuntu 16.04执行 ufw disable 就把防火墙关掉了。
CS的profile文件的配置可以看我的另一篇文章malleable_profile配置概述。
隐藏源IP,提高溯源难度的几种方案