2026-09-17
应急响应与流量分析
00
请注意,本文编写于 58 天前,最后修改于 58 天前,其中某些信息可能已经过时。

目录

目录
一、什么是应急响应
靶机/比赛环境下的常见题型
排查前的一个铁律
二、万能排查总流程(六步法)
三、Linux 靶机排查全流程
3.0 第一步:摸底系统信息
3.1 检查账号安全(有没有人进来)
3.2 检查历史命令
3.3 检查异常端口与网络连接
3.4 检查持久化(开机自启 & 定时任务)—— 最容易藏后门的地方
3.5 检查可疑文件
3.6 Rootkit 检测工具
3.7 Linux 常见日志位置一览表(必背)
四、Windows 靶机排查全流程
4.1 系统信息与账号安全
4.2 端口与进程
4.3 启动项、计划任务、服务(持久化三件套)
4.4 文件排查
4.5 事件日志分析(Windows 排查的核心)
4.6 Windows 常用排查工具
五、Web 服务日志排查(Nginx / Apache / Tomcat / IIS)
5.1 日志位置
5.2 看懂日志格式(Nginx/Apache combined 格式)
5.3 万能分析命令(Linux 下实战)
5.4 攻击特征关键词(grep 速查)
5.5 工具
5.6 Webshell 排查
六、数据库排查(MySQL / Redis)
6.1 MySQL 应急排查
6.2 Redis 应急排查(未授权访问是重灾区)
6.3 数据库侧的"关联排查"
七、常见事件场景速查
7.1 挖矿病毒(CPU 100% 类题)
7.2 SSH/RDP 爆破
7.3 Web 入侵 / webshell
7.4 后门账号 / 权限维持
7.5 勒索软件
八、靶机答题套路与答题模板
通用作答流程
一页纸速查(比赛时的 Cheat Sheet)
九、常用工具清单
十、参考资料

适用场景:CTF 比赛(长城杯/铁三/玄机/知攻善防等)应急响应赛题、企业真实入侵排查。


目录

一、什么是应急响应

应急响应(Incident Response):当服务器已经被入侵(被挖矿、被植入 webshell、被爆破、被挂马……)之后,安全人员要做的几件事:

  1. 确认是否真的被入侵(排除误报);
  2. 找出攻击者是谁(IP、账号、时间);
  3. 找出攻击者怎么进来的(漏洞入口:弱口令?web 漏洞?Redis 未授权?);
  4. 找出攻击者在里面干了什么(webshell、后门、挖矿脚本、新建账号、公钥);
  5. 清除后门、加固系统(考试里通常是"查杀"得分点)。

靶机/比赛环境下的常见题型

比赛里通常给你一台被打穿的服务器(Linux 或 Windows 的虚拟机镜像 / 远程 SSH 桌面),让你回答类似问题:

常见题目问法答案藏在哪
攻击者的 IP 是什么?web 日志、secure/auth 日志、last、爆破记录
攻击者登录的账号/密码?攻击者创建的后门账号、日志里的成功登录
攻击的时间?日志时间戳、文件创建/修改时间
webshell 文件路径 / 内容 / MD5?web 目录 find、D 盾/河马扫描结果
挖矿程序的路径 / 矿池地址?高 CPU 进程、计划任务、其配置文件
后门账号的名字?/etc/passwd、net user、隐藏账号
篡改的网页在哪里?web 目录 mtime、index 文件

排查前的一个铁律

先取证,后清除。 进程、网络连接、内存这些"易失性数据"关机就没了,一定要先记录、保存证据,再删除。考试里要先找到答案(截屏/记下来),再去杀进程删文件。


二、万能排查总流程(六步法)

这是最经典的排查框架(源自 Bypass007《应急响应实战笔记》),Linux 和 Windows 都通用:

