实用脚本能自动检测网站被黑吗?

wen 实用脚本 1

本文目录导读:

实用脚本能自动检测网站被黑吗?

  1. 方案一:最推荐的轻量级方法(基于文件完整性校验)
  2. 方案二:针对PHP/ASP代码的恶意特征扫描(中阶)
  3. 方案三:检测外部连接行为(高级,需root权限)
  4. 方案四:利用现成的专业安全工具(强烈推荐)
  5. 总结建议:最实用的自动化检测组合

这是一个非常实用且重要的问题,直接回答:能,但无法做到100%自动检测所有黑帽手段。

实现自动检测通常需要结合被动监控(检查文件完整性)和主动扫描(检查恶意内容),对于大多数站长来说,使用现成的工具或脚本比完全自己写要高效得多。

以下是几种不同技术水平的“实用脚本”和自动化方案,从零成本到专业级都有:

最推荐的轻量级方法(基于文件完整性校验)

这是检测网站被植入后门、篡改文件的最有效方法,核心原理是:对干净的文件建立哈希指纹,之后定期比对。

实用脚本示例(Bash + Python):

  1. 首次运行(创建基线): 记录网站目录下所有文件的MD5/SHA256值。
  2. 后续运行(每日/每小时): 重新计算所有文件哈希,与基线比对,任何差异都意味着文件被修改。

check_integrity.sh (Linux服务器)

#!/bin/bash
# 用法:首次运行 bash check_integrity.sh init,后续运行 bash check_integrity.sh check
WEB_DIR="/var/www/html"  # 你的网站根目录
BASELINE_FILE="/root/web_baseline.txt"
SCAN_FILE="/tmp/web_scan.txt"
# 扫描所有文件并生成哈希
scan_files() {
    find "$WEB_DIR" -type f -exec sha256sum {} \; | sort > "$1"
}
if [ "$1" == "init" ]; then
    echo "初始化基线..."
    scan_files "$BASELINE_FILE"
    echo "基线已创建: $BASELINE_FILE"
elif [ "$1" == "check" ]; then
    echo "扫描当前文件..."
    scan_files "$SCAN_FILE"
    # 差异比对
    cd /root
    diff "$BASELINE_FILE" "$SCAN_FILE" > /tmp/diff_result.txt
    if [ -s /tmp/diff_result.txt ]; then
        echo "⚠️ 发现文件变化!可能有被黑风险!"
        cat /tmp/diff_result.txt
        # 在这里可以加入发送警报的代码(如邮件、Webhook)
        # mail -s "网站文件变化警报" admin@example.com < /tmp/diff_result.txt
    else
        echo "✅ 文件完整性正常,未被篡改。"
    fi
else
    echo "用法: $0 {init|check}"
fi

优点: 效率高,能发现篡改、新增、删除了文件。
缺点: 需要脚本定期执行(放crontab里),无法检测利用已知漏洞的注入(如SQL注入、站内挖矿代码)。


针对PHP/ASP代码的恶意特征扫描(中阶)

很多被黑网站是被植入了一句话木马恶意后门文件,这些文件通常具有明显的特征,eval()base64_decode()system()preg_replace() 等危险函数。

实用脚本示例(Python):

scanner.py

import os, re
# 需要扫描的目录
SCAN_PATH = "/var/www/html"
# 常见的后门特征正则表达式
SUSPICIOUS_PATTERNS = [
    # 一句话木马:<?php @eval($_POST['x']);?>
    r'eval\s*\(\s*\$_',  
    # 危险函数调用
    r'system\s*\(',
    r'exec\s*\(',
    r'shell_exec\s*\(',
    r'base64_decode\s*\(',
    # preg_replace 的 /e 修饰符(高危,老版本PHP)
    r'preg_replace\s*\(\s*["\']/[^"\']*/["\']\s*,',
    # file_get_contents 远程文件包含
    r'file_get_contents\s*\(\s*["\']http',
    # .htaccess 规则被篡改(用于图片木马)
    r'AddType\s+application/x-httpd-php',
    r'PHP_VALUE',
    # 编码后的后门
    r'\$[\w_]+\s*=\s*["\']\s*[a-zA-Z0-9+/]{50,}={0,2}\s*["\'];',
]
def scan_file(file_path):
    """扫描单个文件的行"""
    try:
        with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:
            for line_no, line in enumerate(f, 1):
                for pattern in SUSPICIOUS_PATTERNS:
                    if re.search(pattern, line, re.IGNORECASE):
                        return (pattern, line_no, line.strip())
    except Exception as e:
        return ("文件读取错误", 0, str(e))
    return None
