原文地址:https://mp.weixin.qq.com/s/HZcS2HdUtqz10jUEN57aog
早上看到群里在討論一個新姿勢,phpmyadmin后台getshell,不同於以往需要知道網站的絕對路徑,這個漏洞只要數據庫和網站源碼在同一個盤符下即可直接getshell。
漏洞詳情請看原文地址,這里只進行復現。
打開自己的phpstudy,發現自己下載的是4.0.10.20版本的,先查看phpmyadmin目錄下的index.php文件,發現代碼如下:
這里是基於白名單的機制,target參數只能存在$goto_whitelist數組中,具體內容如下:
由這兩處代碼可以判斷phpmyadmin 4.0.10.20版本的不存在該漏洞。
我們繼續下載phpmyadmin 4.8.1版本的進行測試。index.php代碼如下:
由上圖紅框處可知這里是基於黑名單機制進行判斷,只要target參數的值不是"import.php"和"export.php"即可進行下一步判斷。
checkPageValidity函數的代碼如下:
需要注意的是,$_GET、$_POST、$_REQUEST等獲得的參數都是默認進行一次url解碼的,但是這里對傳入的參數又進行了一次url解碼。
因此我們可以將【?】進行兩次url編碼,構造如下url:
http://localhost/phpMyAdmin/index.php?kk=phpinfo();&target=db_sql.php%253F/../../../MySQL/data/test/hack.frm
checkPageValidity函數對傳入的target參數進行判斷,target參數的值開始到【?】的文件需要在白名單whitelist內。
判斷成立后在index.php文件中便直接使用inclde函數進行文件包含,由此我們利用兩次url編碼的方法便繞過了檢測。
這里可以利用包含MySQL自帶的配置文件my.ini來判斷當前路徑。
找出MySQL文件的路徑后,即可利用創建表的方式寫入webshell,再利用這個漏洞進行包含,即可getshell。
創建表之后查看數據庫文件,成功寫入。
利用該漏洞包含給文件,成功getshell。
注意☆☆☆:這里寫入的一句話需要用GET方式,POST方式嘗試過無法成功,至於如何getshell(大馬),可以參考我的上一篇文章。
https://www.cnblogs.com/fox-yu/p/9134848.html
笨鳥先飛早入林,笨人勤學早成材。
轉載請注明出處:
撰寫人:fox-yu http://www.cnblogs.com/fox-yu/