① 检查系统账号安全 —— 有没有陌生账号、后门账号、隐藏账号 ② 检查异常端口、进程 —— 有没有奇怪的网络连接、高 CPU 进程 ③ 检查启动项/计划任务/服务 —— 持久化(开机自启)藏在哪里 ④ 检查文件 —— webshell、可疑二进制、临时目录 ⑤ 检查日志 —— 还原攻击时间线(谁、何时、从哪、干了啥) ⑥ 清除加固 —— 杀进程、删文件、修漏洞、改密码

小白记忆法:账号 → 进程端口 → 自启 → 文件 → 日志 → 清除。 攻击者进来后一定会:留账号或留公钥、跑进程连外网、设置开机自启、留文件。四个方向挨个查就不会漏。


三、Linux 靶机排查全流程

3.0 第一步:摸底系统信息

bash
uname -a # 系统版本、内核版本(老内核可能有提权漏洞) cat /etc/os-release # 发行版 hostname # 主机名 date # 当前时间(对日志时间线很重要,注意时区) who / whoami # 当前登录的用户 history # 当前用户的历史命令(重点!)

3.1 检查账号安全(有没有人进来)

bash
cat /etc/passwd # 看所有用户,重点看 uid=0 的非 root 账号 awk -F: '$3==0{print $1}' /etc/passwd # 找出所有 uid=0 的账号(正常只有 root) awk -F: '$7=="/bin/bash" || $7=="/bin/sh"' /etc/passwd # 能登录 shell 的账号 cat /etc/shadow # 密码哈希,看哪些账号有密码、哪些被加了密码 last # 登录成功记录(来自 /var/log/wtmp) lastb # 登录失败/爆破记录(来自 /var/log/btmp),文件可能巨大 lastlog # 每个用户最后一次登录时间 who # 当前在线用户

重点排查项:

  • 有没有名字奇怪的新增账号(如 hacker、mysql2、带 $ 的隐藏账号);
  • 有没有伪装成系统账号但 uid=0 且带 shell 的账号;
  • last 里有没有陌生 IP 在凌晨/异常时间登录成功;
  • SSH 公钥后门:每个用户的 ~/.ssh/authorized_keys 都要看:
bash
cat /root/.ssh/authorized_keys ls -la /home/*/.ssh/ for f in $(ls /home); do echo "== $f =="; cat /home/$f/.ssh/authorized_keys 2>/dev/null; done
  • 登录相关日志:
bash
grep "Accepted" /var/log/secure # CentOS/RHEL:成功登录(IP、端口、时间) grep "Failed password" /var/log/secure # 爆破失败记录 grep "Accepted" /var/log/auth.log # Ubuntu/Debian 对应路径 # 统计爆破源 IP TOP 10 grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -rn | head

3.2 检查历史命令

bash
history # 当前用户 cat /root/.bash_history # root 的历史命令 cat /home/*/.bash_history # 其他用户的历史命令

历史命令是"还原攻击者行为"的金矿:能看到他下载了什么(wget/curl)、编译了什么(gcc)、加了什么账号(useradd)、写了什么文件(echo > /...)。注意攻击者可能 history -c 清空,此时去对比文件修改时间和其他日志。

3.3 检查异常端口与网络连接

bash
netstat -antlp # 所有 TCP 连接 + 监听端口 + 对应进程(-p 要 root) netstat -anulp # UDP ss -antlp # 更快的替代命令(新系统 netstat 可能没装) lsof -i :8888 # 看某个端口被谁占用 lsof -p <PID> # 某进程打开了哪些文件/端口

怎么判断"异常"连接:

  • 对外连接 4444、8888、9999 等非常用高位端口(反弹 shell 常用);
  • 连接国外陌生 IP(矿池、C2)、或者内网中明明不该联网的机器在连外网;
  • ESTABLISHED 状态但进程名很怪。

确认可疑进程后:

bash
ps -ef | grep <PID> # 看进程完整命令行 ps aux --sort=-%cpu | head # CPU 占用 TOP(挖矿必查!) top # 动态看,按 1 看每个核 ls -l /proc/<PID>/exe # 进程对应的可执行文件真实路径(进程删了文件也指向它) ls -l /proc/<PID>/cwd # 进程的工作目录 cat /proc/<PID>/cmdline # 启动命令 strings /proc/<PID>/exe | grep -i pool # 在二进制里找矿池地址(stratum+tcp://) kill -9 <PID> # 确认后再杀(先取证!)

3.4 检查持久化(开机自启 & 定时任务)—— 最容易藏后门的地方

定时任务(挖矿病毒最爱):

bash
crontab -l # 当前用户定时任务 crontab -l -u root # root 的 ls -la /etc/cron.d/ /etc/cron.daily/ /etc/cron.hourly/ /etc/cron.weekly/ cat /etc/crontab cat /var/spool/cron/* # 所有用户的 crontab 文件实体(RHEL 系) cat /var/spool/cron/crontabs/* # Debian 系 grep -r "curl\|wget\|http" /etc/cron* /var/spool/cron/ # 找下载型任务

经典手法:攻击者用定时任务"守护"挖矿进程——你 kill 了进程,定时任务过几分钟又把它拉起来。所以先删定时任务,再杀进程。

开机自启:

bash
systemctl list-unit-files --state=enabled # 已启用的服务 systemctl list-timers # 定时器(新一代"计划任务") cat /etc/rc.local /etc/rc.d/rc.local # 开机脚本 ls /etc/init.d/ # 传统 init 服务 cat /etc/systemd/system/*.service # 自定义服务文件,看 ExecStart 指向哪 ls -la /etc/profile.d/ # 登录时加载的脚本

其他常见持久化点(逐个检查):

bash
# SSH 软链接后门 / 恶意配置 cat /etc/ssh/sshd_config | grep -i authorized # 环境变量后门 cat /etc/profile /etc/bashrc /root/.bashrc /root/.bash_profile # SUID 提权后门 find / -perm -4000 -type f 2>/dev/null # 动态库劫持后门(preload 一个 so,很多挖矿用它隐藏进程) cat /etc/ld.so.preload 2>/dev/null # 内核模块 rootkit lsmod

3.5 检查可疑文件

bash
# 按时间找(结合日志里攻击者活动的时间段) find / -mtime 0 -type f 2>/dev/null # 24小时内改动的文件 find / -ctime -1 -type f -name "*.sh" 2>/dev/null find /tmp /var/tmp /dev/shm -type f 2>/dev/null # 临时目录(恶意文件最爱待的地方) find / -size +100M -type f 2>/dev/null # 大文件 find / -name "*.sh" -newer /etc/passwd 2>/dev/null # 比 passwd 新建的 sh # 找 webshell(第 5 章有详细版) find /var/www -name "*.php" -mtime -7 2>/dev/null # 文件取证 stat <文件> # 创建/修改/访问时间 file <文件> # 文件类型 md5sum <文件> # 求 MD5(比赛常要提交) strings <文件> | grep -i "http\|pool\|passwd" # 抽取可读字符串找 C2/矿池

/proc/<PID>/exe 的妙用:恶意进程运行时删除了自己的文件,ls -l /proc/PID/exe 仍指向那个文件(带 (deleted)),可以 cat 或复制出来分析。

3.6 Rootkit 检测工具

bash
# rkhunter:rootkit 检测(安全客推荐) rkhunter --check # chkrootkit chkrootkit # 检查系统命令是否被替换(对比包管理器) rpm -Va # RHEL/CentOS:校验所有 rpm 包文件 dpkg -V # Debian/Ubuntu

如果 ps、ls、netstat 等命令本身被替换(看命令输出正常但实际藏着恶意进程),说明中了用户态 rootkit——可以用 busybox 的静态命令交叉验证,或直接上 LD_PRELOAD 检查(见 3.4)。

3.7 Linux 常见日志位置一览表(必背)

日志路径内容
登录成功/失败/var/log/secure(RHEL)/ /var/log/auth.log(Debian)SSH 登录、sudo、su
登录成功记录/var/log/wtmp用 last 读(二进制)
爆破记录/var/log/btmp用 lastb 读
最后登录/var/log/lastlog用 lastlog 读
系统消息/var/log/messages / journalctl服务启停、内核
定时任务日志/var/log/croncrontab 执行记录
Web 日志/var/log/nginx/、/var/log/httpd/、/var/log/apache2/见第 5 章
MySQL 日志/var/log/mysqld.log、/var/log/mysql/见第 6 章
邮件日志/var/log/maillog
历史命令~/.bash_history

