PedroFBRM/apache-web-log-analysis-lab
GitHub: PedroFBRM/apache-web-log-analysis-lab
一个面向蓝队的 Apache Web 日志分析实验,通过模拟 Nikto 漏洞扫描和 Dirb 目录爆破,帮助学习者掌握从日志中识别攻击模式与工具特征的方法。
Stars: 0 | Forks: 0
# Apache Web 日志分析实验室
## 目标
在隔离的实验室环境中安装并暴露一个 Apache Web 服务器,使用行业标准工具模拟自动化 Web 扫描,并从蓝队(防御方)的视角分析生成的日志——识别攻击模式、工具特征以及恶意侦察活动的指标。
## 环境
| 组件 | 详情 |
| ------ | ------------------------------------------------------- |
| 攻击机 | Kali Linux |
| 目标机 | Debian 13 |
| 网络 | NAT 网络 |
| 攻击者 IP | 10.0.2.5 |
| 目标 IP | 10.0.2.15 |
| Web 服务器 | Apache 2.4.67 |
| 日志来源 | /var/log/apache2/access.log, /var/log/apache2/error.log |
| HTTP 端口 | 80 |
## 执行步骤
### 1. Apache 服务验证
确认 Apache HTTP 服务器在目标机器上处于活动状态并正在运行。
```
sudo systemctl status apache2 --no-pager
```
结果:自 Wed 2026-05-06 21:09:17 起,状态为 `active (running)`。Apache 2.4.67 (Debian),主 PID 为 3164,55 个活动任务。
### 2. 目标 IP 识别
识别 Debian 目标机器的 IP 地址。
```
ip a
```
**目标 IP:** `10.0.2.15/24` — 接口 `enp0s3`
### 3. 连通性测试
验证 Kali 攻击机与 Debian 目标机之间的网络连通性。
```
ping -c 4 10.0.2.15
```
**结果:** 发送 4 个数据包,接收 4 个,0% 丢包。RTT 最小值/平均值/最大值:0.495/1.288/2.139 毫秒。
### 4. Apache 浏览器测试
从 Kali 浏览器访问 Apache 服务器,以确认 HTTP 服务的可用性。
```
http://10.0.2.15
```
**结果:** 成功加载 Apache2 Debian 默认页面——确认 Web 服务器可访问并响应 HTTP 请求。
### 5. Web 内容设置
在目标服务器上创建测试目录和页面,以模拟真实的 Web 应用程序结构。
```
sudo mkdir -p /var/www/html/admin
sudo mkdir -p /var/www/html/backup
sudo mkdir -p /var/www/html/login
echo "
Admin Panel
" | sudo tee /var/www/html/admin/index.html echo "Login Page
" | sudo tee /var/www/html/login/index.html ``` 创建的目录:`/admin`、`/backup`、`/login` ### 6. Nikto 扫描 对目标 Web 服务器运行 Nikto,以模拟自动化漏洞扫描。 ``` nikto -h http://10.0.2.15 ``` **Nikto v2.5.0 — 开始时间:2026-05-06 20:16:56 — 结束时间:20:17:13(17 秒)** Nikto 报告的发现: - **服务器:** Apache/2.4.67 (Debian) - **缺失的请求头:** `X-Frame-Options` — 缺少点击劫持保护 - **缺失的请求头:** `X-Content-Type-Options` — 缺少 MIME 嗅探保护 - **ETag 泄露:** 服务器可能通过 ETag 泄露 inode 编号 (CVE-2003-1418) - **允许的方法:** GET, POST, OPTIONS, HEAD - **发现的感兴趣目录:** `/admin/`、`/backup/`、`/login/` - **已确认:** `/admin/index.html` — 可公开访问的管理员登录页面 - **总请求数:** 17 秒内 8102 次 ### 7. Dirb 扫描 运行 Dirb 对目标 Web 服务器执行目录暴力破解。 ``` dirb http://10.0.2.15 ``` **DIRB v2.22 — 开始:Wed May 6 20:19:50 2026 — 结束:20:19:59 2026(9 秒)** 使用的字典:`/usr/share/dirb/wordlists/common.txt` — 测试了 4612 个单词 发现的目录和文件: | URL | 状态码 | 大小 | | --------------------------------- | ------ | ----- | | http://10.0.2.15/index.html | 200 | 10703 | | http://10.0.2.15/server-status | 403 | 314 | | http://10.0.2.15/admin/ | 200 | — | | http://10.0.2.15/admin/index.html | 200 | 21 | | http://10.0.2.15/backup/ | 200 | — | | http://10.0.2.15/login/ | 200 | — | | http://10.0.2.15/login/index.html | 200 | 20 | **警告:** `/backup/` 目录的列表功能已启用——没有索引文件,目录内容可直接浏览。 **总下载量:** 13836 字节 — **发现:** 4 个资源 ### 8. 访问日志分析 检查原始访问日志条目以识别攻击模式。 ``` sudo cat /var/log/apache2/access.log ``` Nikto 扫描阶段的示例条目 (21:18:32): ``` 10.0.2.5 - - [06/May/2026:21:18:32 -0300] "GET /10.0.2.15.tar.bz2 HTTP/1.1" 404 527 10.0.2.5 - - [06/May/2026:21:18:32 -0300] "GET /10_0_2_15.gz HTTP/1.1" 404 527 10.0.2.5 - - [06/May/2026:21:18:32 -0300] "GET /10.0.2.15.sql HTTP/1.1" 404 527 10.0.2.5 - - [06/May/2026:21:18:32 -0300] "GET /10.0.2.15.zip HTTP/1.1" 404 527 ``` Dirb 扫描阶段的示例条目 (21:21:34): ``` 10.0.2.5 - - [06/May/2026:21:21:34 -0300] "GET /login/xsql HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:34 -0300] "GET /login/xxx HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:34 -0300] "GET /login/zimbra HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:34 -0300] "GET /login/zoom HTTP/1.1" 404 472 ``` **观察到的模式:** 在同一秒内发出数百个连续请求,全部针对不存在的路径——这与自动化扫描行为一致。 ### 9. 按源 IP 的扫描模式 过滤源自攻击者 IP 的所有访问日志条目。 ``` sudo grep "10.0.2.5" /var/log/apache2/access.log | head -30 ``` 观察到的其他模式: - Nikto 尝试使用服务器 IP 作为文件名访问备份文件(例如,`10.0.2.15.tar.bz2`、`10.0.2.15.sql`、`10.0.2.15.zip`) - Dirb 按字母顺序遍历字典,针对每个发现的目录进行探测 - 两种工具都以机器速度生成请求——在同一源端口范围内每秒产生多个条目 ### 10. HTTP 状态码分布 按 HTTP 响应码统计请求,以量化攻击面。 ``` sudo grep " 200 " /var/log/apache2/access.log | wc -l sudo grep " 403 " /var/log/apache2/access.log | wc -l sudo grep " 404 " /var/log/apache2/access.log | wc -l ``` | HTTP 状态码 | 含义 | 数量 | | ----------- | -------------------------------------- | ----- | | 200 | OK — 找到并提供了资源 | 177 | | 403 | Forbidden — 资源存在但拒绝访问 | 26 | | 404 | Not Found — 资源不存在 | 21740 | **总计 404 错误:21,740** ——绝大多数请求针对不存在的路径,这是自动化目录暴力破解的显著特征。 ### 11. 攻击者 IP 的总请求数 统计源自攻击者的所有访问日志条目。 ``` sudo grep "10.0.2.5" /var/log/apache2/access.log | wc -l ``` **来自 10.0.2.5 的总请求数:21,962** ### 12. 工具特征识别 在访问日志中搜索特定扫描器的特征。 #### Nikto 特征 ``` sudo grep "nikto" /var/log/apache2/access.log | head -5 ``` 结果: ``` 10.0.2.5 - - [06/May/2026:21:18:32 -0300] "PUT /nikto-test-pk9VPSjF.html HTTP/1.1" 405 590 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" ``` Nikto 通过 PUT 请求创建了一个测试文件 (`nikto-test-pk9VPSjF.html`),以验证服务器上的写入权限。 #### Dirb 特征 ``` sudo grep "DirBuster\|dirb" /var/log/apache2/access.log | head -5 ``` 结果: ``` 10.0.2.5 - - [06/May/2026:21:21:26 -0300] "GET /dirb HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:26 -0300] "GET /dirbmark HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:29 -0300] "GET /admin/dirb HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:29 -0300] "GET /admin/dirbmark HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:32 -0300] "GET /login/dirb HTTP/1.1" 404 472 ``` Dirb 的自身名称出现在它使用的字典中,从而在日志中留下了清晰的特征。 ### 13. 错误日志分析 检查 Apache 错误日志,查找扫描触发的服务器端安全事件。 ``` sudo cat /var/log/apache2/error.log ``` 发现的关键事件: #### 路径遍历尝试 (目录遍历) Nikto 尝试通过跨越目录边界访问敏感系统文件: ``` [client 10.0.2.5] AH10244: invalid URI path (/../../../../../../../../../../../../etc/shadow) [client 10.0.2.5] AH10244: invalid URI path (/../../../../../../../../../../etc/passwd) [client 10.0.2.5] AH10244: invalid URI path (/%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini) [client 10.0.2.5] AH10244: invalid URI path (/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd) [client 10.0.2.5] AH10244: invalid URI path (/../../../../../../../../../boot.ini) [client 10.0.2.5] AH10244: invalid URI path (/../../../../winnt/repair/sam._) ``` 目标包括:`/etc/passwd`、`/etc/shadow`、`boot.ini`、`win.ini`、Windows SAM 数据库——所有这些都是经典的路径遍历目标。 #### 无效的 HTTP 方法 Nikto 测试了非标准的 HTTP 方法以识别配置错误: ``` [client 10.0.2.5] AH00135: Invalid method in request DIWHWPJH / HTTP/1.1 [client 10.0.2.5] AH00135: Invalid method in request DEBUG / HTTP/1.1 [client 10.0.2.5] AH00135: Invalid method in request TRACK / HTTP/1.0 [client 10.0.2.5] AH00135: Invalid method in request SEARCH / HTTP/1.1 [client 10.0.2.5] AH00135: Invalid method in request INDEX / HTTP/1.1 ``` #### 受保护文件访问尝试 两种工具都尝试访问受 Apache 保护的配置文件: ``` [client 10.0.2.5] AH01630: client denied by server configuration: /var/www/html/.htpasswd [client 10.0.2.5] AH01630: client denied by server configuration: /var/www/html/.htaccess [client 10.0.2.5] AH01630: client denied by server configuration: /var/www/html/server-status [client 10.0.2.5] AH01630: client denied by server configuration: /var/www/html/admin/.htpasswd [client 10.0.2.5] AH01630: client denied by server configuration: /var/www/html/login/.htpasswd ``` #### VMware 特定路径遍历 Nikto 还测试了 VMware 基础设施的暴露情况: ``` [client 10.0.2.5] AH10244: invalid URI path (/sdk/%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/etc/vmware/hostd/vmInventory.xml) ``` ## 分析 访问和错误日志揭示了一个源自单一 IP 地址 (`10.0.2.5`)、针对 80 端口上 Apache Web 服务器的两阶段自动化攻击模式。 ### 阶段 1 — 漏洞扫描 (Nikto,21:14 至 21:18) Nikto 在 17 秒内执行了 8,102 次请求,测试已知的 Web 漏洞、缺失的安全请求头、危险的 HTTP 方法以及路径遍历向量。错误日志捕获到多次尝试访问 `/etc/passwd`、`/etc/shadow`、`boot.ini` 和 Windows SAM 文件——均被 Apache 的 URI 验证拦截。Nikto 还尝试通过 PUT 请求在服务器上创建测试文件,确认它正在测试写入权限。 ### 阶段 2 — 目录枚举 (Dirb,21:19 至 21:21) Dirb 使用其通用字典,对根目录和每个发现的子目录测试了 4,612 个单词。这产生了观察到的 21,740 个 `404` 错误中的绝大部分。Dirb 成功识别出 `/admin/`、`/backup/` 和 `/login/` 为有效目录。发现 `/backup/` 目录启用了目录列表——这是一个重大的配置失误,将允许攻击者直接浏览其内容。 ### 综合评估 在大约 7 分钟内,来自单一源 IP 的 21,962 次 HTTP 请求,结合访问和错误日志中存在的路径遍历尝试、无效 HTTP 方法请求以及工具特定特征,构成了自动化 Web 侦察活动的明确证据。 未观察到成功的漏洞利用。所有路径遍历尝试均被 Apache 的 URI 验证引擎拒绝。对受保护文件 (`.htpasswd`、`.htaccess`、`server-status`) 的访问被服务器配置拒绝。 ## 关键指标 | 指标 | 值 | | ----------------------- | ---------------------------------------------- | | 攻击者 IP | 10.0.2.5 | | 目标 IP | 10.0.2.15 | | 目标端口 | 80 (HTTP) | | Web 服务器 | Apache 2.4.67 (Debian) | | 识别出的工具 | Nikto v2.5.0, Dirb v2.22 | | 来自攻击者的总请求数 | 21,962 | | HTTP 200 响应 | 177 | | HTTP 403 响应 | 26 | | HTTP 404 响应 | 21,740 | | 发现的目录 | /admin/, /backup/, /login/ | | 路径遍历尝试 | 多次 (全部被拦截) | | 测试的无效 HTTP 方法 | TRACK, DEBUG, SEARCH, INDEX | | 针对的敏感文件 | /etc/passwd, /etc/shadow, .htpasswd, .htaccess | | 成功的漏洞利用 | 无 | | 时间窗口 | 21:14 至 21:21 (2026-05-06) | ## 防御建议 基于上述发现,建议采取以下防御控制措施: - 在 Apache 配置中添加安全请求头:`X-Frame-Options`、`X-Content-Type-Options`、`Content-Security-Policy` - 禁用 ETag 请求头以防止 inode 信息泄露 - 将允许的 HTTP 方法限制为仅 GET、POST、HEAD - 禁用所有目录的目录列表功能,尤其是 `/backup/` - 限制仅本地主机 才能访问 `/server-status` - 实施速率限制以拦截每秒产生过多请求的 IP - 部署 WAF (Web Application Firewall) 以检测并拦截路径遍历模式 - 持续监控 `error.log` 以发现 `AH10244` (无效 URI 路径) 事件 - 移除或限制对敏感目录 (`/admin/`、`/backup/`) 的公共访问 - 在 HTTP 响应头中隐藏 Apache 版本信息 (`ServerTokens Prod`、`ServerSignature Off`) ## 结论 本实验室演示了自动化 Web 扫描工具如何在 Apache 访问和错误日志中留下独特且可识别的模式。通过关联 `404` 错误的数量、`error.log` 中存在的路径遍历尝试、无效的 HTTP 方法请求,以及请求路径和 user-agent 字符串中的工具特定特征,我们能够在对攻击者行为没有任何先验知识的情况下,重建完整的攻击时间线并识别所使用的工具。 该练习强化了 Web 服务器日志监控、安全请求头配置以及目录访问控制作为面向 Web 基础设施的蓝队基础实践的重要性。 ## 使用的工具 - Kali Linux - Debian 13 - Apache 2.4.67 - Nikto v2.5.0 - Dirb v2.22 - grep, wc, cat # Apache Web志分析实验室 ## 目标 在隔离的实验环境中安装并暴露一个 Apache Web 服务器,使用广泛使用的安全测试工具模拟自动化扫描,并从蓝队视角分析生成的日志——识别攻击模式、工具特征以及恶意侦察活动的指标。 ## 环境 | 组件 | 详情 | | -------- | ------------------------------------------------------- | | 攻击机 | Kali Linux | | 目标机 | Debian 13 | | 网络 | NAT 网络 | | 攻击者 IP | 10.0.2.5 | | 目标 IP | 10.0.2.15 | | Web 服务器 | Apache 2.4.67 | | 日志来源 | /var/log/apache2/access.log, /var/log/apache2/error.log | | HTTP 端口 | 80 | ## 执行步骤 ### 1. Apache 服务验证 确认 Apache 服务器在目标机器上处于活动状态并正在运行。 ``` sudo systemctl status apache2 --no-pager ``` 结果:自 Wed 2026-05-06 21:09:17 起,状态为 `active (running)`。Apache 2.4.67 (Debian),主 PID 为 3164,55 个活动任务。 ### 2. 目标 IP 识别 识别 Debian 目标机器的 IP 地址。 ``` ip a ``` **目标 IP:** `10.0.2.15/24` — 接口 `enp0s3` ### 3. 连通性测试 验证 Kali 与 Debian 之间的网络连通性。 ``` ping -c 4 10.0.2.15 ``` **结果:** 发送 4 个数据包,接收 4 个,0% 丢包。RTT 最小值/平均值/最大值:0.495/1.288/2.139 毫秒。 ### 4. Apache 浏览器测试 从 Kali 浏览器访问 Apache 服务器,以确认 HTTP 服务的可用性。 ``` http://10.0.2.15 ``` **结果:** 成功加载 Apache2 Debian 默认页面——确认 Web 服务器可访问并响应 HTTP 请求。 ### 5. Web 内容设置 在目标服务器上创建测试目录和页面,以模拟真实的 Web 应用程序结构。 ``` sudo mkdir -p /var/www/html/admin sudo mkdir -p /var/www/html/backup sudo mkdir -p /var/www/html/login echo "Admin Panel
" | sudo tee /var/www/html/admin/index.html echo "Login Page
" | sudo tee /var/www/html/login/index.html ``` 创建的目录:`/admin`、`/backup`、`/login` ### 6. Nikto 扫描 对目标 Web 服务器运行 Nikto,以模拟自动化漏洞扫描。 ``` nikto -h http://10.0.2.15 ``` **Nikto v2.5.0 — 开始时间:2026-05-06 20:16:56 — 结束时间:20:17:13(17 秒)** Nikto 报告的发现: - **服务器:** Apache/2.4.67 (Debian) - **缺失的请求头:** `X-Frame-Options` — 缺少点击劫持保护 - **缺失的请求头:** `X-Content-Type-Options` — 缺少 MIME 嗅探保护 - **ETag 泄露:** 服务器可能通过 ETag 泄露 inode 编号 (CVE-2003-1418) - **允许的方法:** GET, POST, OPTIONS, HEAD - **发现的感兴趣目录:** `/admin/`、`/backup/`、`/login/` - **已确认:** `/admin/index.html` — 管理员页面可公开访问 - **总请求数:** 17 秒内 8102 次 ### 7. Dirb 扫描 运行 Dirb 对目标 Web 服务器执行目录暴力破解。 ``` dirb http://10.0.2.15 ``` **DIRB v2.22 — 开始:Wed May 6 20:19:50 2026 — 结束:20:19:59 2026(9 秒)** 使用的字典:`/usr/share/dirb/wordlists/common.txt` — 测试了 4612 个单词 发现的目录和文件: | URL | 状态码 | 大小 | | --------------------------------- | ------ | ----- | | http://10.0.2.15/index.html | 200 | 10703 | | http://10.0.2.15/server-status | 403 | 314 | | http://10.0.2.15/admin/ | 200 | — | | http://10.0.2.15/admin/index.html | 200 | 21 | | http://10.0.2.15/backup/ | 200 | — | | http://10.0.2.15/login/ | 200 | — | | http://10.0.2.15/login/index.html | 200 | 20 | **警告:** `/backup/` 目录启用了列表功能——没有索引文件,目录内容可直接浏览。 **总下载量:** 13836 字节 — **发现:** 4 个资源 ### 8. 访问日志分析 检查原始访问日志条目以识别攻击模式。 ``` sudo cat /var/log/apache2/access.log ``` Nikto 扫描阶段的示例条目 (21:18:32): ``` 10.0.2.5 - - [06/May/2026:21:18:32 -0300] "GET /10.0.2.15.tar.bz2 HTTP/1.1" 404 527 10.0.2.5 - - [06/May/2026:21:18:32 -0300] "GET /10_0_2_15.gz HTTP/1.1" 404 527 10.0.2.5 - - [06/May/2026:21:18:32 -0300] "GET /10.0.2.15.sql HTTP/1.1" 404 527 10.0.2.5 - - [06/May/2026:21:18:32 -0300] "GET /10.0.2.15.zip HTTP/1.1" 404 527 ``` Dirb 扫描阶段的示例条目 (21:21:34): ``` 10.0.2.5 - - [06/May/2026:21:21:34 -0300] "GET /login/xsql HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:34 -0300] "GET /login/xxx HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:34 -0300] "GET /login/zimbra HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:34 -0300] "GET /login/zoom HTTP/1.1" 404 472 ``` **观察到的模式:** 在同一秒内发出数百个连续请求,全部针对不存在的路径——这与自动化扫描行为一致。 ### 9. 按源 IP 的扫描模式 过滤源自攻击者 IP 的所有访问日志条目。 ``` sudo grep "10.0.2.5" /var/log/apache2/access.log | head -30 ``` 观察到的其他模式: - Nikto 尝试使用服务器 IP 作为文件名访问备份文件(例如:`10.0.2.15.tar.bz2`、`10.0.2.15.sql`、`10.0.2.15.zip`) - Dirb 按字母顺序遍历字典,针对每个发现的目录进行探测 - 两种工具都以机器速度生成请求——在同一源端口范围内每秒产生多个条目 ### 10. HTTP 状态码分布 按 HTTP 响应码统计请求,以量化攻击面。 ``` sudo grep " 200 " /var/log/apache2/access.log | wc -l sudo grep " 403 " /var/log/apache2/access.log | wc -l sudo grep " 404 " /var/log/apache2/access.log | wc -l ``` | HTTP 状态码 | 含义 | 数量 | | ----------- | -------------------------------------- | ----- | | 200 | OK — 找到并提供了资源 | 177 | | 403 | Forbidden — 资源存在但拒绝访问 | 26 | | 404 | Not Found — 资源不存在 | 21.740 | **总计 404 错误:21,740** ——绝大多数请求针对不存在的路径,这是自动化目录暴力破解的显著特征。 ### 11. 攻击者 IP 的总请求数 统计源自攻击者的所有访问日志条目。 ``` sudo grep "10.0.2.5" /var/log/apache2/access.log | wc -l ``` **来自 10.0.2.5 的总请求数:21,962** ### 12. 工具特征识别 在访问日志中搜索特定扫描器的特征。 #### Nikto 特征 ``` sudo grep "nikto" /var/log/apache2/access.log | head -5 ``` 结果: ``` 10.0.2.5 - - [06/May/2026:21:18:32 -0300] "PUT /nikto-test-pk9VPSjF.html HTTP/1.1" 405 590 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" ``` Nikto 通过 PUT 请求创建了一个测试文件 (`nikto-test-pk9VPSjF.html`),以验证服务器上的写入权限。 #### Dirb 特征 ``` sudo grep "DirBuster\|dirb" /var/log/apache2/access.log | head -5 ``` 结果: ``` 10.0.2.5 - - [06/May/2026:21:21:26 -0300] "GET /dirb HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:26 -0300] "GET /dirbmark HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:29 -0300] "GET /admin/dirb HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:29 -0300] "GET /admin/dirbmark HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:32 -0300] "GET /login/dirb HTTP/1.1" 404 472 ``` Dirb 的自身名称出现在它使用的字典中,从而在日志中留下了清晰的特征。 ### 13. 错误日志分析 检查 Apache 错误日志,查找扫描触发的服务器端安全事件。 ``` sudo cat /var/log/apache2/error.log ``` 发现的关键事件: #### 路径遍历尝试 (目录遍历) Nikto 尝试通过跨越目录边界访问敏感系统文件: ``` [client 10.0.2.5] AH10244: invalid URI path (/../../../../../../../../../../../../etc/shadow) [client 10.0.2.5] AH10244: invalid URI path (/../../../../../../../../../../etc/passwd) [client 10.0.2.5] AH10244: invalid URI path (/%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini) [client 10.0.2.5] AH10244: invalid URI path (/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd) [client 10.0.2.5] AH10244: invalid URI path (/../../../../../../../../../boot.ini) [client 10.0.2.5] AH10244: invalid URI path (/../../../../winnt/repair/sam._) ``` 目标包括:`/etc/passwd`、`/etc/shadow`、`boot.ini`、`win.ini`、Windows SAM 数据库——所有这些都是经典的路径遍历目标。 #### 无效的 HTTP 方法 Nikto 测试了非标准的 HTTP 方法以识别配置错误: ``` [client 10.0.2.5] AH00135: Invalid method in request DIWHWPJH / HTTP/1.1 [client 10.0.2.5] AH00135: Invalid method in request DEBUG / HTTP/1.1 [client 10.0.2.5] AH00135: Invalid method in request TRACK / HTTP/1.0 [client 10.0.2.5] AH00135: Invalid method in request SEARCH / HTTP/1.1 [client 10.0.2.5] AH00135: Invalid method in request INDEX / HTTP/1.1 ``` #### 受保护文件访问尝试 两种工具都尝试访问受 Apache 保护的配置文件: ``` [client 10.0.2.5] AH01630: client denied by server configuration: /var/www/html/.htpasswd [client 10.0.2.5] AH01630: client denied by server configuration: /var/www/html/.htaccess [client 10.0.2.5] AH01630: client denied by server configuration: /var/www/html/server-status [client 10.0.2.5] AH01630: client denied by server configuration: /var/www/html/admin/.htpasswd [client 10.0.2.5] AH01630: client denied by server configuration: /var/www/html/login/.htpasswd ``` #### VMware 特定路径遍历 Nikto 还测试了 VMware 基础设施的暴露情况: ``` [client 10.0.2.5] AH10244: invalid URI path (/sdk/%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/etc/vmware/hostd/vmInventory.xml) ``` ## 分析 访问和错误日志揭示了一个源自单一 IP 地址 (`10.0.2.5`)、针对 80 端口上 Apache Web 服务器的两阶段自动化攻击模式。 ### 阶段 1 — 漏洞扫描 (Nikto,21:14 至 21:18) Nikto 在 17 秒内执行了 8,102 次请求,测试已知的 Web 漏洞、缺失的安全请求头、危险的 HTTP 方法以及路径遍历向量。错误日志捕获到多次尝试访问 `/etc/passwd`、`/etc/shadow`、`boot.ini` 和 Windows SAM 数据库——均被 Apache 的 URI 验证拦截。Nikto 还尝试通过 PUT 请求在服务器上创建测试文件,确认它正在测试写入权限。 ### 阶段 2 — 目录枚举 (Dirb,21:19 至 21:21) Dirb 使用其通用字典,对根目录和每个发现的子目录测试了 4,612 个单词。这产生了观察到的 21,740 个 `404` 错误中的绝大部分。Dirb 成功识别出 `/admin/`、`/backup/` 和 `/login/` 为有效目录。发现 `/backup/` 目录启用了目录列表——这是一个重大的配置失误,将允许攻击者直接浏览其内容。 ### 综合评估 在大约 7 分钟内,来自单一源 IP 的 21,962 次 HTTP 请求,结合访问和错误日志中存在的路径遍历尝试、无效 HTTP 方法请求以及工具特定特征,构成了自动化 Web 侦察活动的明确证据。 未观察到成功的漏洞利用。所有路径遍历尝试均被 Apache 的 URI 验证引擎拒绝。对受保护文件 (`.htpasswd`、`.htaccess`、`server-status`) 的访问被服务器配置拒绝。 ## 关键指标 | 指标 | 值 | | ----------------------- | ---------------------------------------------- | | 攻击者 IP | 10.0.2.5 | | 目标 IP | 10.0.2.15 | | 目标端口 | 80 (HTTP) | | Web 服务器 | Apache 2.4.67 (Debian) | | 识别出的工具 | Nikto v2.5.0, Dirb v2.22 | | 来自攻击者的总请求数 | 21,962 | | HTTP 200 响应 | 177 | | HTTP 403 响应 | 26 | | HTTP 404 响应 | 21,740 | | 发现的目录 | /admin/, /backup/, /login/ | | 路径遍历尝试 | 多次 (全部被拦截) | | 测试的无效 HTTP 方法 | TRACK, DEBUG, SEARCH, INDEX | | 针对的敏感文件 | /etc/passwd, /etc/shadow, .htpasswd, .htaccess | | 成功的漏洞利用 | 无 | | 时间窗口 | 21:14 至 21:21 (2026-05-06) | ## 防御建议 基于上述发现,建议采取以下防御控制措施: - 在 Apache 配置中添加安全请求头:`X-Frame-Options`、`X-Content-Type-Options`、`Content-Security-Policy` - 禁用 ETag 请求头以防止 inode 信息泄露 - 将允许的 HTTP 方法限制为仅 GET、POST 和 HEAD - 禁用所有目录的目录列表功能,尤其是 `/backup/` - 限制仅本地主机 才能访问 `/server-status` - 实施速率限制以拦截每秒产生过多请求的 IP - 部署 WAF (Web Application Firewall) 以检测并拦截路径遍历模式 - 持续监控 `error.log` 以发现 `AH10244` (无效 URI 路径) 事件 - 移除或限制对敏感目录 (`/admin/`、`/backup/`) 的公共访问 - 在 HTTP 响应头中隐藏 Apache 版本信息 (`ServerTokens Prod`、`ServerSignature Off`) ## 结论 本实验室演示了自动化 Web 扫描工具如何在 Apache 访问和错误日志中留下独特且可识别的模式。通过关联 `404` 错误的数量、`error.log` 中存在的路径遍历尝试、无效的 HTTP 方法请求,以及请求路径和 user-agent 字符串中的工具特定特征,我们能够在对攻击者行为没有任何先验知识的情况下,重建完整的攻击时间线并识别所使用的工具。 该练习强化了 Web 服务器日志监控、安全请求头配置以及目录访问控制作为面向 Web 基础设施的蓝队基础实践的重要性。 ## 使用的工具 - Kali Linux - Debian 13 - Apache 2.4.67 - Nikto v2.5.0 - Dirb v2.22 - grep, wc, cat标签:Apache HTTP Server, Apache日志分析, Debian, NAT网络, Syslog, VirtualBox, Web安全, 安全培训, 安全实验室, 安全运营, 密码管理, 工具签名识别, 恶意侦察, 扫描框架, 攻击模式分析, 目录爆破, 网络安全, 网络安全审计, 蓝队分析, 虚拟机靶场, 隐私保护