CTF网络安全比赛中,关于Linux应急响应类的题,你这样做,flag大概率会拿到

作者:小白安全成长记 发布:2026-09-14 15:23 收录:2026-09-16 08:33 1 次阅读 约 2244 字
摘要:CTF网络安全比赛中,关于Linux应急响应类的题,你这样做,flag大概率会拿到
推荐理由:本文涵盖「CTF」、「网络安全」、「应急响应」等多个主题,重点关注 CTF。

很多时候CTF比赛会给你一台linux服务器,要求是服务器被入侵了,让你根据线索,找到flag,这种本质上通常是 Linux 主机应急响应 / 入侵取证(Incident Response):比赛方给你一台已经被“入侵”的 Linux 服务器,你需要判断攻击者做了什么、找到持久化/后门/恶意文件,最后从线索里拿到 flag。拿到环境后,我建议你不要一上来就乱删文件,而是按照下面这套排查流程做,一点一点拿到flag。


一、先建立你的“应急响应思维”

拿到机器后,你首先回答 5 个问题:

谁进来了? → 怎么进来的? → 进来之后做了什么? → 有没有留下后门? → flag 在哪里?

Linux CTF 中最常见的考点大概是:

  • SSH 爆破 / 弱密码
  • WebShell
  • 恶意 PHP/Python/Perl/Shell
  • 反弹 Shell
  • SSH 公钥后门
  • Cron 持久化
  • systemd 服务
  • /etc/rc.local
  • /etc/profile / .bashrc
  • SUID 提权
  • rootkit
  • LD_PRELOAD
  • 修改 /etc/passwd / /etc/shadow
  • /tmp/dev/shm 中的恶意文件
  • 被替换的系统命令
  • SSH 登录日志
  • Web 访问日志
  • history
  • 进程/网络连接
  • Docker / 容器逃逸相关痕迹

01第一步:不要急着动现场

刚登录服务器:

CODE

idwhoamihostnameuname -acat /etc/os-releasedatepwd

然后看当前用户:

CODE

whowlast -n 20lastlog

尤其注意:

CODE

last

例如出现:

CODE

root     pts/0    10.10.10.23hacker   pts/1    10.10.10.50

这可能直接告诉你攻击者 IP。


02看机器上正在跑的进程

进程

CODE

ps aux

更推荐:

CODE

ps auxf

或者:

CODE

ps -ef

重点找:

CODE

ncncatsocatcurlwgetpythonpython3perlbashshphp

以及奇怪的进程:

CODE

./a/tmp/.xxx/dev/shm/.xxx

例如:

CODE

ps aux | grep -E 'nc|ncat|socat|curl|wget|python|perl|php'

03看网络连接——CTF 非常重要

CODE

ss -antp

或者:

CODE

ss -lntp

看监听端口:

CODE

ss -lntp

看当前连接:

CODE

ss -antp

如果看到:

CODE

ESTAB  0  0  10.0.0.5:22  10.0.0.99:54321

说明当前有人通过 SSH 连着。

如果看到某个奇怪程序:

CODE

0.0.0.0:4444

或者:

CODE

*:1337

就值得重点调查。

也可以:

CODE

lsof -i -n -P

04然后查“攻击者是怎么进来的”

1.SSH

Debian/Ubuntu:

CODE

grep -i "Accepted" /var/log/auth.loggrep -i "Failed password" /var/log/auth.log

CentOS/RHEL:

CODE

grep -i "Accepted" /var/log/securegrep -i "Failed password" /var/log/secure

直接:

CODE

grep -RiE "Accepted|Failed password|Invalid user" /var/log 2>/dev/null

你可能看到:

CODE

Accepted password for user from 10.10.10.20

或者大量:

CODE

Failed password for root from ...

05检查有没有新增用户

这个在 CTF 里非常常见。

CODE

cat /etc/passwd

重点:

CODE

awk -F: '$3 >= 1000 {print}' /etc/passwd

看 UID=0:

CODE

awk -F: '$3 == 0 {print}' /etc/passwd

正常情况下通常只有:

CODE

root:x:0:0:root:/root:/bin/bash

如果出现:

CODE

hacker:x:0:0::/home/hacker:/bin/bash

这就非常可疑。

因为:

CODE

UID=0

意味着这个用户拥有 root 权限。


06检查 SSH 公钥后门

这是 Linux CTF 高频考点

首先:

CODE

find /home /root -name authorized_keys -type f -exec ls -la {} \;

然后:

CODE

cat /root/.ssh/authorized_keys

以及:

CODE

find /home -path "*/.ssh/authorized_keys" -type f -exec sh -c 'echo ==== $1; cat "$1"' _ {} \;

你需要特别关注陌生的:

CODE

ssh-rsa AAAA...ssh-ed25519 AAAA...

以及文件修改时间:

CODE

stat /root/.ssh/authorized_keys

07检查 Cron定时任务——又一个超级高频点

先:

CODE

crontab -l

root:

CODE

crontab -u root -l

再:

CODE

cat /etc/crontabls -la /etc/cron.d/ls -la /etc/cron.daily/ls -la /etc/cron.hourly/ls -la /etc/cron.weekly/

然后:

CODE

grep -RniE "curl|wget|nc|bash|python|perl|php|/tmp|/dev/shm" /etc/cron* 2>/dev/null

例如发现:

CODE

* * * * * root /tmp/.update.sh

那么:

CODE

cat /tmp/.update.shstat /tmp/.update.sh

基本就是重点嫌疑。


08检查 systemd 持久化

现代 Linux CTF 也经常考。

CODE

systemctl list-units --type=service

查看开机启动:

CODE

systemctl list-unit-files --state=enabled

重点:

CODE

systemctl status xxx.service

然后:

CODE

find /etc/systemd/system /usr/lib/systemd/system \    -type f -mtime -30 -ls 2>/dev/null

寻找最近修改的 service。


09重点检查 /tmp 和 /dev/shm

攻击者特别喜欢把东西放这里。

CODE

ls -lah /tmpls -lah /var/tmpls -lah /dev/shm

递归:

CODE

find /tmp /var/tmp /dev/shm -type f -ls 2>/dev/null

最近修改:

CODE

find /tmp /var/tmp /dev/shm -type f -mmin -1440 -ls 2>/dev/null

例如:

CODE

/tmp/.x/tmp/.update/dev/shm/.cache

都值得看。


10如果服务器跑 Web,优先查 Web 日志

比如:

CODE

ls -lah /var/log/

Apache:

CODE

/var/log/apache2/access.log/var/log/apache2/error.log

Nginx:

CODE

/var/log/nginx/access.log/var/log/nginx/error.log

例如:

CODE

grep -Ei "cmd=|exec|system|shell|upload|eval|base64|passwd|/etc/" /var/log/nginx/access.log

你可能发现:

CODE

POST /upload.phpPOST /shell.php?cmd=idGET /index.php?cmd=whoami

这时候就可以顺着时间线找。


11网站目录里找 WebShell

假设网站在:

CODE

/var/www/html

可以:

CODE

find /var/www/html -type f -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\n' | sort

找最近修改的文件。

PHP 环境可以重点搜索:

CODE

grep -RniE \'eval\(|assert\(|system\(|shell_exec\(|passthru\(|exec\(|base64_decode\(|popen\(|proc_open\(' \/var/www/html 2>/dev/null

还可以:

CODE

find /var/www/html -type f -name "*.php" -mtime -7 -ls

CTF 中经常就是:

某个正常网站 → 某个异常 PHP → WebShell → 攻击者执行命令 → flag


12检查 Shell 历史

CODE

cat ~/.bash_history

root:

CODE

cat /root/.bash_history

其他用户:

CODE

find /home -name ".bash_history" -exec sh -c 'echo ==== $1; cat "$1"' _ {} \;

重点搜索:

CODE

grep -RniE \"wget|curl|nc|ncat|socat|chmod|chown|passwd|useradd|ssh|scp|base64|/tmp|/dev/shm" \/root /home 2>/dev/null

不过要注意:

history 很容易被攻击者删除/清理,所以没有 history ≠ 没有攻击。


13找“最近被改过”的文件

这是 CTF 应急响应非常实用的技巧。

例如最近 24 小时:

CODE

find /etc /var /home /root /tmp \-type f -mtime -1 -ls 2>/dev/null

最近 1 小时:

CODE

find / -type f -mmin -60 -ls 2>/dev/null

当然 /proc/sys 等虚拟文件系统会产生很多噪音,所以实际比赛中最好限制目录。

尤其关注:

CODE

/etc/var/home/root/tmp/var/www

14检查 SUID

攻击者可能留下 SUID 后门。

CODE

find / -perm -4000 -type f 2>/dev/null

然后和正常系统命令对比。

常见:

CODE

/usr/bin/passwd/usr/bin/sudo/usr/bin/su

如果突然出现:

CODE