常用日志分析命令:

bash
tail -100 /var/log/secure # 看最后 100 行 grep "sshd" /var/log/secure # 过滤 SSH 相关 grep -v "Failed" /var/log/secure # 反向过滤 awk '{print $1}' file | sort | uniq -c | sort -rn | head # 万能统计:某列 TOP10 journalctl --since "2026-09-01" --until "2026-09-13" # 按时间过滤系统日志

四、Windows 靶机排查全流程

4.1 系统信息与账号安全

cmd
systeminfo # 系统版本、补丁(KB 编号)、启动时间 net user # 列出所有用户 net user Administrator # 看某用户详情(最后登录时间、组) net localgroup administrators # 管理员组里有哪些人(重点!) lusrmgr.msc # 图形界面管理本地用户和组 query user / qwinsta # 当前登录会话(RDP 在线用户)

隐藏账号排查(结尾带 $ 的账号 net user 看不到):

  • 打开 lusrmgr.msc 图形界面对比;
  • 或查注册表:regedit → HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names (SAM 默认不可见,需要用 D 盾/psexec -s -i regedit 提权查看);
  • 克隆账号检测:D 盾一键检测(对比每个用户的 F 值)。

4.2 端口与进程

cmd
netstat -ano # 所有连接 + PID(-n 数字显示 -o 显示 PID) netstat -ano | findstr "ESTABLISHED" # 只看已建立的连接 netstat -ano | findstr "4444" # 查反弹 shell 常见端口 tasklist # 进程列表 tasklist | findstr "1234" # 用 netstat 查到的 PID 定位进程名 tasklist /svc # 进程与服务对应关系 wmic process get name,processid,commandline # 进程完整命令行(很重要!) tasklist /m # 进程加载的 DLL

判断可疑进程的要点:

  • 路径异常:正常系统进程都在 C:\Windows\System32,如果 svchost.exe 跑在 C:\Users\xxx\ 下必有问题;
  • 无签名、名字像系统进程但拼写不对(如 svch0st.exe、expl0rer.exe);
  • 用 Process Explorer(procexp)看进程树、验证签名、查 VirusTotal。
cmd
taskkill /PID 1234 /F # 强杀进程(先取证再杀!) wmic process where processid=1234 delete schtasks /query /v # 计划任务(下一节)

4.3 启动项、计划任务、服务(持久化三件套)

cmd
:: 启动项 msconfig # 图形界面 shell:startup # 运行框输入,直接打开"启动"文件夹 shell:common startup # 所有用户的启动文件夹 reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run reg query HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run :: 计划任务 taskschd.msc # 图形界面 schtasks /query /fo LIST /v # 命令行列出所有计划任务详情 :: 服务 services.msc # 图形界面 net start # 正在运行的服务 sc query # 同上 wmic service get name,pathname,startmode # 服务的可执行路径(找路径异常的)

工具推荐:Autoruns(Sysinternals)——一键列出所有自启动位置,比手工查全得多。

4.4 文件排查

重点目录:

C:\Users\<用户>\AppData\Roaming\ C:\Users\<用户>\AppData\Local\Temp\ (临时目录,恶意文件常驻) C:\ProgramData\ C:\Windows\Temp\ C:\Users\Public\ 回收站

常用命令:

cmd
dir /s /a /q C:\Users\*\AppData\Local\Temp\* # 含隐藏文件 forfiles /m *.exe /d 2026/9/1 /s /p C:\ /c "cmd /c echo @path @fdate @ftime" # 按日期找 exe

按时间段找攻击者放的马:右键文件→属性看"创建时间/修改时间",或用 Everything 按日期过滤。拿到可疑文件后算 MD5:certutil -hashfile 文件名 MD5。

