完整的网站安全巡检需要覆盖以下四个层面:
创建专用工作目录并安装必要依赖:
```bash mkdir -p ~/security-scan && cd ~/security-scan sudo apt update && sudo apt install -y python3-pip git nmap ```安装OWASP ZAP作为主要扫描工具:
```bash wget https://github.com/zaproxy/zaproxy/releases/download/v2.14.0/ZAP_2.14.0_Linux.tar.gz tar -xzf ZAP_2.14.0_Linux.tar.gz cd ZAP_2.14.0 ./zap.sh ```安装Nikto进行Web服务器扫描:
```bash git clone https://github.com/sullo/nikto.git cd nikto/program perl nikto.pl -update ```创建scan_main.sh作为执行入口:
```bash !/bin/bash TARGET_DOMAIN="$1" OUTPUT_DIR="reports/$(date +%Y%m%d_%H%M%S)" mkdir -p "$OUTPUT_DIR" echo "开始安全巡检:$TARGET_DOMAIN" echo "报告输出目录:$OUTPUT_DIR" ```创建port_scan.sh:
```bash !/bin/bash TARGET="$1" OUTPUT_DIR="$2" echo "执行Nmap全端口扫描..." nmap -p- -T4 -oN "$OUTPUT_DIR/nmap_full.txt" "$TARGET" echo "执行服务版本检测..." nmap -sV -sC -oN "$OUTPUT_DIR/nmap_service.txt" "$TARGET" echo "执行SSL/TLS检测..." nmap --script ssl-enum-ciphers -p 443 -oN "$OUTPUT_DIR/ssl_scan.txt" "$TARGET" ```创建web_scan.sh:
```bash !/bin/bash TARGET="$1" OUTPUT_DIR="$2" echo "执行Nikto基础扫描..." perl nikto/program/nikto.pl -h "$TARGET" -o "$OUTPUT_DIR/nikto.html" -Format html echo "执行目录枚举..." gobuster dir -u "https://$TARGET" -w /usr/share/wordlists/dirb/common.txt -o "$OUTPUT_DIR/directory_scan.txt" ```创建zap_policy.json定义扫描规则:
```json { "scanners": [ { "id": 40012, "threshold": "MEDIUM", "strength": "MEDIUM" }, { "id": 40018, "threshold": "MEDIUM", "strength": "MEDIUM" } ], "attackStrength": "MEDIUM", "alertThreshold": "MEDIUM" } ```创建zap_scan.py:
```python !/usr/bin/env python3 from zapv2 import ZAPv2 import time target = 'https://example.com' zap = ZAPv2(apikey='your-api-key', proxies={'http': 'http://127.0.0.1:8080'}) print('开始蜘蛛爬取...') scan_id = zap.spider.scan(target) while int(zap.spider.status(scan_id)) < 100: time.sleep(2) print('开始主动扫描...') scan_id = zap.ascan.scan(target) while int(zap.ascan.status(scan_id)) < 100: time.sleep(5) print('生成报告...') with open('zap_report.html', 'w') as f: f.write(zap.core.htmlreport()) ```创建config_check.sh:
```bash !/bin/bash TARGET="$1" OUTPUT_DIR="$2" SENSITIVE_FILES=( ".env" "config.php" "web.config" "wp-config.php" "database.yml" ) for file in "${SENSITIVE_FILES[@]}"; do curl -s "https://$TARGET/$file" | grep -q "200" && echo "发现敏感文件:$file" >> "$OUTPUT_DIR/sensitive_files.txt" done ```创建source_leak_check.sh:
```bash !/bin/bash TARGET="$1" 检查.git目录泄露 curl -s "https://$TARGET/.git/config" | grep -q "repositoryformatversion" && echo "发现.git泄露" 检查备份文件 BACKUP_EXT=("bak" "backup" "old" "orig") for ext in "${BACKUP_EXT[@]}"; do curl -s "https://$TARGET/index.php.$ext" | head -1 | grep -q "200" && echo "发现备份文件:index.php.$ext" done ```
创建report_template.html:
```html扫描时间:{{scan_time}}
目标域名:{{target}}
| 风险等级 | 漏洞类型 | 数量 |
|---|
创建generate_report.py:
```python !/usr/bin/env python3 import json from datetime import datetime import subprocess def parse_nmap_results(filepath): results = [] with open(filepath, 'r') as f: for line in f: if 'open' in line and 'tcp' in line: parts = line.split() results.append({ 'port': parts[0].split('/')[0], 'service': parts[2], 'state': 'open' }) return results def generate_html_report(target, scan_dir): template = open('report_template.html').read() 收集所有扫描结果 nmap_results = parse_nmap_results(f'{scan_dir}/nmap_service.txt') 替换模板变量 report = template.replace('{{scan_time}}', datetime.now().strftime('%Y-%m-%d %H:%M:%S')) report = report.replace('{{target}}', target) with open(f'{scan_dir}/final_report.html', 'w') as f: f.write(report) print(f'报告已生成:{scan_dir}/final_report.html') if __name__ == '__main__': generate_html_report('example.com', 'reports/20240101_120000') ```创建full_scan.sh整合所有模块:
```bash !/bin/bash if [ -z "$1" ]; then echo "使用方法:$0 <域名>" exit 1 fi TARGET="$1" OUTPUT_DIR="reports/$(date +%Y%m%d_%H%M%S)" mkdir -p "$OUTPUT_DIR" echo "=== 开始全面安全巡检 ===" echo "目标:$TARGET" 执行端口扫描 ./port_scan.sh "$TARGET" "$OUTPUT_DIR" 执行Web扫描 ./web_scan.sh "$TARGET" "$OUTPUT_DIR" 执行敏感信息检测 ./config_check.sh "$TARGET" "$OUTPUT_DIR" 生成最终报告 python3 generate_report.py "$TARGET" "$OUTPUT_DIR" echo "=== 扫描完成 ===" echo "报告位置:$OUTPUT_DIR/final_report.html" ```添加crontab任务实现每周自动扫描:
```bash 编辑crontab crontab -e 添加以下内容(每周一凌晨2点执行) 0 2 1 cd /path/to/security-scan && ./full_scan.sh your-domain.com >> scan.log 2>&1 ```创建send_report.py实现报告邮件发送:
```python !/usr/bin/env python3 import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart def send_report(report_path, recipients): msg = MIMEMultipart() msg['Subject'] = '网站安全巡检报告' msg['From'] = 'security@yourcompany.com' msg['To'] = ', '.join(recipients) with open(report_path, 'r') as f: body = f.read() msg.attach(MIMEText(body, 'html')) with smtplib.SMTP('smtp.yourcompany.com', 587) as server: server.starttls() server.login('username', 'password') server.send_message(msg) if __name__ == '__main__': send_report('reports/latest/final_report.html', ['admin@yourcompany.com']) ```针对常见漏洞提供具体修复方案:
```markdown SQL注入漏洞 发现位置:/api/user?id=1 修复方案: 1. 使用参数化查询: ```python 错误示例 cursor.execute(f"SELECT FROM users WHERE id = {user_input}") 正确示例 cursor.execute("SELECT FROM users WHERE id = %s", (user_input,)) ``` 2. 输入验证: ```python import re if not re.match(r'^[0-9]+$', user_input): raise ValueError("Invalid input") ``` 验证方法: 使用SQLMap重新测试:sqlmap -u "https://example.com/api/user?id=1" --level=2 ```创建issue_template.md用于跟踪修复进度:
```markdown 漏洞详情 - 风险等级: - 发现时间: - 影响范围: - 复现步骤: 1. 2. 3. 修复计划 - [ ] 确认漏洞存在 - [ ] 制定修复方案 - [ ] 代码修复 - [ ] 测试验证 - [ ] 重新扫描确认 负责人 - 开发: - 测试: - 安全: ```执行完整扫描:chmod +x full_scan.sh && ./full_scan.sh your-domain.com
查看报告:open reports/最新目录/final_report.html
配置定时任务:crontab -e 添加自动扫描计划
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图