应直接分析apache access.log揪出恶意请求痕迹,重点关注含单引号、union select、and 1=2、waitfor delay、--、#等高危字符串的url或参数,结合404/500状态码及error.log中的sql错误信息综合研判。

直接看 Apache 的 access.log,重点不是等数据库报错,而是揪出攻击者主动发来的恶意请求痕迹。只要这些高危字符串出现在 URL 或查询参数里,就代表攻击已触达 Web 层,必须响应。
哪些路径和参数模式最可疑
SQL 注入试探行为往往在请求行(%r 字段)中留下清晰指纹,常见特征包括:
-
/index.php?id=1' OR '1'='1—— 单引号闭合 + 恒真条件,基础探测 -
/search?q=test%27%20UNION%20SELECT%201,2,3--—— URL 编码的UNION SELECT,多见于搜索框入口 -
/api/user?uid=1 AND 1=2—— 布尔盲注常用,靠响应差异判断逻辑真假 -
/product.asp?cid=1;WAITFOR%20DELAY%20'0:0:5'—— SQL Server 延时注入,WAITFOR DELAY是强信号 -
/page.php?name=admin'--或/login?user=root%23—— 单引号+注释符组合,绕过简单过滤
用命令快速筛出可疑请求
无需依赖复杂平台,服务器本地一条命令就能高效初筛。推荐组合(适配标准 Combined LogFormat):
awk '$0 ~ /\x27|UNION[[:space:]]+SELECT|AND[[:space:]]+[0-9]+=[0-9]+|--|#|SLEEP\(|WAITFOR[[:space:]]+DELAY/ {print $0}' /var/log/apache2/access.log | grep -i -E "(select|union|sleep|waitfor|benchmark|information_schema)"
-
\x27匹配原始单引号,比写'更可靠(防部分 WAF 绕过) -
[[:space:]]+覆盖空格、制表符甚至%20,避免漏掉变形写法 - 第二遍
grep -i是为了排除正常单词(比如and出现在文章标题里) - 别只用
grep -E "UNION.*SELECT"—— 攻击者加注释或换行就能跳过
错误日志(error_log)也不能忽略
有些注入虽未触发 500 错误,但数据库报错信息可能已泄露在 error.log 中,例如:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 含
SQL syntax、You have an error in your SQL syntax的条目 - 出现
mysql_fetch_array()、pg_query()类函数警告,且上下文含用户可控参数 - 带
information_schema、sys.tables等系统表名的查询片段
实时监控可用:tail -F /var/log/apache2/error.log,重点关注上述关键词。
配合状态码缩小排查范围
单独看请求内容不够高效,结合 HTTP 状态码能更快定位真实攻击行为:
- 大量
404+ 含UNION或单引号 → 扫描式注入探测 - 高频
500+ 参数含SLEEP(5)或WAITFOR→ 主动触发延时或报错型注入 - 同一 IP 在短时间内反复发送含
--、#、/*的请求 → 有组织的盲注尝试
统计命令示例:awk '$9 ~ /^500$/ && $7 ~ /\'/ || /union/i {print}' /var/log/apache2/access.log