4.5 事件日志分析(Windows 排查的核心)

打开方式:Win+R → eventvwr.msc,重点看 Windows 日志 → 安全/系统。

必背事件 ID:

ID含义应急意义
4624登录成功看登录 IP、账号、类型
4625登录失败爆破分析:同一 IP 大量 4625 = 被爆破
4720创建用户账号攻击者留后门账号
4722/4724/4726启用/重置/删除账号
4732/4728成员被加入本地组/全局组提权行为
7045安装了新服务恶意服务后门
1102清理审计日志攻击者删日志
4698/4699计划任务创建/删除
6005/6006开机/关机时间线参考

登录类型(4624 事件里的 Logon Type):

类型含义
2本机交互登录
3网络登录(SMB 共享等)
10RDP 远程桌面登录(RDP 爆破成功就看这个)
5服务登录

用 PowerShell 快速统计爆破:

powershell
Get-WinEvent -FilterHashtable @{LogName='Security';Id=4625} -MaxEvents 1000 | ForEach-Object { $_.Properties[19].Value } | Group-Object | Sort-Object Count -Descending | Select -First 10

Log Parser 分析日志(经典工具,SQL 语法查事件日志):

cmd
LogParser.exe -i:EVT "SELECT TimeGenerated,EXTRACT_PREFIX(TokenAndPriviliges,',',0) AS User,EXTRACT_PREFIX(Message,1,'源网络地址') AS IP FROM Security.evtx WHERE EventID=4624" -o:CSV

也可把 evtx 日志拷出来用 360 星图、Event Log Explorer 等工具离线分析。

4.6 Windows 常用排查工具

工具用途
D 盾webshell 查杀 + 隐藏账号检测(国产行政常用)
河马(HiSQL/Hema)webshell 查杀webshell 扫描
火绒 / 火绒剑病毒查杀 + 行为分析
Process Explorer / Process Monitor进程分析 / 文件注册表行为监控
Autoruns全量自启动项
Log Parser事件日志 SQL 查询
PCHunter / System Informer类似 procexp 的手工查杀利器
卡巴斯基绿色版(KVRT)应急杀毒

五、Web 服务日志排查(Nginx / Apache / Tomcat / IIS)

5.1 日志位置

服务默认日志位置
Nginx/var/log/nginx/access.log、error.log(配置在 nginx.conf 的 log_format / access_log)
Apache (RHEL)/var/log/httpd/access_log、error_log
Apache (Debian)/var/log/apache2/access.log、error.log
Tomcat$CATALINA_HOME/logs/localhost_access_log.*.txt、catalina.out
IISC:\inetpub\logs\LogFiles\W3SVC1\(或 %SystemDrive%\inetpub\logs)
宝塔面板/www/wwwlogs/

第一步永远是确认真实日志路径:看配置文件 grep -r "access_log" /etc/nginx/。

5.2 看懂日志格式(Nginx/Apache combined 格式)

192.168.1.100 - - [13/Sep/2026:10:23:45 +0800] "GET /login.php?user=admin HTTP/1.1" 200 1234 "http://refer" "Mozilla/5.0..." └─ $remote_addr └─ 时间 └─ $request(方法+URL) └─ $status └─ $body_bytes_sent └─ $http_user_agent

5.3 万能分析命令(Linux 下实战)

bash
# ★ 访问量 TOP10 的 IP(判断爆破/扫描/CC) awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10 # ★ 看某个 IP 到底干了什么(有可疑 IP 后必做) grep "1.2.3.4" access.log | less # ★ 该 IP 访问过的 URL 去重 grep "1.2.3.4" access.log | awk '{print $7}' | sort | uniq -c | sort -rn # ★ 状态码统计(大量 404 = 扫描;大量 500 = 打到了漏洞) awk '{print $9}' access.log | sort | uniq -c | sort -rn # ★ 只看成功登录(找爆破成功的那一条) grep "1.2.3.4" access.log | awk '$9==200' # 统计访问最多的 URL awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -20 # 统计某个时间段(结合攻击时间) grep "13/Sep/2026:10:" access.log # 查看 UA(sqlmap 等工具 UA 很明显) awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -rn | head

