在利用sql注入漏洞后期,最常用的就是通過mysql的file系列函數來進行讀取敏感文件或者寫入webshell,其中比較常用的函數有以下三個
into dumpfile() into outfile() load_file()我們本次的測試數據如下

讀寫文件函數調用的限制
因為涉及到在服務器上寫入文件,所以上述函數能否成功執行受到參數 secure_file_priv 的影響。官方文檔中的描述如下

翻譯一下就是
其中當參數secure_file_priv 為空時,對導入導出無限制 當值為一個指定的目錄時,只能向指定的目錄導入導出 當值被設置為NULL時,禁止導入導出功能這個值可以通過命令 select @@secure_file_priv 查詢。由于這個參數不能動態更改,只能在mysql的配置文件中進行修改,然后重啟生效。
dumpfile與outfile的區別
導出數據庫場景下的差異
select …… into outfile
我們先來看一下mysql官方文檔里對于這兩個函數的解釋


其中有兩個值得注意的坑點
outfile函數可以導出多行,而dumpfile只能導出一行數據
outfile函數在將數據寫到文件里時有特殊的格式轉換,而dumpfile則保持原數據格式
我們接下來通過導出測試看看這里面的細節
首先通過命令 select * from test into outfile '/tmp/test.txt' 來使用outfile導出
可以看到文件 /tmp/test.txt 文件中保存了所有的數據并且在一行數據的末尾自動換行

通過查看官方文檔,可以看出使用如下參數可以進行格式調整

其中 FIELDS ESCAPED BY 可以用來對指定的字符進行轉義, FIELDS [OPTIONALLY] ENCLOSED BY 用來對字段值進行包裹, FIELDS TERMINATED BY 用來對字段值之間進行分割
例如使用如下命令 select * from test into outfile '/tmp/test.txt FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY ' " 'LINES TERMINATED BY '/n'
得到的導出文件如下

select …… into dumpfile
而接著使用命令 select * from test into dumpfile '/tmp/test.txt'
新聞熱點
疑難解答