应急响应——知攻善防靶场Linux-1详细应急过程

今天给大家带来一篇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应急难度初级,适合新手师傅练习熟悉基本的步骤;

期待下次再见;

相关推荐
Guistar~~16 小时前
【Linux驱动开发IMX6ULL】WS73 驱动移植的详细教程基于USB协议--WIFi网卡、蓝牙BLE、星闪SLE
linux·驱动开发
RECRUITGUY16 小时前
通信 - WIFI
网络·智能路由器
obboda16 小时前
磁盘管理(MBR、LVM)
运维·5g
GHL28427109016 小时前
无法连接服务端socket
linux·服务器·网络
kylezhao201916 小时前
S7-1200 CPU 与 S7-200 SMART S7通信(S7-1200 作为服务器)
运维·服务器
阿华hhh16 小时前
项目(购物商城)
linux·服务器·c语言·c++
摸鱼仙人~16 小时前
大模型文章生成的风格个性化与多文体写作:一套可落地的方法论
linux·运维·服务器
xybDIY16 小时前
亚马逊云 Organizations 组织 Link 账号关联与解绑自动化解决方案
运维·自动化·云计算·aws
煤球王子16 小时前
浅学文件系统4(页面缓存)
linux