5.4 攻击特征关键词(grep 速查)

bash
# SQL 注入特征 grep -E "union|select|and 1=1|or 1=1|'--|information_schema|sleep\(|benchmark\(" access.log # XSS 特征 grep -E "<script|onerror|onload|javascript:|alert\(" access.log # 命令执行 / 文件包含 grep -E "exec|system|passthru|phpinfo|proc\.open|cat%20/etc/passwd|\.\/\.\.\/" access.log # 常见扫描器 User-Agent(必查!扫描器 IP 往往就是攻击者 IP) grep -iE "sqlmap|nikto|nessus|nmap|awvs|acunetix|dirsearch|gobuster|fuzz" access.log # webshell 访问特征(连上后门文件的 POST 请求) grep -E "\.php\?cmd=|eval|assert|base64_decode|gzinflate" access.log # 反序列化 / 常见漏洞 payload grep -E "rmi://|ldap://|jndi|Runtime|OGNL" access.log

标准溯源思路:

  1. 先统计 TOP IP → 发现访问量异常的 IP;
  2. grep 该 IP 看它完整请求序列(从扫描→打漏洞→getshell→连 webshell);
  3. 找到它 POST 的可疑路径(如 /uploads/shell.php)→ 对应 web 目录找到 webshell 文件;
  4. 由 webshell 上传时间反查:那段时间 web 日志里它上传了什么、又访问了什么;
  5. 结合系统日志(secure/auth)看它是否后续 SSH 登录。

5.5 工具

bash
# GoAccess:实时可视化日志分析(推荐) goaccess -f /var/log/nginx/access.log --log-format=COMBINED goaccess -f access.log --log-format=COMBINED -o report.html # 输出 HTML 报表

其他:360 星图、ELK、nginxpulse。

5.6 Webshell 排查

bash
# 找最近 N 天新建/修改的脚本文件(知道攻击时间时最有用) find /var/www -name "*.php" -mtime -7 2>/dev/null find /var/www -name "*.jsp" -o -name "*.jspx" -mtime -7 2>/dev/null # 按特征搜代码 grep -rn --include="*.php" -E "eval\(|assert\(|system\(|exec\(|shell_exec|passthru|base64_decode\(" /var/www/ grep -rn --include="*.jsp" -E "Runtime.getRuntime|ProcessBuilder|request.getParameter" /var/www/ grep -rn --include="*.aspx" -E "Process.Start|eval" /var/www/ # 找隐藏/奇怪命名的文件 find /var/www -name ".*" -type f find /var/www -size 0 -o -name "*1*.php" -name "*x*.php"

webshell 一句话木马常见形态:

php
<?php @eval($_POST['cmd']); ?> # 经典一句话 <?php assert($_REQUEST['a']); ?> # assert 变形 <?php $a=str_replace(...); eval($a); ?> # 变形/加密马(用 D 盾/河马扫)

排查要点:正常网站文件不会出现 eval($_POST);同时看文件修改时间是否与日志中的攻击时间吻合。


六、数据库排查(MySQL / Redis)

6.1 MySQL 应急排查

查看日志配置:

sql
show variables like '%log%'; -- 所有日志相关变量 show variables like 'general_log%'; -- 查询日志开关和路径 show variables like 'slow_query%'; -- 慢查询日志 show variables like 'log_error%'; -- 错误日志 show variables like 'datadir%'; -- 数据目录

常见日志文件位置(Linux):

日志说明位置
错误日志启动/运行错误/var/log/mysqld.log(RHEL)/ /var/log/mysql/error.log(Debian)
general_log记录每一条 SQL 与连接(应急取证神器,默认关闭)由 general_log_file 决定
慢查询日志超 long_query_time 的 SQLslow_query_log_file
binlog数据变更记录log_bin 决定

应急时开启 general_log 取证(实时记录攻击者的 SQL):

sql
SET GLOBAL general_log = 'ON'; SET GLOBAL general_log_file = '/tmp/mysql_general.log'; -- 让攻击者复现一遍攻击,然后 cat /tmp/mysql_general.log 逐条看 SET GLOBAL general_log = 'OFF'; -- 取证完记得关

MySQL 常见被入侵的方式与排查:

  1. 弱口令爆破:看 general_log / 错误日志里的连接记录;配合系统日志、web 日志找来源 IP;
  2. 写 webshell:secure_file_priv 未限制时,攻击者可 SELECT '<?php @eval($_POST[1]);?>' INTO OUTFILE '/var/www/html/shell.php'; → 去 show variables like 'secure_file_priv'; 看配置,去对应目录找新增 php 文件;
  3. UDF 提权:攻击者上传 udf.so 后 CREATE FUNCTION sys_exec ... 执行系统命令 → 排查:SELECT * FROM mysql.func;、在插件目录(plugin_dir)找可疑 .so/.dll;
  4. 蜜罐假 MySQL:攻击者连"假 mysql"后被读取本机文件(黑客视角的攻击,应急时注意有这类场景题)。

排查完加固:改强密码、限制远程 root、bind-address 内网、secure_file_priv=NULL、删可疑 func。

6.2 Redis 应急排查(未授权访问是重灾区)

Redis 若无密码且绑定了 0.0.0.0,攻击者可以直接远程操作,最经典的三种利用:

  1. 写 SSH 公钥(对应攻击者 ~/.ssh/authorized_keys 后门):
    CONFIG SET dir /root/.ssh/ CONFIG SET dbfilename authorized_keys SET x "\n\nssh-rsa AAAA...公钥...\n\n" SAVE
  2. 写计划任务反弹 shell:CONFIG SET dir /var/spool/cron/、dbfilename root;
  3. 写 webshell:CONFIG SET dir /var/www/html/、dbfilename shell.php。

应急排查命令:

bash
redis-cli > INFO clients # 当前连接的客户端 > CLIENT LIST # ★ 每个客户端的来源 IP(找攻击者 IP) > CONFIG GET dir # 当前持久化目录(被改过就是证据) > CONFIG GET dbfilename # 持久化文件名 > MONITOR # 实时查看所有命令(抓现行) > SLOWLOG GET # 慢查询日志,也能看到历史命令痕迹 > CONFIG GET requirepass # 有没有密码

对应系统侧排查:

bash
cat /root/.ssh/authorized_keys # 有没有陌生公钥 ls -la /var/spool/cron/ && cat /var/spool/cron/root # 有没有写进计划任务 find / -name "authorized_keys" -newer /etc/passwd crontab -l

加固:requirepass 强密码、bind 127.0.0.1、改默认端口、禁止 CONFIG SET(rename-command)、低权限用户运行。

6.3 数据库侧的"关联排查"

比赛里数据库题经常和 web 日志联动:web 日志看到攻击者 IP → 数据库日志里同一时间出现他的连接 → 他执行了写文件的 SQL → web 目录出现 shell。把三边的时间线对齐,就是完整攻击链,也是答题的关键。


七、常见事件场景速查

7.1 挖矿病毒(CPU 100% 类题)

