原理
参考资料:域前置技术的原理以及在CS上的实现
假设有两个主机,域名分别为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
tips:因为挂了cdn,所以无法通过域名直接找到c2端
-
给teamserver配置一个cdn,并记录一个cdn上的安全的ip/域名
如上图所示,申请完cdn后,cdn厂商会给你一个cdn上的域名,如上图,用户访问这个域名的时候会反问到真正的C2服务器。合法域名则通常可以从相关CDN子域进行寻找,我们可以采用一些知名网站或网络安全公司相关的域名来逃避检测。
-
配置profile总的http get与http post块总 设置header头为teamserver的域名。
上图为将host设置为fuck.microsoft.com。
-
如果木马无法上线,则关闭系统自带的防火墙,让外部能访问进来。 Ubuntu 16.04执行 ufw disable 就把防火墙关掉了。
-
创建listener,将host设置为CDN分配给你的域名或者你自己的域名。
-
填写beacon通信地址的时候直接填写任意一个cdn地址即可。