name: webapp-nikto description: > 用于识别安全漏洞、配置错误和过时软件版本的Web服务器漏洞扫描器。使用场景:(1) 进行授权的Web服务器安全评估,(2) 识别常见的Web漏洞和配置错误,(3) 检测过时的服务器软件和已知漏洞,(4) 执行Web服务器加固的合规性扫描,(5) 枚举Web服务器信息和启用功能,(6) 验证安全控制和补丁级别。 version: 0.1.0 maintainer: sirappsec@gmail.com category: offsec tags: [web-security, vulnerability-scanner, nikto, server-security, web-assessment] frameworks: [OWASP, CWE, NIST] dependencies: packages: [nikto] tools: [perl] references:
- https://cirt.net/Nikto2
- https://github.com/sullo/nikto
- https://owasp.org/www-project-web-security-testing-guide/
Nikto Web服务器扫描器
概述
Nikto是一款开源的Web服务器扫描器,对Web服务器执行全面的安全测试,包括危险文件、过时软件版本和服务器配置错误。本技能涵盖Web服务器和应用程序的授权安全评估。
重要提示:Nikto会产生大量流量且容易被检测。仅在对您拥有或已获得明确测试权限的系统上,在获得书面授权后使用。
快速开始
基本Web服务器扫描:
# 扫描单个主机
nikto -h http://example.com
# 使用SSL扫描
nikto -h https://example.com
# 扫描特定端口
nikto -h example.com -p 8080
# 扫描多个端口
nikto -h example.com -p 80,443,8080
核心工作流程
Web服务器评估工作流程
进度: [ ] 1. 验证Web服务器测试的授权 [ ] 2. 识别目标Web服务器和端口 [ ] 3. 执行初始侦察扫描 [ ] 4. 运行全面的漏洞评估 [ ] 5. 分析和分类发现结果 [ ] 6. 记录漏洞并提供修复建议 [ ] 7. 生成并交付安全报告 [ ] 8. 验证无测试残留物
系统性地完成每个步骤。勾选已完成的项目。
1. 授权验证
关键:在任何Web服务器扫描之前:
- 确认获得Web服务器所有者的书面授权
- 验证范围包括Web服务器漏洞评估
- 了解可接受的扫描时间窗口
- 记录紧急联系程序
- 确认无生产影响限制
2. 基本扫描
执行基本Web服务器扫描:
# 标准扫描
nikto -h http://example.com
# 使用特定User-Agent扫描
nikto -h http://example.com -useragent "Mozilla/5.0..."
# 通过代理扫描
nikto -h http://example.com -useproxy http://proxy:8080
# 使用身份验证扫描
nikto -h http://example.com -id username:password
# SSL/TLS扫描
nikto -h https://example.com -ssl
# 在非标准端口上强制使用SSL
nikto -h example.com -p 8443 -ssl
3. 高级扫描选项
自定义扫描行为:
# 指定调优选项
nikto -h http://example.com -Tuning 123bde
# 启用所有检查(非常全面)
nikto -h http://example.com -Tuning x
# 从文件扫描多个主机
nikto -h hosts.txt
# 限制为特定检查
nikto -h http://example.com -Plugins "apache_expect_xss"
# 更新插件数据库
nikto -update
# 显示可用插件
nikto -list-plugins
调优选项:
- 0:文件上传
- 1:有趣的文件/在日志中看到
- 2:配置错误/默认文件
- 3:信息泄露
- 4:注入(XSS/脚本/HTML)
- 5:远程文件检索(Web根目录内)
- 6:拒绝服务
- 7:远程文件检索(服务器范围)
- 8:命令执行/远程Shell
- 9:SQL注入
- a:身份验证绕过
- b:软件识别
- c:远程源包含
- d:Web服务
- e:管理控制台
- x:反向调优(排除指定项)
4. 输出和报告
生成扫描报告:
# 输出到文本文件
nikto -h http://example.com -o results.txt
# 输出到HTML报告
nikto -h http://example.com -o results.html -Format html
# 输出到CSV
nikto -h http://example.com -o results.csv -Format csv
# 输出到XML
nikto -h http://example.com -o results.xml -Format xml
# 多种输出格式
nikto -h http://example.com -o results.txt -Format txt -o results.html -Format html
5. 性能调优
优化扫描性能:
# 增加超时时间(默认10秒)
nikto -h http://example.com -timeout 20
# 限制最大执行时间
nikto -h http://example.com -maxtime 30m
# 使用特定HTTP版本
nikto -h http://example.com -vhost example.com
# 跟随重定向
nikto -h http://example.com -followredirects
# 禁用404猜测
nikto -h http://example.com -no404
# 测试间暂停
nikto -h http://example.com -Pause 2
6. 规避和隐蔽
规避检测(仅限授权测试):
# 使用随机User-Agent字符串
nikto -h http://example.com -useragent random
# 在请求中注入随机数据
nikto -h http://example.com -evasion 1
# 使用IDS规避技术
nikto -h http://example.com -evasion 12345678
# 请求间暂停
nikto -h http://example.com -Pause 5
# 使用会话Cookie
nikto -h http://example.com -cookies "session=abc123"
规避技术:
- 1:随机URI编码
- 2:目录自引用(/./)
- 3:提前URL结束
- 4:前置长随机字符串
- 5:虚假参数
- 6:TAB作为请求分隔符
- 7:更改URL大小写
- 8:使用Windows目录分隔符(\)
安全考虑
授权与法律合规
- 书面许可:获取Web服务器扫描的明确授权
- 范围验证:仅扫描明确授权的主机和端口
- 检测风险:Nikto噪音大,会触发IDS/IPS警报
- 生产影响:扫描可能影响服务器性能
- 日志泛滥:Nikto生成大量日志条目
操作安全
- 速率限制:使用-Pause减少服务器负载
- 扫描窗口:在批准的维护窗口期间执行扫描
- 会话管理:使用-maxtime限制扫描持续时间
- 代理使用:如果需要,通过授权代理路由
- User-Agent:考虑使用自定义User-Agent进行跟踪
审计日志记录
记录所有Nikto扫描活动:
- 扫描的目标主机和端口
- 扫描开始和结束时间戳
- 使用的调优选项和插件
- 发现结果和漏洞数量
- 识别的误报
- 修复优先级
- 报告交付和接收者
合规性
- OWASP ASVS:V14配置验证
- NIST SP 800-115:信息安全测试技术指南
- PCI-DSS:6.6和11.3 - 漏洞扫描
- CWE:常见弱点枚举映射
- ISO 27001:A.12.6 - 技术漏洞管理
常见模式
模式1:外部边界评估
# 扫描外部Web服务器
for host in web1.example.com web2.example.com; do
nikto -h https://$host -o nikto_${host}.html -Format html
done
# 扫描常见Web端口
nikto -h example.com -p 80,443,8080,8443 -o external_scan.txt
模式2:内部Web应用程序评估
# 全面的内部扫描
nikto -h http://intranet.local \
-Tuning 123456789abcde \
-timeout 30 \
-maxtime 2h \
-o internal_assessment.html -Format html
模式3:SSL/TLS安全评估
# SSL特定测试
nikto -h https://example.com \
-Plugins "ssl" \
-ssl \
-o ssl_assessment.txt
模式4:身份验证扫描
# 使用身份验证扫描
nikto -h http://example.com \
-id admin:password \
-cookies "sessionid=abc123" \
-Tuning 123456789 \
-o authenticated_scan.html -Format html
模式5:批量扫描
# 创建主机文件
cat > web_servers.txt <<EOF
http://web1.example.com
https://web2.example.com:8443
http://web3.example.com:8080
EOF
# 扫描所有主机
nikto -h web_servers.txt -o bulk_scan.csv -Format csv
集成点
CI/CD集成
#!/bin/bash
# ci_nikto_scan.sh - 自动化Web安全扫描
TARGET_URL="$1"
OUTPUT_DIR="nikto_results/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$OUTPUT_DIR"
# 运行Nikto扫描
nikto -h "$TARGET_URL" \
-Tuning 123456789 \
-maxtime 30m \
-o "$OUTPUT_DIR/nikto_report.xml" -Format xml
# 检查关键发现
if grep -i "OSVDB" "$OUTPUT_DIR/nikto_report.xml"; then
echo "关键:检测到漏洞!"
exit 1
fi
echo "扫描成功完成"
exit 0
SIEM集成
# 将发现结果导出为JSON供SIEM使用
nikto -h http://example.com -o findings.xml -Format xml
# 解析XML为JSON(需要xmlstarlet或类似工具)
xmlstarlet sel -t -m "//item" -v "concat(@id,',',description,','
,uri)" -n findings.xml > findings.csv
故障排除
问题:扫描时间过长
解决方案:
# 限制扫描持续时间
nikto -h http://example.com -maxtime 15m
# 减少调优范围
nikto -h http://example.com -Tuning 123
# 禁用404检查
nikto -h http://example.com -no404
问题:SSL/TLS错误
解决方案:
# 强制SSL
nikto -h example.com -ssl -p 443
# 忽略SSL证书错误
nikto -h https://example.com -ssl -nossl
# 指定SSL版本
nikto -h https://example.com -ssl
问题:误报过多
解决方案:
- 手动验证发现结果
- 使用-Tuning专注于特定漏洞类型
- 使用-update审查和更新Nikto数据库
- 从报告中排除已知误报
问题:WAF阻止扫描
解决方案:
# 使用规避技术
nikto -h http://example.com -evasion 1234567
# 添加延迟
nikto -h http://example.com -Pause 10
# 使用自定义User-Agent
nikto -h http://example.com -useragent "legitimate-browser-string"
防御考虑
保护Web服务器免受Nikto扫描:
Web应用程序防火墙规则:
- 检测并阻止Nikto User-Agent字符串
- 实施速率限制
- 阻止已知的Nikto攻击模式
- 监控扫描签名
服务器加固:
- 删除默认文件和目录
- 禁用目录列表
- 移除服务器版本横幅
- 定期应用安全补丁
- 遵循CIS基准进行Web服务器加固
检测和监控:
- 监控快速顺序请求
- 对来自单一源的多个404错误发出警报
- 检测常见的漏洞探测
- 记录和关联扫描模式
- 实施蜜罐文件/目录
常见的Nikto检测签名:
- User-Agent包含"Nikto"
- 对已知易受攻击路径的请求
- 顺序URI枚举
- 特定的HTTP头模式