print(f"开始扫描恶意特征: {SCAN_PATH}")
found = False
for root, dirs, files in os.walk(SCAN_PATH):
    for file in files:
        if file.endswith(('.php', '.asp', '.jsp', '.phtml', '.htaccess')):
            file_path = os.path.join(root, file)
            result = scan_file(file_path)
            if result:
                found = True
                pattern, line_no, content = result
                print(f"\n⚠️ 发现可疑特征: {pattern}")
                print(f"  文件: {file_path}")
                print(f"  行号: {line_no}")
                print(f"  内容: {content[:100]}")
if not found:
    print("✅ 未发现明显恶意特征。")

优点: 针对性强,能发现大部分加密后门。
缺点: 误报率高(正常代码也可能用 exec),且无法检测内存马(无文件后门)。


检测外部连接行为(高级,需root权限)

很多被黑网站会在后台建立与外部的反向连接或向外传输数据,可以用 tcpdumplsof 监控。

实用脚本示例(检测异常进程):

#!/bin/bash
# 1. 检查 web 服务器进程是否被注入
netstat -tunap 2>/dev/null | grep -E '(php|apache2|nginx|httpd)' | grep -v '127.0.0.1\|::1'
# 2. 查看正在运行的 php 进程(正常情况应很少)
echo "--- 检查活跃的PHP进程 ---"
lsof -i -P -n | grep php
# 3. 检查是否有计划任务在做坏事(如挖矿、定时连接)
echo "--- 检查计划任务 ---"
for user in $(cut -f1 -d: /etc/passwd); do
    crontab -u $user -l 2>/dev/null | grep -v '^#\|^$' | grep -i 'curl\|wget\|bash\|nc\|php\|perl'
done
# 4. 检查隐藏文件(文件名以 . 开头)
echo "--- 检查隐藏文件 ---"
find /var/www/html -name ".*" -type f

优点: 能发现所有类型的后门(包括CPU挖矿、反向shell)。
缺点: 配置复杂,需要理解网络行为,误报多。


利用现成的专业安全工具(强烈推荐)

自己写脚本维护成本高,专业工具通常更完善:

  1. ClamAV (开源,免费):
    • 安装:apt install clamav
    • 更新病毒库:freshclam
    • 扫描:clamscan -r --bell /var/www/html
    • 优点: 病毒库更新快,能查杀已知木马。
  2. WordPress/ CMS 专用:
    • 如果网站是WordPress,官方插件Wordfence(免费版)自动扫描核心文件、主题、插件完整性,检测恶意代码,效果非常好。
    • 其他CMS(如Joomla、Drupal)也有类似插件。
  3. 在线扫描服务:
    • VirusTotal 可以上传可疑文件查杀。
    • 网站安全扫描(如Sucuri SiteCheck)可以检测已知黑名单。

总结建议:最实用的自动化检测组合

推荐线上生产环境使用(无需自己写很多代码):

  1. 定时运行 ClamAV: 检测已知病毒库的恶意文件。
  2. 结合 AIDE(Advanced Intrusion Detection Environment): 这是一个专业的文件完整性检查工具,比上面第一个 bash 脚本专业得多,自带cron定时任务。
  3. 使用 CMS 自带的安全插件(如Wordfence)。
  4. 配合服务器日志分析: 检查 access.log 中大量 POST 请求、evalbase64 等异常URL。

最终提醒: 最好的检测是预防,确保服务器系统软件更新、禁用不必要的文件上传、严格目录权限(如 uploads 目录禁止执行PHP)、使用高强度密码。自动检测只能发现“已发生”的问题,而黑客可能在几小时内利用漏洞完成破坏。

抱歉,评论功能暂时关闭!