今天给大家带来一篇
Linux的应急响应文章,相信之前给大家看的Windows应急响应 步骤都熟悉了;Linux应急涉及的知识点:
- 定时任务cron
- SUID提取
- SUDO提取
- SSH公私钥连接
- 用户 / 组权限:新增可疑系统用户、特权用户(uid=0 的非 root 账户)
- 进程 / 网络异常检测:通过 ps、top、netstat/ss 等工具识别恶意进程、异常端口监听
- 恶意软件检测:识别 webshell、rootkit(借助 chkrootkit/rkhunter 工具)、恶意脚本 / 二进制程序
文章目录
靶机介绍
该靶场来源于互联网,免费收集,免费推广,平台上任何靶场都为免费下载。如需下架请联系VulnStack团队
背景
前景需要:小王急匆匆地找到小张,小王说"李哥,我dev服务器被黑了",快救救我!!
挑战内容:
- 黑客的IP地址
- 遗留下的三个flag
注意:该靶机有很多非预期解,做靶机是给自己做,请大家合理按照预期解进行探索。
关于靶机启动
关于靶机启动解压后直接用Vmware打开即可。
bash
# 相关账户密码
defend/defend
root/defend

如上图所示;
应急过程
首先我们登录系统后,发现是一个Centos系统(属于Linux的一种),于是就开始逐步寻找攻击者可能留下的痕迹:

SUDO权限
因为此时我们登录的是defend用户,所以我们可以查询一下是否有可利用的SUDO程序,导致攻击者成功越权进而控制我们的电脑:
打开终端,输入命令:
bash
sudo -l
发现结果如下图所示:

bash
[defend@localhost ~]$ sudo -l
匹配 %2$s 上 %1$s 的默认条目:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset,
env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR
USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT
LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME
LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
用户 defend 可以在 localhost 上运行以下命令:
(ALL) ALL
含义:defend 用户可以以任何用户(包括 root)身份 ,执行任何命令,而且不限制命令、不限制路径、不限制参数。
这是 sudo 提权里最顶级的一种情况:
| sudo 权限 | 危险等级 |
|---|---|
(root) /usr/bin/nmap |
中 |
(root) /usr/bin/vim |
高 |
(ALL) ALL |
🔥🔥 直接 root |
溯源思路:我们合理猜测:攻击者通过系统的这个漏洞拿到root权限,从而设置后门恶意程序;
所以我们使用sudo -i 即可切换为root用户;

历史命令history
此时我们是root用户,所以可以查看攻击者是否利用root用户使用了什么命令:

意外发现了一个flag,同时也发现了一个攻击者可能留下了的恶意文件rc.local
flag{thisismybaby}
接下来去看看恶意文件的内容:

结果如下:
bash
[root@localhost rc.d]# cat rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
# flag{kfcvme50}
touch /var/lock/subsys/local
得到flag{kfcvme50}
同时我们还得知在/var/lock/subsys/local下创建了一个文件,查看内容:

SSH公私钥
root用户有权访问/root目录下的.ssh,所以我们查看攻击者是否存放了自己的公钥来进行SSH连接:
bash
cd /root/.ssh
ls -a
cat authorized_keys
也是发现了攻击者的名字:chinaran@kali

同时我们还可以发现是redis-bits等字样,说名攻击者很有可能是通过redis服务器来进行攻击的;
进程排查
使用 netstat 网络连接命令,分析可疑端口、IP、PID
bash
netstat -antlp | more
查看下 pid 所对应的进程文件路径,
运行 ls -l /proc/$PID/exe 或 file /proc/$PID/exe($PID 为对应的 pid 号)

