第二章日志分析-mysql应急响应
简介
1.黑客第一次写入的shell flag{关键字符串}
2.黑客反弹shell的ip flag{ip}
3.黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx
4.黑客获取的权限 flag{whoami后的值}
首先思考本题目为mysql应急响应,也就是黑客是通过数据库写入的webshell到web目录,所以第一题对应想去web目录下查找webshell,可以手动静态检测特征函数也可使用工具,第二题可以通过netstat查看异常连接或者通过查看日志找一下是否有一场执行的日志。至于提权mysql常见的提权方式是udf提权、mof提权和开机启动脚本,其中最常用的是udf提权,直接连接服务器开干。
flag 1.黑客第一次写入的shell flag{关键字符串}
使用命令查找带特征函数的webhsell文件,通过查看webshell内容获取flag。
python
find / -name "*.php"|grep xarge grep "eval("
2.黑客反弹shell的ip flag{ip}
查看mysql日志,日志路径为/var/log/mysql路径下。只有一个error.log文件,查看发现一条奇怪的日志。
在/tmp/目录下上传了一个1.sh的文件,后面则是这个文件引发的一系列错误信息
每行的错误信息,如command not found,指出脚本中的每一行都被解释器当作命令来尝试执行,但由于这些行实际上是HTTP响应的一部分(例如日期、状态信息、长度描述等),shell无法识别并执行它们,从而导致了一系列的错误。
查看文件内容发现反弹shell地址
flag 3.黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx
上面说过mysql提权方式主要有三种
udf提权(常用)
mof提权
开机启动脚本(启动项提权)
提权目的:mysql权限 ---> 操作系统权限
UDF提权
有时候我们通过一些方式获取了目标主机mysql的用户名和密码,并且可以远程连接。我们远程登录上了mysql服务器,这时,我们想通过mysql来执行系统命令,此时我们可以考虑使用UDF进行提权。
UDF是什么
UDF(Userdefined function)可翻译为用户自定义函数,其为mysql的一个拓展接口,可以为mysql增添一些函数。比如mysql一些函数没有,我就使用UDF加入一些函数进去,那么我就可以在mysql中使用这个函数了。
使用过MySQL的人都知道,MySQL有很多内置函数提供给使用者,包括字符串函数、数值函数、日期和时间函数等,给开发人员和使用者带来了很多方便。MySQL的内置函数虽然丰富,但毕竟不能满足所有人的需要,有时候我们需要对表中的数据进行一些处理而内置函数不能满足需要的时候,就需要对MySQL进行一些扩展,幸运的是,MySQL给使用者提供了添加新函数的机制,这种使用者自行添加的MySQL函数就称为UDF(User Define Function)。
提权说明
先说明一下UDF提取的先决条件
获取mysql控制权限 :知道mysql用户名和密码,并且可以远程登录(即获取了mysql数据库的权限)
mysql具有写入文件的权限:mysql有写入文件的权限,即secure_file_priv的值为空。
什么情况下需使用mysql提权?
拿到了mysql的权限,但是没拿到mysql所在服务器的任何权限,通过mysql提权,将mysql权限提升到操作系统权限
ps:mysql提权获取到的权限大小跟运行mysql所在服务器登录的账号的权限相关,如操作系统以普通用户登录的并启动mysql,经udf提权后也只能获取到系统的普通用户权限。而使用管理员登录操作系统运行mysql,提权后获取的权限则为系统管理员权限。
手动提取
- 查看mysql是否有写入文件的权限
python
show global variables like '%secure%';
secure_file_priv是用来限制load dumpfile、into outfile、load_file()函数在哪个目录下拥有上传和读取文件的权限。如下关于secure_file_priv的配置介绍
secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
如下,代表mysql有写入的权限
科普完毕我们需要进入数据库,在数据库的配置文件中没有找到
我们来还原一下被攻击的场景,黑客是如何拿到我们服务器的 shell 的呢,他做过反弹 shell 的操作,并且做过提权操作,既然是从数据库权限提权到主机用户权限,那肯定是通过数据库服务打过来的
那可不可能是网站目录下有什么配置文件泄露了数据库的账号密码,让黑客远程登录了数据库再进行了提权和反弹 shell 的一系列操作呢
在 /var/www/html 目录下存在一个 common.php 文件,那么黑客应该是通过对网站进行目录探测的时候发现了此文件,恰好此文件还泄露了数据库的账号和密码,那么他的常规操作肯定是远程连接上了数据库后再从数据库作为切入点进行提权,mysql 的常见提权方式就是 UDF 提权
进入数据库查看是否有写入权限
python
show global variables like '%secure%';
可以看到拥有写入权限,确实符合要求,前面泄露的账号密码也刚好是 root 权限
也就是说黑客如果进行了 UDF 提权肯定会在 /usr/lib/mysql/plugin/ 路径下留下攻击痕迹
我们来到 /usr/lib/mysql/plugin/ 路径下查看确实看到了 udf.so
注:
/usr/lib/mysql/plugin/ 目录是MySQL用来存放用户定义函数(UDF, User Defined Function)动态链接库文件的地方。一个名为udf.so的文件出现在此目录下,表明有人安装了一个自定义函数到MySQL服务器中。
这个自定函数就是用来被调用执行命令的
也就是说提权文件的完整路径为 /usr/lib/mysql/plugin/udf.so
flag 4.黑客获取的权限 flag{whoami后的值}
通过使用ps -aux查看
既然hacker进行了提权,在库中写入了自定义函数,我们去数据库中查询一下
python
select * from mysql_func;
这个表会查询到新增函数
使用新增的这个函数执行系统命令
python
select sys_eval('whoami');
得到flag falg{mysql}
参考文章:
python
https://blog.csdn.net/yujiahui0203/article/details/139074400?ops_request_misc=&request_id=&biz_id=102&utm_term=%E7%8E%84%E6%9C%BAmysql%E5%BA%94%E6%80%A5%E5%93%8D%E5%BA%94&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-139074400.142^v100^pc_search_result_base8&spm=1018.2226.3001.4187
python
https://blog.csdn.net/JACKBREAK/article/details/139037618?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171755146016800215039351%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=171755146016800215039351&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-3-139037618-null-null.142^v100^pc_search_result_base8&utm_term=%E7%8E%84%E6%9C%BAmysql%E5%BA%94%E6%80%A5%E5%93%8D%E5%BA%94&spm=1018.2226.3001.4187