① top / ps aux --sort=-%cpu → 找出吃 CPU 的进程(常见名:kdevtmpfsi、kinsing、xmrig、minerd、systemd 等伪装名) ② ls -l /proc/<PID>/exe → 定位恶意文件真实路径(可能 (deleted)) ③ lsof -p <PID> / netstat -antlp → 找矿池连接(外连 IP,stratum+tcp 协议) ④ crontab -l / /etc/cron* / systemctl list-timers → 找守护下载的定时任务(先删!) ⑤ ls /etc/ld.so.preload;cat 它 → 找隐藏进程用的 so(很多挖矿带这个) ⑥ 查下载源:/var/log/* 、history、web 日志里找 wget/curl 的 URL → 定位入侵入口(常是 Redis 未授权/web 漏洞/RDP 爆破) ⑦ 清除:删定时任务 → 杀进程 → 删文件 → 清公钥 → 修入口漏洞 ⑧ 求证 MD5:md5sum 恶意文件(答题常要)

7.2 SSH/RDP 爆破

  • Linux:lastb 统计爆破 IP;grep "Accepted" /var/log/secure 找成功那条 = 攻击者 IP + 时间 + 账号;
  • Windows:安全日志 4625(失败)统计源 IP;4624 LogonType=10(成功 RDP)找爆破成功记录;
  • 溯源后加固:改密码、fail2ban、禁 root 远程登录、RDP 改端口+限制 IP。

7.3 Web 入侵 / webshell

见第 5.6 节。核心是日志时间 + 文件时间 + 扫描工具三线合一。

7.4 后门账号 / 权限维持

  • Linux:uid=0 账号、authorized_keys、SUID、ld.so.preload、systemd 服务、bashrc;
  • Windows:隐藏账号($ 结尾)、克隆账号(D 盾查)、注册表 Run、计划任务、服务(7045)、映像劫持 IFEO、屏幕保护程序。

7.5 勒索软件

  • 文件被加后缀、桌面留勒索信(README_DECRYPT.txt 之类);
  • 找:加密时间(文件 mtime)→ 那个时间点的登录记录 → 入口(RDP 爆破最常见);
  • 比赛中一般要求找出勒索信、入口 IP、回传的邮箱/钱包地址。

八、靶机答题套路与答题模板

通用作答流程

1. 先跑基础命令收集信息(系统、账号、last、netstat、top)——这些几乎必出答案 2. 看题目问什么,缺什么证据去对应章节找 3. 所有答案记录时间线:攻击者 IP → 入口 → 动作 → 落地文件 → 持久化 → 外联 4. 全部找齐后再清除(删马、杀进程、删账号),最后交卷

一页纸速查(比赛时的 Cheat Sheet)

bash
# ===== Linux ===== uname -a; date cat /etc/passwd; awk -F: '$3==0{print $1}' /etc/passwd last; lastb; history netstat -antlp; ps aux --sort=-%cpu | head crontab -l; ls /etc/cron*; cat /etc/ld.so.preload find /tmp /var/tmp /dev/shm -type f find /var/www -name "*.php" -mtime -7 grep -iE "sqlmap|eval|union" /var/log/nginx/access.log grep "Accepted" /var/log/secure md5sum <恶意文件>
cmd
:: ===== Windows ===== systeminfo & net user & net localgroup administrators netstat -ano & tasklist /svc wmic process get name,processid,commandline schtasks /query /v & reg query HKLM\...\CurrentVersion\Run eventvwr.msc (4624 / 4625 / 4720 / 7045) certutil -hashfile 文件 MD5

九、常用工具清单

平台工具用途
Linuxrkhunter / chkrootkitrootkit 检测
LinuxGoAccessweb 日志可视化
LinuxLinuxgun / AutoIR_Remote一键应急排查脚本(GitHub 开源)
LinuxD 盾(可跑在 wine) / 河马webshell 查杀
Linuxbusybox命令被替换时交叉验证
WindowsD 盾webshell + 隐藏账号
Windows河马 webshell 查杀webshell
Windows火绒 / 火绒剑杀毒 + 行为分析
WindowsProcess Explorer / Monitor进程与行为
WindowsAutoruns自启动项全查
WindowsPCHunter / System Informer手工查杀
WindowsLog Parser 2.2事件日志 SQL 分析
WindowsKVRT(卡巴绿色版)应急杀毒
通用Everything(Win)按时间快速定位文件
通用Wireshark抓流量分析

十、参考资料

以下是本文整理时参考的优质文章,建议按需精读:

Windows 方向

Linux 方向

Web / 数据库日志

靶机实战


心法:应急响应本质是"找不同"——拿着一份正常的系统该有的样子(账号列表、自启项、进程、计划任务),和现在的样子对比,多出来的、改过的、跑在外网的,都是线索。命令记不住没关系,记住六步流程和"账号/进程/自启/文件/日志"五个方向,到哪台机器都能开始排查。