2026.7.31(3)【日志分析】2026CCF-被入侵的数据库

📅 2026/8/3 16:10:04
2026.7.31(3)【日志分析】2026CCF-被入侵的数据库
题目信息项目内容题目名称2026CCF-被入侵的数据库题目来源玄机靶场题目类型日志分析 / Web 攻击溯源子分类SQL 注入、access.log 分析考点Web 中间件日志分析、SQL 注入流量识别、数据库名提取难度⭐最终 Flagflag{login_db}️ 使用工具文本编辑器 / 日志查看Python 3 解题思路题目给了一份 Web 中间件日志access.log3677 行Nginx/Apache 格式。日志里有大量扫描噪音404 探测真正的攻击者是执行SQL 注入的源 IP。核心思路从注入流量中找出攻击者 → 定位其提取数据库数据的语句 → 数据库名就写在FROM 库名.表名里。第 1 步识别 SQL 注入流量锁定攻击者先使用python脚本判断哪一个IP是访问量最多的。import re from collections import Counter data open(access.log, encodingutf-8).readlines() ip_counter Counter() for line in data: line line.strip() # 去掉首尾空白 if not line: # 跳过空行 continue ip line.split()[0] ip_counter[ip] 1 print( 各 IP 访问量 Top10 ) for ip, c in ip_counter.most_common(10): print(f{ip}: {c})发现123.13.22.45、192.168.1.100这两个IP访问量最多因此怀疑这两个IP的其中一个为攻击者。先查看123.13.22.45的相关日志发现这个IP在探测敏感路径但考虑到这个IP的访问量有3167次不可能是手工探测因此推测为使用扫描器探测。然后看192.168.1.100的相关日志发现 192.168.1.100 在/test/login.php上发起大量 SQL 注入因此判断攻击者为192.168.1.100因为访问量只有189次人类能做到且题目名称有提到数据库因此判定为攻击者。总结123.13.22.45扫描器和192.168.1.100注入攻击者是主要流量其中192.168.1.100 的请求全部是对/test/login.php的注入是真正的攻击者。⚠️注意123.13.22.45访问量虽大3167 次但它是在探测/druid/sql.html、/dump、/heapdump等敏感路径返回 404属于信息收集/扫描并没有成功注入拿到数据而 192.168.1.100 是对 login.php 的实际 SQL 注入。第 2 步定位注入成功、提取数据的请求通过查看日志发现注入手法多样UNION 联合注入、布尔盲注、时间盲注、EXTRACTVALUE 报错注入最终攻击者成功读到了数据。使用python脚本筛选攻击者192.168.1.100的请求,URL 解码后需要匹配FROM 库名.表名结构,输出成功查询数据表的注入语句,从而定位数据库名。import re from urllib.parse import unquote data open(access.log, encodingutf-8).readlines() # 只筛攻击者 IP 192.168.1.100 # 匹配 FROM 库名.表名不区分大小写并对整行做 URL 解码 pat re.compile(rFROM\s\w\.\w, re.IGNORECASE) seen set() # 用于去重 print(\n注入语句中带\FROM 库.表\这个特征日志行如下\n) for line in data: line line.strip() if not line: continue ip line.split()[0] if ip ! 192.168.1.100: continue decoded unquote(line) # URL 解码整行还原 SQL 语句 if pat.search(decoded): if decoded in seen: # 去掉重复的注入请求 continue seen.add(decoded) print(decoded)第 3 步提取数据库名注入语句中数据表以库名.表名形式被引用FROM login_db.secret→ 表secretFROM login_db.users→ 表users两者都隶属于同一个库login_db。⚠️注意题目要的是数据库名不是表名login_db是库名secret和users是库里的表。攻击过程还原攻击者192.168.1.100对/test/login.php的用户名字段发起 SQL 注入通过 UNION / 报错 / 盲注确认存在注入点枚举information_schema找到数据库结构从login_db库的secret、users表提取敏感数据造成泄露 最终 Flagflag{login_db}