cve-2018-12613-PhpMyadmin後台文件包含漏洞

前言

  • 剛開始復現這個漏洞的時候是在自己的本機上然後跟著大佬的復現步驟可是沒有預期的結果最後看了另一篇文章
    當時整個人都麻了
              

首先何為phpMyAdmin

根據官方的說明phpMyAdmin 是一個用PHP編寫的免費軟體工具,旨在 通過 Web處理MySQL的管理。phpMyAdmin 支援對 MySQL 和 MariaDB 的廣泛操作。經常使用的操作(管理資料庫、表、列、關係、索引、用戶、許可權等)可以通過用戶介面執行,同時您仍然可以直接執行任何 SQL 語句。

  大家也該是不陌生的,我想最開始學習php的時候應該有相當一部分人是從phpstudy開始的而在高版本的phpstudy中會自動為我們安裝phpMyAdmin,說是安裝其實就是在www下的一個文件夾

下面我們開始介紹該漏洞

1.漏洞的位置

  該漏洞在phpmyadmin的index.php文件大約在第50行左右

  • 首先事檢查target是否為空
  • 然後是檢查target是否為字元串
  • 再然後是判斷target是否存在於target_blacklist中而在該數組中就只用import和export兩個所以還是很容易繞過的
  • 最後是一個來自Core文件的一個checkPageVaalidity函數,Core在phpMyAdmin\libraries\classesCore.php中

  然後我們進入checkPageVaalidity函數

  • 該函數要兩個參數可是我們在index.php中發現我們就傳入一個參數這個參數就是$page
  • 首先會判斷$whitelist參數是否為空如果是空的會賦予一個默認的值這個數組是

    這裡就不全都展示了,確實很多
  • 我們可以發現在第三個if的時候會查看我們傳入的target是否在給定的數組裡,只有在的時候才會返回true
  • 而在第四個if的時候是會以?作為截取的標誌來截取?前面的字元串判斷是否存在於數組$goto_whitelist中,phpmyadmin的開發團隊考慮的很全面這個判斷就是考慮到target後面可能還有參數的情況這樣判斷就可以保證target帶有參數也能正常運行,可是就是因為考慮的太全面了所以在這裡就有一個漏洞
  • 第5個if就是在對target解碼後在截取判斷了一遍。

在說這個漏洞之前我們先看一個php特性雙重編碼

  在php中我們對?進行雙重編碼()在傳個服務端是服務端解碼就會是%3f而這是php就會把%3f之前的文件當成文件夾(這個漏洞的發現大佬是真的牛!!!!!)接下來做一個實驗

  首先我們先建立三個文件

index222.php

mmmm

結果

  現在我們回歸正題因為在checkPageVaalidity函數中允許我們在target後面在帶參數這漏洞不就來了嗎!!!

  之前看大佬的文章發現有一個general_log方法(這個還不會之後會補上的)這裡我們就用大佬們常用的session文件包含方式。先說明各個系統session文件的存儲位置Macos的session保存目錄為/var/tmp/,Linux的session保存目錄為/var/lib/php/sessions,Windows是在tmp/tmp/下,這裡我遇到了一個bug或許是因為我的phpmyadmin4.8.0是後添加的,這裡我找不到對應的session文件就很迷。我做實驗是在18號可是就是沒有那天的session文件而且在整個文件中也沒有。

但是可以發現我們在進行執行sql命令是時我們的命令時被記錄在相應的seesion文件里的注意看最後兩個session記錄可以發現在我們查詢前後的記錄是不同的

最後預期的payload就是127.0.0.1/phpmyadmin-4.8.0/index.php?target=db_sql.php%253f/../../../../../../tmp/tmp(sess_…………)

最後我們看一道題:

進入之後可以發現有一串亂碼

這裡什麼什麼都沒有也是迷了半天因為我的御劍啥也沒掃出來,之後是看到題目是有一個資料庫才想起來是不是有phpmyadmin:

這裡可以看到版本是4.8.1所以我們可以用PhpMyadmin後台文件包含漏洞然後就是
payload = //37faeb76-df25-4860-b7b1-d62d17a00186.node4.buuoj.cn:81/phpmyadmin/?target=db_datadict.php?%253f/../../../../../../../../etc/passwd


發現有回饋所以說可以。

  這裡說明一下這個../可以多加但不可以少,這樣可以保證能讓其返回到跟文件夾,還有就是db_datadict.php是可以替換的只要是$whitelist數組裡的都可以哦
最後就是:payload=//37faeb76-df25-4860-b7b1-d62d17a00186.node4.buuoj.cn:81/phpmyadmin/?target=db_datadict.php?%253f/../../../../../../../../flag

  • 今天又是菜雞刷題的一天,但我一定要刷跟跟多的題成為更大的菜雞。

參考:
//www.phpmyadmin.net/
//blog.csdn.net/Mikasa_/article/details/88425166
//blog.csdn.net/Mikasa_/article/details/88594749
//www.cnblogs.com/0daybug/p/13494650.html