Jump to content

Kali 渗透工具实战:用 Nmap、httpx 与 ffuf 完成授权 Web 服务验证

Featured Replies

Posted

本文以授权内网渗透测试为背景,演示如何在 Kali Linux 中使用 Nmap、httpx、ffuf 和 curl,对一台测试 Web 主机进行“服务识别—目录发现—权限边界验证—日志核对—修复复测”。目标地址统一使用 192.168.56.20,仅适用于自建靶场、明确授权的测试环境。

一、测试场景与工具准备

假设目标主机属于测试网段,已知其可能提供 HTTP 服务,但不确定实际监听端口和后台路径。测试目标包括:

  • 确认开放端口、服务版本及暴露面;
  • 发现常见 Web 路径和静态备份文件;
  • 验证普通用户是否越权访问管理接口;
  • 结合访问日志判断测试请求是否被准确记录;
  • 给出可落地的服务端修复方案。

Kali 中常用工具通常可以直接通过 APT 安装。建议先更新软件索引,再确认工具版本,避免使用来源不明的二进制文件。

sudo apt update
sudo apt install -y nmap curl ffuf jq
nmap --version
ffuf -V
curl --version

如果使用 ProjectDiscovery 生态工具,应优先采用 Kali 仓库或项目官方发布源,并在实验环境中核对哈希。工具版本不同可能导致参数和输出格式存在差异。

二、使用 Nmap 确认服务暴露面

第一步不建议直接对整个地址段进行高强度扫描。对于单个已授权目标,可以先进行常见 TCP 端口识别,再针对 Web 服务做版本探测。

sudo nmap -Pn -sS --top-ports 1000 --open -T3 -oA scans/top1000 192.168.56.20
sudo nmap -Pn -sV -sC -p 80,443,8080,8443 -T3 -oA scans/web 192.168.56.20

参数含义:

  • -Pn:目标不响应 ICMP 时仍进行扫描,适合部分内网环境;
  • -sS:TCP SYN 扫描,需要相应权限;
  • -sV:识别服务版本;
  • -sC:执行 Nmap 默认脚本,结果应结合授权范围审阅;
  • -oA:同时保存 normal、grepable 和 XML 格式,方便留档。

例如发现 8080/tcp open http Apache Tomcat,下一步应先确认 HTTP 响应,而不是立即尝试利用漏洞:

curl -i --max-time 10 
curl -sS -D headers.txt -o body.html 
grep -iE 'server:|x-powered-by:|location:|set-cookie:' headers.txt

需要记录状态码、Server 响应头、Cookie 的 Secure、HttpOnly、SameSite 属性,以及是否存在不必要的版本信息。响应头只能作为线索,不能单独作为版本漏洞结论。

三、用 ffuf 做低速目录与文件发现

在明确目标范围后,可使用 ffuf 对指定端口进行目录枚举。字典应从小到大,先使用常见路径,避免对生产系统产生过大请求量。

mkdir -p evidence
ffuf -u  \
  -w /usr/share/seclists/Discovery/Web-Content/common.txt \
  -mc 200,204,301,302,307,401,403 \
  -fc 404 \
  -rate 30 \
  -t 5 \
  -timeout 8 \
  -of json -o evidence/ffuf-root.json

几个关键点:

  • -fc 404 只过滤明确的 404,但某些应用会对不存在路径返回 200,此时应先比较响应长度和页面内容;
  • -rate 30 限制每秒请求数,避免把目录发现变成拒绝服务;
  • -t 5 限制并发线程,内网老旧应用尤其需要保守设置;
  • 发现 403 不代表可以绕过,也不应直接进行高频路径变形;应先确认该目录是否属于授权测试范围。

如果所有不存在路径都返回相同的自定义错误页,可以通过响应长度过滤。先取一个不存在路径:

curl -sS -o /tmp/notfound.html -w 'status=%{http_code} size=%{size_download}\n' \
  
wc -c /tmp/notfound.html

假设错误页长度为 5120 字节,可在 ffuf 中增加 -fs 5120。实际值必须以目标应用返回结果为准,不应照抄示例。

四、围绕权限边界验证管理接口

假设目录发现得到 /admin/,返回 302 跳转到登录页;普通测试账号已由系统负责人提供。验证重点是“未授权用户能否访问受保护资源”,而不是猜测密码或进行暴力破解。

# 未登录访问
curl -i -sS 

# 使用授权测试账号登录,保存会话 Cookie
curl -i -sS -c evidence/user.cookie -b evidence/user.cookie \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data 'username=testuser&password=Provided-Test-Password' \
  

# 携带会话访问管理页面
curl -i -sS -b evidence/user.cookie \
   HTTP 状态码、响应正文和服务端日志。不能因为页面返回 200 就认定存在越权,很多应用会把登录页或统一错误页也返回 200。可以比较页面标题、关键字段和最终 URL。

若应用使用 JSON API,可以只读取无副作用的接口,例如用户资料或系统状态接口,避免调用删除、修改、重启等操作:

curl -sS -i -b evidence/user.cookie \
  -H 'Accept: application/json' \
  

curl -sS -i -b evidence/user.cookie \
  -H 'Accept: application/json' \
   /api/admin/status 返回管理数据,应记录请求方法、路径、状态码、响应中可证明权限越界的最小字段,并对用户名、令牌、内部地址等敏感信息进行脱敏。不要在报告中上传完整 Cookie 或密码。

五、检查日志留痕与时间线

授权测试不应只关注是否发现问题,还要确认防守侧是否能还原测试行为。常见 Linux Web 服务日志位置如下,具体路径取决于部署方式:

  • Nginx:/var/log/nginx/access.log、/var/log/nginx/error.log;
  • Apache:/var/log/apache2/access.log、/var/log/apache2/error.log;
  • Tomcat:应用日志目录和 localhost_access_log.*.txt。

在被测服务器或日志平台上,应按测试源地址、时间窗口和请求路径检索。例如:

sudo grep '192.168.56.10' /var/log/nginx/access.log | \
  grep -E '/admin|/api/|this-path-should-not-exist' | tail -n 30

sudo awk '$9 ~ /401|403|404/ {print}' /var/log/nginx/access.log | tail -n 50

重点核对以下字段是否完整:

  • 客户端源 IP,若经过反向代理需明确可信代理配置;
  • 请求时间和时区;
  • HTTP 方法、URI、状态码、响应长度;
  • 用户标识或会话关联 ID,但不要明文记录完整 Token;
  • 上游应用错误和鉴权失败原因。

若日志直接记录了密码、Authorization 头或完整 Session Cookie,应立即调整日志格式并检查已有日志的访问权限和留存范围。

六、风险判断与修复建议

1. 服务暴露过多

如果 Nmap 发现管理端口仅供内网使用却绑定在所有网卡,应将服务监听地址限制为管理网段,或通过防火墙控制来源。例如使用 UFW 时,仅允许指定管理网段访问 8080:

sudo ufw deny 8080/tcp
sudo ufw allow from 192.168.56.0/24 to any port 8080 proto tcp
sudo ufw status verbose

生产环境修改防火墙前应确认远程管理链路,避免误封当前会话。

2. 管理接口缺少服务端鉴权

修复不能只依赖前端隐藏菜单或返回 403 页面。每个管理 API 都应在服务端校验登录状态、角色和资源归属,并对默认拒绝路径进行单元测试。普通用户访问管理接口时,应返回一致的 403 或经过设计的错误响应,不应泄露管理对象是否存在。

3. Cookie 和安全响应头配置不足

会话 Cookie 至少应根据部署方式启用 HttpOnly、Secure 和合理的 SameSite;HTTPS 服务可补充 HSTS。不要仅通过修改响应头隐藏真实版本,根本措施仍是升级框架、删除默认页面和关闭不必要组件。

4. 目录枚举发现备份文件

应从发布流程中禁止将 .env、数据库备份、源码压缩包和版本控制目录部署到 Web 根目录,并在 Web 服务器层明确拒绝访问。已经暴露过的密钥需要立即轮换,不能只删除文件后认为风险消失。

七、复测与证据整理

修复完成后,使用同一目标、同一请求和相近速率进行复测,避免用更强的扫描掩盖原问题。建议保存以下证据:

  • nmap 的 XML 或 grepable 输出;
  • 关键请求的请求头、状态码和经过脱敏的响应片段;
  • 目录发现结果及过滤规则;
  • 修复前后权限边界的对比;
  • 服务端访问日志中对应的时间线。

报告中应明确测试时间、源地址、目标地址、工具版本、命令参数、复现条件、影响范围和修复验证结果。对于未验证的漏洞,不要仅凭 Banner 或目录名称直接下结论。

总结

Kali 中的 Nmap、curl 和 ffuf 并不只是“扫端口、跑字典”的工具。把扫描速率、响应差异、会话边界、日志留痕和修复复测串起来,才能形成可审计的授权渗透测试链路。工具输出只负责提供证据,最终结论仍需结合应用行为、权限模型和服务端配置确认。

服务器与云环境安全示意图
服务器、云资产与权限边界梳理示意
安全工具参数与流程示意图
工具配置、参数调优与结果校验示意

这套组合比较适合做“先确认暴露面,再验证 Web 入口,最后枚举内容”的授权流程。建议不要一上来直接跑 ffuf,先把 Nmap 发现的端口和 httpx 的探测结果整理成目标清单。

# 1. 端口与服务识别,控制扫描速率
nmap -Pn -sV --version-light -T3 --open -p 80,443,8000,8080,8443 \
  -oA nmap-web 192.0.2.10

# 需要补充常见 Web 端口时
nmap -Pn -sV --open -p 80,81,443,591,593,8000,8008,8080,8081,8443,8888 \
  -oA nmap-web-common 192.0.2.10

如果目标依赖虚拟主机,直接访问 IP 可能只能得到默认站点。可以从证书、页面跳转、响应头和已授权的资产清单中提取域名,再交给 httpx:

# hosts.txt 每行一个域名或 URL
httpx -l hosts.txt \
  -sc -title -tech-detect -server -location -ip \
  -silent -o httpx-result.txt

# 对同一 IP 做 Host 头验证时,使用已确认的域名
curl -k -i --resolve app.example.test:443:192.0.2.10 \
  

httpx 的结果最好保留状态码、标题和跳转地址,而不是只看 200。比如 401/403 说明入口存在,30x 可能暴露了规范域名或登录路径,404 也要结合响应体长度判断是否为统一错误页面。

目录枚举时建议先做小规模、低速率验证,排除统一响应和明显静态文件,再扩大字典:

# 先验证目标是否存在统一 404
curl -sk -o /tmp/notfound -w '%{http_code} %{size_download}\n' \
  

# 基础枚举,按响应状态和长度观察
ffuf -u  \
  -w /usr/share/seclists/Discovery/Web-Content/common.txt \
  -mc 200,204,301,302,307,401,403 \
  -fc 404 \
  -t 10 -rate 30 \
  -o ffuf-common.json -of json

# 如果 404 页面状态码也是 200,则按响应长度过滤
ffuf -u  \
  -w /usr/share/seclists/Discovery/Web-Content/raft-small-words.txt \
  -mc all -fs 1234 \
  -t 10 -rate 20

实际排查中容易误判的地方有三个:

  • WAF 或反向代理会对高并发返回 403、429,优先降低 -t 和 -rate,并记录时间窗口,不要把限流页面当成真实目录。
  • 需要认证的站点应使用测试账号和授权 Cookie,例如通过 -H 'Authorization: Bearer ...' 或 -b 'session=...' 传递,避免对登录接口做爆破。
  • 对每个命中项用 curl -i 复核,确认跳转链、响应头、实际内容和权限边界;只凭 ffuf 的状态码就下结论容易把自定义错误页当成敏感路径。

最后建议把 Nmap、httpx、ffuf 的原始输出、扫描时间、目标范围和测试账号分别保存。报告中至少给出“端口—域名—URL—状态码—复现请求—影响判断”的对应关系,这样后续复测会比只贴截图更可靠。

Create an account or sign in to comment

Recently Browsing 0

  • No registered users viewing this page.

SiteMap HACKHAT © 2026 All rights reserved.