QCMS前台命令執行漏洞分析


從入口點開始看

 

 定義了很多常量,17行LIB==Lib文件夾

18行包含Lib/X.php

 

 又設置了很多常量,包含了一系列配置文件

36行調用了路由,跟進

 

 進來觸發構造方法,使$this->_default = site_config(),跟進

 

 返回了一個數組,因此$this->_default = 返回的數組

之后又調用了view_controller函數,跟進

定義了$controller_arr = _fetch_url函數

然后如果$controller_arr為空的話,就會直接退出

79行檢查類的方法是否存在(以_Action結尾),如果存在的話,使用回調函數,不存在的話,返回err

該CMS還要注意.htaccess這個重定向文件:

 

 這個文件的意思是:

$1基本上是從字符串的開頭和結尾捕獲的所有內容。換句話說,$1 = (.*)。

在我們的重寫中,^表示字符串的開始,(.*)說要匹配任何東西,而$表示字符串的結束。因此,基本上,它意味着從字符串開始到結束的所有內容,並將該值賦值為$1。

所以如果我輸入www.example.com/tacos-are-good,然后$1 = "tacos-are-good"。所以你的最終重寫將是www.example.com/index.php/tacos-are-good。

因此,由於這個重定向文件,我們無法訪問到www.example.com/tacos-are-good這個漏洞點,但我們可以使用burp抓包改包,不通過瀏覽器訪問來繞過。

下面來看漏洞點

 

 漏洞點存在於err_Action函數中,首先給出payload:

/home/err/../../&ipconfig>robots.txt&/../lib/X_w160_h160.php

$ext截取了給出payload中的后4位,也就是.php

$url_arr以下划線為界將payload切割,變成一個數組:  /home/err/../../&ipconfig>robots.txt/../lib/X       _ w160       _ h160   .php

如果該數組長度小於2,就會推出,我們這里長度大於2

接下去寬為數組的鍵1,為160,高也為160

$noWaterMark為空,程序會在兩個160前面拼接_w和_h

$path會去匹配文件所在的文件夾,這里因為我們payload中最終的文件為X.php,因此$path=/lib

 

 接下去,它的寬和高必須滿足它的白名單,否則會直接退出,payload中寬和高滿足

我們的payload滿足程序中的所有條件,因此會直接帶入exec函數命令執行。

payload: /home/err/../../&ipconfig>robots.txt&>/../lib/X_w160_h160.php 

進入err函數后向上翻2層來到根目錄,將ipconfig的結果保存在robots.txt中


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM