发布于周六 19:553天前 本文以一次已授权的内网渗透测试为例,说明如何在 Kali Linux 中组合使用 Nmap、Curl 和 FFUF,定位 Web 管理接口暴露、确认访问边界,并把验证结果与日志、修复措施对应起来。示例目标均为测试网段,目标地址使用 10.10.20.15,实际操作前应明确授权范围、测试时间窗口和禁止事项。一、测试背景与目标测试范围为一台部署了业务门户的 Linux 服务器。资产登记显示该主机只应开放 443 端口,管理服务应仅监听本机或通过堡垒机访问。测试目标不是获取业务数据,而是验证以下问题:是否存在未登记的 HTTP、HTTPS 或高位管理端口。管理路径是否可以被普通网络区域直接访问。服务响应是否泄露版本、调试信息或内部路径。普通测试账号与管理接口之间是否存在越权边界问题。二、准备 Kali 渗透工具建议优先使用 Kali 官方仓库安装工具,避免从不明来源下载二进制文件。安装后记录工具版本,便于复测和报告复现。sudo apt update sudo apt install -y nmap curl ffuf seclists jq nmap --version ffuf -V curl --version如果测试环境禁止直接访问互联网,应提前准备经过校验的离线软件包,并记录 SHA-256。不要在生产服务器上临时安装扫描器,扫描动作应在 Kali 测试机上完成。三、问题定位:先确认端口和服务指纹第一轮扫描应控制速率和范围,先使用 TCP SYN 扫描与轻量服务识别,避免直接使用大范围漏洞脚本。对已获授权的单个目标,可以使用以下命令:sudo nmap -Pn -sS -sV --version-light --open \ -p 22,80,443,8080,8443,9000 10.10.20.15 \ -oA evidence/10.10.20.15-services重点关注三类结果:第一,登记之外的端口,例如 8080 或 9000;第二,服务版本与资产台账不一致;第三,服务绑定在所有网卡上而不是预期的管理网卡。Nmap 只能说明端口可达,不能直接证明存在漏洞,后续还需要通过 HTTP 响应和访问控制行为进行确认。如果发现 8080 开放,可进一步获取标题和响应头。该步骤只读取响应,不提交表单,也不携带攻击载荷。sudo nmap -Pn -p 8080 \ --script http-title,http-headers \ 10.10.20.15 -oN evidence/10.10.20.15-8080-http.txt curl --noproxy '*' --max-time 8 -sS -D evidence/headers.txt \ -o evidence/index.html sed -n '1,30p' evidence/headers.txt如果响应头出现 Server、X-Powered-By、调试追踪编号或内部主机名,应作为信息泄露线索记录,但不要把版本信息本身直接等同于可利用漏洞。验证重点应转向访问边界和配置错误。四、目录与管理路径枚举在获得目标方明确授权后,可以对单个 Web 服务进行低速目录枚举。使用常见路径字典即可,不建议一开始使用大型字典或高并发模式。FFUF 的输出应保存,便于和 Web 访问日志对照。ffuf -u \ -w /usr/share/seclists/Discovery/Web-Content/common.txt \ -mc 200,204,301,302,401,403 \ -t 5 -rate 20 -timeout 8 \ -of json -o evidence/ffuf-8080.json对结果进行人工复核时,优先检查 200、401、403 和重定向位置。例如发现 /admin、/actuator 或 /debug,不应立即访问敏感操作页面,而应先确认状态码、响应长度、Location 和是否要求认证:for path in admin actuator debug server-status; do printf '\n=== /%s ===\n' "$path" curl --noproxy '*' --max-time 8 -sS -o /dev/null \ -w 'status=%{http_code} bytes=%{size_download} location=%{redirect_url}\n' \ " done如果管理路径返回 401 或 403,说明至少存在一层访问控制;还需要确认普通业务账号是否能通过修改 URL、HTTP 方法或请求头绕过限制。验证时只使用测试账号和无副作用请求,不进行密码爆破,不尝试删除、修改或导出业务数据。五、权限边界与内网访问验证若管理服务按设计只能经堡垒机访问,可在授权的跳板路径上复核,而不是直接对生产网段进行扫描。以 SSH 本地端口转发为例,测试前需确认跳板机、目标地址和端口都在授权清单中:ssh -N -L 18080:10.10.20.15:8080 [email protected] curl --noproxy '*' --max-time 8 -sS -D - \ -o /tmp/admin-check.html Linux 权限边界,应使用项目提供的低权限审计账号,在目标主机上执行只读检查,例如记录当前身份、组成员和无密码 sudo 规则:id cat /etc/os-release sudo -n -l 2>&1发现可执行的 sudo 规则后,应停止在权限验证阶段,不要运行 shell、读取其他用户密钥或修改系统文件。报告中应写明规则对象、允许的命令、运行用户和风险影响,并由客户决定是否进行后续验证。六、证据保存与日志对照每个发现至少保存以下信息:测试时间、源地址、目标地址、命令参数、响应状态码、响应头摘要和截图或原始文本。原始响应中如果包含 Cookie、Token 或个人信息,应脱敏后再进入报告。在服务器侧,应让运维人员按测试时间窗口检索 Nginx、Apache 或应用日志。例如 Nginx 常见位置为 /var/log/nginx/access.log,重点核对 /admin、/actuator、/debug 等路径是否有对应访问记录,以及是否记录了来源地址、User-Agent、状态码和请求耗时。sudo grep -E '(/admin|/actuator|/debug)' /var/log/nginx/access.log \ | tail -n 50 sudo journalctl --since '2026-10-10 10:00:00' \ --until '2026-10-10 10:30:00' \ -u nginx --no-pager如果扫描结果与日志无法对应,常见原因包括前置 CDN、反向代理重写、日志时区不一致,或应用只记录成功请求。复测前应先确认链路和时间基准,避免把缺少日志误判成没有访问。七、风险判断与修复建议管理服务监听在 0.0.0.0:将监听地址改为管理网卡或 127.0.0.1,并通过防火墙仅允许堡垒机网段访问。管理路径可被普通业务网段访问:在反向代理、网络 ACL 和应用认证三层同时限制,不能只依赖隐藏路径。存在调试端点:生产环境关闭调试配置,移除 actuator、debug、示例接口,或至少启用强认证与最小权限。响应头泄露过多版本信息:统一代理层响应头,关闭不必要的 Server、X-Powered-By 信息,但不要把隐藏版本当作主要修复措施。审计日志不完整:记录来源 IP、认证主体、请求路径、结果和关联 ID;对管理操作记录成功与失败事件,并集中发送到不可由应用账号删除的日志平台。sudo 规则过宽:按具体命令、参数和运行用户收紧授权,禁止通过可执行解释器、编辑器或通配符间接获得高权限。八、复测方法修复后使用同一目标、同一端口范围和相近速率复测,确保结果可比较。预期结果应包括:非管理网段无法建立 TCP 连接;管理路径在未认证时返回统一的 401 或 403;调试端点不存在或被明确拒绝;日志仍能记录拒绝事件。复测不要扩大扫描范围,也不要为了证明修复而执行破坏性操作。总结在 Kali 渗透工具的实际使用中,Nmap 负责建立资产和服务基线,Curl 用于低影响地确认响应与访问控制,FFUF 负责在明确授权和限速条件下发现未登记路径。工具输出只是证据的一部分,最终结论还需要结合网络位置、身份权限、服务器配置和日志记录进行判断。围绕可复现命令、最小化验证和明确修复措施组织报告,通常比单纯罗列扫描结果更有实际价值。 网络请求、日志与边界流量分析示意
周六 19:563天前 这个思路可以,但建议把“发现暴露”这一步做得更可复现一点,尤其是内网管理面容易被误判成普通 Web 服务。 我一般会分三层验证: 1. 先确认端口和服务指纹,不要只看 80/443 nmap -Pn -sS -sV -O --version-all \ -p 80,443,8080,8443,8000,9000,9090,9443,5000,5601,15672,2375,2379,3000 \ 10.10.0.0/16 -oA mgmt-scan 如果是内网资产,建议加上 `--open`,避免结果太吵: nmap -Pn -sV --open -p 80,443,8080,8443,9090,9443,2375,2379 10.10.0.0/16 -oA mgmt-open 重点关注这些管理面特征: - `Docker API`:2375/2376 - `etcd`:2379/2380 - `Kubernetes`:6443/10250/10255 - `RabbitMQ`:15672 - `Jenkins`:8080/8081 - `Grafana`:3000 - `Kibana`:5601 - `Prometheus`:9090 - `Consul`:8500 - `Nacos`:8848 - `Harbor`:80/443/8080 2. 用 curl 做二次确认,保留响应头和标题信息 很多管理后台会通过 `Server`、`Location`、`WWW-Authenticate`、HTML title 暴露特征。 curl -k -I --connect-timeout 3 curl -k -s --connect-timeout 3 \ | grep -iE "<title>|jenkins|grafana|kibana|nacos|prometheus" 如果怀疑是未授权接口,可以只做安全的只读探测,比如: # Docker API curl -s # etcd v2 curl -s # Prometheus curl -s # Kubernetes kubelet curl -k -s 这里注意不要直接打敏感接口,比如 `/containers/json`、`/pods`、`/metrics` 这类可能包含业务信息的接口,除非有明确授权和记录要求。 3. FFUF 更适合做路径验证,不建议盲目大字典爆破 内网管理面验证可以用小字典,主要查常见入口和未授权页面: ffuf -u \ -w mgmt-paths.txt \ -mc 200,301,302,401,403 \ -t 20 \ -timeout 3 \ -of csv -o ffuf-10.10.1.20.csv 字典可以先控制在这类路径: admin login console dashboard manager actuator actuator/env actuator/health metrics api api/v1 swagger-ui swagger-ui.html v2/api-docs nacos grafana jenkins prometheus 判断“暴露”时我建议记录四个字段,后面和运维沟通会清楚很多: - IP、端口、协议 - 服务识别结果 - 访问路径和状态码 - 是否需要认证、是否存在未授权只读信息泄露 例如: 10.10.1.20:8080 Jenkins /login 200 需要认证 10.10.1.31:9090 Prometheus /graph 200 未授权访问 10.10.2.18:2375 Docker API /version 200 高风险未授权 最后,管理面发现后不要只给“关闭端口”的建议。更实际的整改一般是: - 放到独立管理网段 - 通过 VPN / 堡垒机访问 - 安全组限制来源 IP - 统一接入 SSO 或反向代理认证 - 对 Docker API、etcd、kubelet 这类接口启用 TLS 和认证 - 在日志侧加访问告警,比如非运维网段访问 2375、9090、15672、5601 等端口直接告警 这样验证链路会比单纯“nmap 扫到了 Web 端口”更有说服力。
创建帐户或登录后发表意见