/tmp/x/opt/.hidden/usr/local/bin/xxx

就值得调查。


15检查 PATH 劫持 / 恶意系统命令

看看:

CODE

echo $PATH

以及:

CODE

which lswhich pswhich sswhich netstatwhich curl

如果:

CODE

which ps

结果是:

CODE

/tmp/ps

而不是:

CODE

/usr/bin/ps

就非常可疑。

还可以:

CODE

type -a lstype -a ps

16检查环境变量和 LD_PRELOAD

这是稍微进阶一点的 Linux 持久化考点。

CODE

cat /etc/ld.so.preload 2>/dev/null

如果里面存在一个奇怪的 .so

CODE

/tmp/.xxx.so

需要重点调查。

同时:

CODE

env

看看有没有奇怪环境变量。


17最后才是“找 Flag”

CTF 里 flag 的位置可能非常刁钻。

首先:

CODE

find / -iname "*flag*" 2>/dev/null

也可以:

CODE

find / -type f \( -name "flag*" -o -name "*flag*" \) 2>/dev/null

但不要只依赖文件名。

有些题目会把 flag 放在:

CODE

/root/

或者:

CODE

/home/user/

也可能:

CODE

/var/www/html/

甚至藏在:

CODE

/etc/

日志、数据库、环境变量或者恶意脚本中。


18比赛现场我推荐你形成这个固定 SOP

可以直接记成:

CODE

                Linux IR CTF                     │          ┌──────────┴──────────┐          ↓                     ↓       当前状态                历史痕迹          │                     │      ps / ss / w            last / logs          │                     │          ├──────────┬──────────┤          ↓          ↓          ↓        用户       SSH        Web          │          │          │      passwd     auth.log    access.log          │          │          │          └──────────┼──────────┘                     ↓                  持久化                     │       ┌─────────────┼─────────────┐       ↓             ↓             ↓     cron          systemd       SSH key       │             │             │       └─────────────┼─────────────┘                     ↓                 恶意文件                     │          /tmp /dev/shm /var/www                     ↓                  时间线                     ↓                  FLAG

二十如果是比赛,我建议你准备一套“一键排查脚本”

比如进入机器以后:

CODE

echo "===== HOST ====="hostnameuname -adateid echo "===== USERS ====="awk -F: '$3==0 {print}' /etc/passwd echo "===== LOGIN ====="last -n 20 echo "===== PROCESS ====="ps auxf echo "===== NETWORK ====="ss -antp echo "===== CRON ====="crontab -l 2>/dev/nullcat /etc/crontabls -la /etc/cron.d/ echo "===== SSH KEYS ====="find /root /home -name authorized_keys -type f \    -exec sh -c 'echo ==== $1; cat "$1"' _ {} \; echo "===== TEMP ====="find /tmp /var/tmp /dev/shm -type f -mmin -1440 -ls 2>/dev/null echo "===== SUID ====="find / -perm -4000 -type f 2>/dev/null echo "===== FLAG ====="find / -iname "*flag*" 2>/dev/null

不过真正比赛的时候不要只靠脚本。脚本的作用是快速建立全局视野,真正得分往往需要你根据日志、时间戳、进程和文件之间的关系,把攻击链串起来。


如果你刚开始学这类 CTF

我建议你的学习顺序是:

Linux 基础 → Linux 日志 → Web 日志 → 进程/网络 → 持久化 → WebShell → 提权 → 入侵时间线 → 自动化取证。

尤其要熟练这几个命令:

CODE

pssslsoffindgrepawksedstatjournalctlsystemctlcrontablastwhow

以上就是我的一些排查方法,还有检查rooktit的工具rkhunter、chkrootkit、unhide,还有常用在常用命令被替换的时候的应急工具busybox等等,好多东西都是在玩中学,经常用,功到自然成。#CTF比赛#自从有了AI,好像失去了原来的意思,让一些手工党很无聊,但是我还是要拥抱变化,让AI真正成为我们的工具而非替代我们。

19另外推荐一下大佬的应急响应手册:

  • https://github.com/Just-Hack-For-Fun/Linux-INCIDENT-RESPONSE-COOKBOOK

转载声明:本文转载自原发布平台 (作者:小白安全成长记), 原文标题《CTF网络安全比赛中,关于Linux应急响应类的题,你这样做,flag大概率会拿到》, 查看原文。 版权归原作者及原发布平台所有,本站仅作收录与展示,未对正文内容作实质性修改; 若涉及侵权请联系本站处理。