未发现可疑项;
最近登录用户
输入命令lastlog,得到结果如下:
bash
[root@localhost subsys]# lastlog
用户名 端口 来自 最后登陆时间
root pts/1 192.168.75.129 一 3月 18 20:23:07 +0800 2024
bin **从未登录过**
daemon **从未登录过**
adm **从未登录过**
lp **从未登录过**
sync **从未登录过**
shutdown **从未登录过**
halt **从未登录过**
mail **从未登录过**
operator **从未登录过**
games **从未登录过**
ftp **从未登录过**
nobody **从未登录过**
systemd-network **从未登录过**
dbus **从未登录过**
polkitd **从未登录过**
libstoragemgmt **从未登录过**
colord **从未登录过**
rpc **从未登录过**
saned **从未登录过**
saslauth **从未登录过**
abrt **从未登录过**
setroubleshoot **从未登录过**
rtkit **从未登录过**
pulse **从未登录过**
chrony **从未登录过**
unbound **从未登录过**
radvd **从未登录过**
tss **从未登录过**
usbmuxd **从未登录过**
geoclue **从未登录过**
qemu **从未登录过**
gluster **从未登录过**
gdm :0 四 1月 8 15:57:54 +0800 2026
rpcuser **从未登录过**
nfsnobody **从未登录过**
gnome-initial-setup **从未登录过**
sshd **从未登录过**
avahi **从未登录过**
postfix **从未登录过**
ntp **从未登录过**
tcpdump **从未登录过**
defend :0 四 1月 8 15:58:23 +0800 2026
redis **从未登录过**
未发现异常;
redis系统日志
日志默认存放位置:/var/log/

由于上述我们得到的信息,redis服务器的日志保存位置为/var/log/redis/redis.log(最常见)
查看日志配置情况:more /etc/rsyslog.conf
| 日志文件 | 说明 |
|---|---|
| /var/log/cron | 记录了系统定时任务相关的日志 |
| /var/log/cups | 记录打印信息的日志 |
| /var/log/dmesg | 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
| /var/log/mailog | 记录邮件信息 |
| /var/log/message | 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件 |
| /var/log/btmp | 记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看 |
| /var/log/lastlog | 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看 |
| /var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看 |
| /var/log/utmp | 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询 |
| /var/log/secure | 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
可以得到攻击者的IP地址:192.168.75.129

随后继续排查redis服务器:
bash
/etc/redis/ Redis 配置目录(redis.conf)
/usr/bin/redis-server Redis 服务程序
/usr/bin/redis-cli Redis 客户端
/var/lib/redis/ Redis 数据目录(dump.rdb、appendonly.aof)
/var/log/redis/ Redis 日志目录(redis.log)
/run/redis/ Redis 运行时文件(redis.pid、socket)
于是我们排查服务器中存在的文件:
bash
more /etc/redis.conf
最终也是发现了flag:

flag{P@ssW0rd_redis}
总结
至此,我们也是找到了所有的黑客的IP地址和遗留下的三个flag:
- flag{P@ssW0rd_redis}
- flag{kfcvme50}
- flag{thisismybaby}
- 192.168.75.129
(下面是题解的源码)
bash
#!/bin/bash
echo "欢迎使用 知攻善防实验室 解题系统"
echo "在继续之前,您需要获得以下内容:"
echo "1.攻击者IP地址"
echo "2.三个flag(flag格式flag{xxxxx})"
read -p "您准备好了吗?(y/n) " select
if [ "$select" == "y" ]; then
read -p "请输入攻击者的IP地址:" ip
if [ "$ip" == "192.168.75.129" ]; then
echo "您输入的IP地址正确,请继续"
read -p "请输入第一个flag:" flag1
if [[ "$flag1" == "flag{P@ssW0rd_redis}" || "$flag1" == "flag{thisismybaby}" || "$flag1" == "flag{kfcvme50}" ]]; then
echo "您输入的第一个flag正确,请继续"
read -p "请输入第二个flag:" flag2
if [[ ("$flag2" == "flag{P@ssW0rd_redis}" || "$flag2" == "flag{thisismybaby}" || "$flag2" == "flag{kfcvme50}") && "$flag2" != "$flag1" ]]; then
echo "您输入的第二个flag正确,请继续"
read -p "请输入第三个flag:" flag3
if [[ ("$flag3" == "flag{P@ssW0rd_redis}" || "$flag3" == "flag{thisismybaby}" || "$flag3" == "flag{kfcvme50}") && "$flag3" != "$flag2" && "$flag3" != "$flag1" ]]; then
echo "您输入的第三个flag正确,请继续"
for i in {1..6}
do
echo "恭喜您,成功攻克该靶机!"
done
else
echo "第三个flag不正确。"
fi
else
echo "第二个flag不正确。"
fi
else
echo "第一个flag不正确。"
fi
else
echo "您输入的IP地址不正确。"
fi
else
echo "请准备好后再试。"
fi
打开题解,输入答案:执行脚本./题解Script.sh

总体来说本次Linux应急难度初级,适合新手师傅练习熟悉基本的步骤;
期待下次再见;