linux应急1 redis应急

小王急匆匆地找到小张,小王说"李哥,我dev服务器被黑了",快救救我,本靶机需要用户挑战内容:

  1. 黑客的IP地址
  2. 遗留下的三个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

最后验证: