使用select 'payload' into outfile '/path/to/webshell'
便可寫入一個webshell到/path/to/webshell
,這種方式的利用條件爲:html
select user,file_priv from mysql.user where user=current_user()
爲 Yshow variables like '%secure_file_priv%'
的結果符合要求(前面的語句執行結果可能與 select @@global.secure_file_priv
不一樣,但通過個人測試這時候前面的語句的結果是準確的,不過我也不知道爲何兩個結果會不一致,按照MySQL官方文檔的說法該變量是全局系統變量,應該是不會出現兩個不一樣結果的。。。若是有權限的話仍是用 select * from information_schema.session_variables where variable_name='secure_file_priv'
看比較好,這個確定準確)。具體要求以下:
原理同webshell,都是經過select 'payload' into outfile '/path/to/plugin_dir'
寫入payload,因此利用條件和webshell的前兩點相同,只有第三點不同,那就是mysql服務所屬用戶須要有插件目錄(show variables like '%plugin%'
查看目錄絕對路徑)的寫入權限,linux上mysql的plugin目錄默認爲root全部,權限爲755。須要注意的是經過UDF的方式獲取到的shell是管理員權限,因此有些時候能夠用來提權。mysql