文章总结: 本文通过CTF应急响应赛题完整复现攻击链:攻击者利用search.php的SQL注入漏洞提取数据库凭证,通过密码复用爆破FTP服务获取敏感文件,最终利用lostandfound.php文件上传漏洞部署冰蝎Webshell。文档详细展示了日志分析、流量溯源和数据库取证的全过程,并提供PDO预编译、文件上传白名单等修复建议,全程借助AI工具提升响应效率。 综合评分: 87 文章分类: 应急响应,CTF,漏洞分析,实战经验,WEB安全
AI 搞定全程溯源应急响应
原创
Andy Andy
实在安全
2026年4月23日 14:12 中国香港
在小说阅读器读本章
去阅读
本文以一道 CTF 应急响应赛题为主线,借助 AI Agent + linux-ir 技能,完整复现攻击者从信息窃取、密码复用到上传 Webshell 的完整攻击链。三道题目涵盖日志分析、流量溯源、数据库取证,全程约 30 分钟完成解题,适合安全从业者和 CTF 选手参考。
背景
靶机通过 SSH 对外暴露,环境内部署了一套公交系统 PHP Web 应用,运行 Apache + MariaDB,并开放了 FTP 服务。
题目要求回答三个问题:
- 1. 分析中间件日志,找到黑客获取数据的第一个漏洞,并提取其窃取的前两个用户名
- 2. 分析流量,找到黑客密码复用爆破的 FTP 端口,并提交黑客下载的私密文件内容
- 3. 找到黑客上传的 Webshell 文件,提交其密码
环境踩点
登录靶机后,首先进行基础信息采集:
uname -a # Linux 5.15 / Ubuntu 22.04
cat /etc/os-release
ls /var/www/html/public/
# index.php search.php lost_and_found.php uploads/
关键目录:
- • Web 根目录:
/var/www/html/public/ - • 日志路径:
/access.log(同步挂载自/var/log/apache2/access.log) - • 流量文件:
/result1.pcap(19.6 MB)
Q1:SQL 注入漏洞溯源 + 数据提取
日志特征识别
grep -i "sqlmap" /access.log | head -5
日志中出现大量如下特征请求:
[攻击者IP] - - [22/Apr/2025] "GET /search.php?query=JyBBTkQgU0xFRVAoNSk... HTTP/1.1" 200 - "sqlmap/1.9#stable"
User-Agent 明确标注 sqlmap/1.9#stable,请求参数为 Base64 编码字符串。解码后:
import base64, urllib.parse
raw = urllib.parse.unquote("JyBBTkQgU0xFRVAoNSk...")
print(base64.b64decode(raw).decode())
# ' AND SLEEP(5)--
典型的时间盲注特征。
漏洞代码定位
查看 search.php 源码:
// /var/www/html/public/search.php
$encoded_query = $_GET['query'] ?? '';
$decoded_query = base64_decode($encoded_query);
$sql = "SELECT * FROM routes WHERE route_name = '" . $decoded_query . "'";
$result = $conn->query($sql);
问题根因:query 参数经 Base64 解码后直接拼接进 SQL 语句,无任何过滤或参数化处理。Base64 只是障眼法,无法防止注入。
sqlmap 提取顺序还原
通过分析 pcap 中 sqlmap 的时间盲注 payload,发现其数据提取语句使用了:
SELECT IFNULL(CAST(username AS NCHAR),0x20)
FROM bus_system.bus_drivers
ORDER BY password LIMIT 0,1
关键点:sqlmap 按 password 字段字母序排列提取,而非主键顺序。
登录数据库验证:
mysql -u root bus_system -e \
"SELECT username, password FROM bus_drivers ORDER BY password LIMIT 5;"
username password
sunyue 888888
chenhao Ch@19980808
changyuan cy1988
fengjuan fengjuan88
gaoxiang gx_fly
✅ Q1 答案:黑客获取的前两个用户名为
sunyue和chenhao
Q2:FTP 密码复用爆破 + 私密文件提取
确认 FTP 端口
标准端口 21 在 pcap 中均为 RST,ACK,端口处于关闭状态。
使用 tshark 分析非标准端口流量:
TSHARK=/Applications/Wireshark.app/Contents/MacOS/tshark
$TSHARK -r /tmp/result1.pcap \
-d tcp.port==2121,ftp \
-Y "ftp" \
-T fields -e tcp.stream -e ftp.request.command -e ftp.request.arg \
2>/dev/null | head -30
输出包含大量 USER / PASS 命令,且均来自端口 2121,特征:
- • 短时间内大量并发连接(Hydra 风格)
- • 多账号轮询尝试(
sunyue、chenhao、zhangwei、wangqiang…)
这些账号正是从 bus_drivers 表中 sqlmap 提取的凭证——密码复用攻击。
成功登录确认
$TSHARK -r /tmp/result1.pcap \
-d tcp.port==2121,ftp \
-Y "ftp.response.code == 230" \
-T fields -e tcp.stream -e ftp.response.arg \
2>/dev/null
Login successful. # zhangwei / zhangwei123
Login successful. # wangqiang / wq2024
追踪 PASV 数据流
登录成功后,攻击者执行了 RETR sensitive_credentials.txt。
FTP 被动模式(PASV)下服务端返回:
227 Entering Passive Mode (xxx,xxx,xxx,xxx,195,85)
数据端口计算:195 × 256 + 85 = 50005
追踪 TCP 流 7076(端口 50005)的原始数据:
$TSHARK -r /tmp/result1.pcap \
-Y "tcp.stream == 7076" \
-T fields -e data.text 2>/dev/null
输出:
INTERNAL_FTP_ADMIN_PASSWORD=FtpP@ssw0rd_For_Admin_Backup_2025
✅ Q2 答案:FTP 开放端口为
2121,文件内容为INTERNAL_FTP_ADMIN_PASSWORD=FtpP@ssw0rd_For_Admin_Backup_2025
Q3:Webshell 溯源 + 密码提取
日志定位上传行为
grep "POST" /access.log | grep -v "200\|302" | head
grep "uploads" /access.log | tail -20
关键日志条目:
[攻击者IP] - - "POST /lost_and_found.php HTTP/1.1" 200 -
[攻击者IP] - - "POST /uploads/shell1.php HTTP/1.1" 200 -
攻击路径清晰:lost_and_found.php 存在任意文件上传漏洞,攻击者上传了 shell1.php 并随即访问执行。
Webshell 文件分析
cat /var/www/html/public/uploads/shell1.php
<?php
@session_start();
@set_time_limit(0);
@error_reporting(0);
function encode($D, $K) {
for ($i = 0; $i < strlen($D); $i++) {
$c = $K[$i + 1 & 15];
$D[$i] = $D[$i] ^ $c;
}
return $D;
}
$pass = 'woaiwojia';
$payloadName = 'payload';
$key = '3c6e0b8a9c15224a';
// XOR 解密 payload,动态执行
if (isset($_POST[$pass])) {
$data = encode(base64_decode($_POST[$pass]), $key);
// ...
}
这是典型的**冰蝎(Behinder)**风格 Webshell:
- • 通信内容经 XOR 加密后 Base64 编码,绕过流量检测
- • 密码字段为
$pass,值为明文字符串
✅ Q3 答案:Webshell 路径
/uploads/shell1.php,密码为woaiwojia
完整攻击链复盘
[信息收集]
└─ 访问 /search.php,发现 query 参数(Base64 编码)
[漏洞利用 - SQL 注入]
└─ sqlmap 时间盲注 → 提取 bus_drivers 表
└─ 按 password 字段排序 → 首先获取 sunyue / chenhao
[密码复用 - FTP 爆破]
└─ 用数据库凭证爆破非标端口 2121
└─ 成功登录 zhangwei / wangqiang
└─ RETR sensitive_credentials.txt → 获取内网 FTP 管理密码
[持久化 - Webshell 上传]
└─ 发现 lost_and_found.php 任意文件上传漏洞
└─ 上传冰蝎 Webshell → /uploads/shell1.php
└─ 密码: woaiwojia,XOR 加密通信
修复建议
| 漏洞 | 风险等级 | 修复方案 |
| — | — | — |
| SQL 注入(search.php) | 🔴 Critical | 使用 PDO 预编译语句,禁止字符串拼接 SQL |
| 任意文件上传(lost_and_found.php) | 🔴 Critical | 白名单校验扩展名 + 存储路径与 Web 根目录隔离 |
| FTP 弱密码 / 密码复用 | 🟠 High | 启用独立强密码策略,禁止 FTP 使用 Web 账号密码 |
| FTP 非标端口无鉴权监控 | 🟡 Medium | 部署 IDS/IPS 对 FTP 暴力破解行为告警 |
| Webshell 驻留 | 🔴 Critical | 立即删除 /uploads/shell1.php,审计全量上传文件 |
工具链与方法论
本次分析主要使用:
- • linux-ir 技能:结构化应急响应流程,覆盖日志、进程、持久化、文件排查
- • tshark(Wireshark CLI):解码非标端口 FTP(
-d tcp.port==2121,ftp),追踪 PASV 数据流 - • Python3:Base64 + URL decode 还原 sqlmap payload,辅助解析提取顺序
- • mysql CLI:直接查询数据库验证 sqlmap 提取的数据顺序
整个分析流程由 AI Agent(Claude + Cascade) 驱动,从日志分析、pcap 解码到数据库取证,全程自动化执行,显著提升应急响应效率。
已关注
关注
重播 分享 赞
关闭
观看更多
更多
退出全屏
切换到竖屏全屏退出全屏
实在安全已关注
分享视频
,时长13:53
0/0
00:00/13:53
切换到横屏模式
继续播放
[ ]
进度条,百分之0
播放
00:00
/
13:53
13:53
倍速
全屏
倍速播放中
0.5倍 0.75倍 1.0倍 1.5倍 2.0倍
超清 流畅
继续观看
AI 搞定全程溯源应急响应
观看更多
转载
,
AI 搞定全程溯源应急响应
实在安全已关注
分享点赞在看
已同步到看一看写下你的评论
视频详情
本文所有操作均在授权 CTF 靶场环境中完成,严格遵守相关法律法规。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:实在安全 Andy Andy《AI 搞定全程溯源应急响应》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








![[技术深浅]AD域渗透攻击链全解](/images/random/titlepic/14.jpg)
评论