小王急匆匆地找到小张,小王说"李哥,我dev服务器被黑了",快救救我,本靶机需要用户挑战内容:
- 黑客的IP地址
- 遗留下的三个flag
排查流程
排查ip
登录信息的排查
w

查看系统信息,用于显示某一时刻用户的行为

排查当前用户信息登录信息
who

pts就是代表当前的终端 一个终端 数字代表编号
last
查看最近用户的登录信息

ip找到了 但是对方直接登录的就是root 很纳闷 ? 为什么对方能直接使用 root 可能是登录了某个服务号然后进行了提权
查看一下登录日志
这个类似于找ip的方法2
登录日志的存储位置在 /var/log
这里面有服务日志也有系统日志:
grep -E -o "(0-9{1,3}\.){3}0-9{1,3}" ./secure |sort| uniq -c 筛选ip

一般上面这个是判断是否多ip爆破
如果是则会进行成功与否的判断
判断登录失败:grep "Failed password" /var/log/secure | awk '{print $11}' | sort -u

登录成功:
grep "Accepted " /var/log/secure | awk '{print $11}' | sort -u

这样基本上可以进行定性了
排查用户
1、先查看拥有root权限的用户

分析一下 /etc/password 文件
用户名:是否有密码:uid:GID:用户家目录:用户的使用的shell 没有/bin/bash的就是一些服务用户等
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

然后查看拥有 shell 能力的用户

2、查看用户是否有高权限威胁
因为这里就 2 用户 直接排查 defend 即可

直接使用grep筛选 或者
:grep -v '^#\|^$' /etc/sudoers
这个把有执行力的筛选出来
发现一个 %wheel %开头的是组
3、排查用户组

4、有些时候 等保的时候还需要对用户的口令进行查看 是否为sha-256
grep -E 'root|defend' /etc/shadow
如果有必要可以进行用户或组的删除:
清除用户:
-
usermod -L user:禁用帐号,帐号无法登录,/etc/shadow第二栏为!开头
-
userdel user:删除user用户
-
userdel -r user:将删除user用户,并且将/home目录下的user目录一并删除
[root@localhost defend]# cat /etc/shadow
root:6JNlByqtvBvk0qoo0$K5jqUDhnnq6b.WhUk3ENwNjm8kLykf1LV20bJibX9rV1dPDQd8m8wJAWrTLs.OOuH0gV/PH6kgTLo/7YKghXu1::0:99999:7:::
bin::18353:0:99999:7:::
daemon::18353:0:99999:7:::
adm::18353:0:99999:7:::
lp::18353:0:99999:7:::
sync::18353:0:99999:7:::
shutdown::18353:0:99999:7:::
halt::18353:0:99999:7:::
mail::18353:0:99999:7:::
operator::18353:0:99999:7:::
games::18353:0:99999:7:::
ftp::18353:0:99999:7:::
nobody::18353:0:99999:7:::
systemd-network:!!:19800::::::
dbus:!!:19800::::::
polkitd:!!:19800::::::
libstoragemgmt:!!:19800::::::用户名:是非为禁用用户(!!为禁用用户(锁定用户) *为休眠用户(可以通过激活服务 系统用户登录)):最后一次密码修改时间:密码经过多少天可以修改:密码的存活期:密码过期多少天后警告
历史命令排查
如果对方服务器运维人员并没有对历史命令添加 时间管理:

脚本就是 获取当前用户的ip 然后 使历史命令显示
%F 日期
%T 时间
和ip的形式
但是一般情况下 对方的VPS都是配置好了的

这种形式更有利于我们进行定性攻击入侵的时间等

历史记录最大条数
如果遭遇了 历史记录被删除事件

主要分为两部
1、重新找回
在内存中查看 - -c清楚的是记录而不是磁盘中记载的文件

主要就是查看隐藏的文件 cat ~/.bash_history
2、重新加载
history -r ~/.bash_history :重恢复即可
网络检测
如果netstat -natpu

如果 netstat 没下载 可以使用 ss 进行代替
异常进程检测
异常进程主要是找到然后进行封锁
静态:
ps aux --sort=-%cpu | head -20
--sort=-%cpu 以排序
- 降序
head -20 前20行

根据pid 查找进程
一般是 ls -al /proc/2259/exe

如果没有则进入进程号中查看有啥执行的恶意命令

