MySQL注入直接獲取Shell的前提條件

1.寫入webshell

使用select 'payload' into outfile '/path/to/webshell'便可寫入一個webshell到/path/to/webshell,這種方式的利用條件爲:html

  • mysql帳戶有 File_priv 權限,即 select user,file_priv from mysql.user where user=current_user()爲 Y
  • show variables like '%secure_file_priv%' 的結果符合要求(前面的語句執行結果可能與 select @@global.secure_file_priv不一樣,但通過個人測試這時候前面的語句的結果是準確的,不過我也不知道爲何兩個結果會不一致,按照MySQL官方文檔的說法該變量是全局系統變量,應該是不會出現兩個不一樣結果的。。。若是有權限的話仍是用 select * from information_schema.session_variables where variable_name='secure_file_priv' 看比較好,這個確定準確)。具體要求以下:
    • 若是該變量爲空,則變量無效,這時候最容易利用
    • 若是變量爲目錄的絕對路徑,則服務器會將導入和導出操做限制爲僅適用於該目錄中的文件
    • 若是設置爲NULL,則服務器禁用導入和導出操做。
  • 知道網站根目錄的絕對路徑,且MySQL服務所屬用戶(默認爲mysql)對根目錄有可寫權限

2. UDF寫入shell

原理同webshell,都是經過select 'payload' into outfile '/path/to/plugin_dir'寫入payload,因此利用條件和webshell的前兩點相同,只有第三點不同,那就是mysql服務所屬用戶須要有插件目錄(show variables like '%plugin%'查看目錄絕對路徑)的寫入權限,linux上mysql的plugin目錄默認爲root全部,權限爲755。須要注意的是經過UDF的方式獲取到的shell是管理員權限,因此有些時候能夠用來提權。mysql

相關文章
相關標籤/搜索