动态排除:
top
自启动排查
1、计划任务
crontab -l
如果没有计划任务 可以进行排查 恶意脚本
1 /var/spool/cron/* 用户个人定时任务(crontab -e 编辑的文件)
2 /etc/crontab 系统级主定时任务配置文件
3 /etc/cron.d/* 系统级额外定时任务目录(软件包安装的定时任务)
4 /etc/cron.daily/* 每天执行的定时任务脚本目录
5 /etc/cron.hourly/* 每小时执行的定时任务脚本目录
6 /etc/cron.monthly/* 每月执行的定时任务脚本目录
7 /etc/cron.weekly/* 每周执行的定时任务脚本目录
8 /etc/anacrontab Anacron 主配置文件(用于非7×24小时运行的机器)
9 /var/spool/anacron/* Anacron 执行时间记录文件目录
可以直接查看:
more /etc/cron.daily/* 查看下面是否有可疑脚本

2、自启动脚本项目

cat /etc/rc.local
异常文件排查
一般出现异常文件 我们一般会先查找 24小时内被创建的文件 (也可以根据进程中的命令名查找文件)
主要注意 /tmp 下是否有恶意的文件
find /path/to/search -ctime -1
find / -type f -newerct "2024-03-18 00:30" ! -newerct "2024-03-20 15:28" 2>/dev/null
find /tmp -iname "*" -type f -atime -1
iname 匹配的名称不区分大小写
-atime 是根据时间查看创建的文件
+1 是一天前
-1 是24小时内
1 这个指的是 48 小时内
1查看的较全
find / -type f -newerat "2024-03-18 00:30" ! -newerat "2024-03-20 15:28" 2>/dev/null
或使用时间段 -newat
at 就是 atime
find / -type f -newermt "2024-03-18 00:30:00" ! -newermt "2024-03-20 15:28:00" 2>/dev/null
mtime 修改的文件
日志排查
主要分为2部分
1、系统日志的排查:


爆破事件主要查看 secure
2、服务日志
主要是dev服务器上部署的中间件或者第三方等
靶场:
拿到靶机之后先进行最简单的定性 查看是否为挖矿

先判断命令镜像没有被劫持
没有恶意的cpu占用
查看历史命令
cat /~/.bash_history
不要搞混概念
/home 是普通用户的家目录
~ 是root用户的家目录
主要是查看对方使用 root权限干了什么

flag1
echo flag{thisismybaby}
查看一下这个自启动文件
flag2

然后下面是创建了一个文件

这个文件是空的 然后这个目录下也没有威胁文件
然后我们查看一下入侵ip
查看入侵ip主要是看日志为主
grep "Failed password" /var/log/secure | awk '{print $11}' | sort -u
成功:grep "Accepted" /var/log/secure | awk '{print $11}' | sort | uniq -c
uniq 这个就是去重的
也可以进行统计重复项的次数
uniq -c 统计重复次数
-u 不显示重复项
主要是
本身是用来排序的命令
sort
-n 按数字顺序排序
-r 按字母反序
-u 去重
1、查看登录成功的ip

2、查看失败的ip

查看ip 只有一个可能不是ssh 因为如果是ssh的话 会对ip进行禁止行为等
查看服务

发现有个redis文件 部署了这个服务 查看log

grep "Accepted" | redis.conf
发现入口是redis 无疑
我们换方向查看他的配置文件

但是我们发现 redis没有被启动
查看配置文件
grep -v "^#\|^$" redis.conf
然后分析一下requirepass 这个直接没配置 说明存在未授权

然后也没设置保护模式
监听全网段等

对方应该是利用redis未授权进入 然后篡改ssh秘钥最后获取了root权限
flag3

flag{P@ssW0rd_redis}
最后完成打靶
改进方案
1、对入口点进行防护
改redis的配置文件 设置保护 单点登录 设置强密码 改端口为不经典的端口
2、对系统
把历史命令进行改进 定期排查启动项
3、封锁对方的ip
192.168.75.129

配置防火墙
未配置的话先进行封锁后配置
echo "ALL: 192.168.75.129" /etc/hosts.deny
整个的攻击过程:
对方通过如果 -》 redis未授权 -》获取root shell -》写入计划任务 -》篡改redis.conf
dev机器启动

验证redis写ssh公钥实现ssh登录

使用redis-cil 本地无需密码
查看TJ

原理:Redis 的持久化机制被攻击者利用,将 SSH 公钥"伪装"成 Redis 的数据库文件,写入到目标服务器的 SSH 授权目录中
我们查看本地的的 秘钥
cat /root/.ssh/authorized_keys
最后验证:
