禪知Pro 1.6 前臺任意文件讀取 | 代碼審計

禪知 Pro v1.6 前臺任意文件讀取 | 代碼審計php

 

蟬知專業版是基於蟬知企業門戶系統開源版開發,繼承了蟬知自己的優秀功能。相對於蟬知開源版加強了商品的屬性自定義、屬性價格定製、物流跟蹤、微信支付、微信登陸、手機短信等功能。蟬知專業更加註重企業網站的營銷推廣。html

 

文件讀取漏洞好好分析下。禪知Pro 1.6.1 已經修復了這個漏洞。數據庫

首先安裝,安裝成功,文末分享源碼。微信

 

接下來開始代碼審計,漏洞分析。ide

路徑:D:\wamp\www\test\chanzhiPro1.6.php5\chanzhieps\www\file.php

 

首先是初始化了一些配置,定義咱們傳進來的參數。函數

第19行,dirname() 函數返回路徑中的目錄部分。rtrim() 函數移除字符串右側的空白字符或其餘預約義字符。微信支付

$dataRoot 是咱們可讀取文件的路徑網站

 

 

接着走到了 21--32 行,能夠看到這段代碼中咱們可控的參數有 $objectType 和 $pathname spa

$objectType 傳入字符串 source 或者 slide 後,$savePath = $dataRoot  ,$dataRoot 會賦值給 $savePath3d

接下來跳出 if 判斷語句,$realPath = $savePath . $pathname; 傳入的 $savePath . $pathname 拼接給了 $realPath

再接着往下看,33--56行

判斷 $realPath 是否存在,而後再通過 php 的三元運算。把 $realPath 變量再次賦值給 $filePath ;

strpos() 函數查找字符串在另外一字符串中第一次出現的位置。

接着又是一些判斷,直接來看第53行。

來到 $mime 這裏,進入 getMimetype() 函數

 

這個函數特別長,從125行到最後。函數定義了 http mime 頭,這裏沒什麼要分析的,接着上面的往下分析

在代碼開頭第14行,$objectType 變量被定義爲$_GET['o'] ,

在代碼開頭第16行,$extension 變量被定義爲$_GET['t'] ,

咱們讀文件的話天然以txt的格式讀。

而後再接着往下走,走到了第56行。fopen() 函數打開文件或者 URL。

fopen() 函數直接讀取了咱們的文件路徑。到這裏就夠了,就能夠直接讀取文件了。下面的57行--123行是對 $handle 和 $mime 作一些判斷和操做。就不分析了。

這裏咱們直接構造文件讀取的 payload :

http://127.0.0.1/chanzhiPro1.6.php5/chanzhieps/www/file.php?pathname=../file.php&t=txt&o=source

 

讀取 system/config/config.php

http://127.0.0.1/test/chanzhiPro1.6.php5/chanzhieps/www/file.php?pathname=../../system/config/config.php&t=txt&o=source

 

數據庫的帳號密碼在 system/config/my.php 文件裏,因此讀取下數據庫帳號密碼。

http://127.0.0.1/test/chanzhiPro1.6.php5/chanzhieps/www/file.php?pathname=../../system/config/my.php&t=txt&o=source

 

至此,任意文件讀取漏洞分析結束!

 

漏洞修復:

在最新版拼接路徑處加入 realpath() 函數去除目錄跳躍的操做

並使用 strpos() 函數判斷咱們傳入的路徑 $realPath 是否在可讀取的路徑 $dataRoot

 

 

源碼分享(連接: https://pan.baidu.com/s/1X-9zfSZk05B0OTvJoUytKA 密碼: w5tp)

本文連接(http://www.cnblogs.com/Oran9e/p/9055004.html),轉載請註明!

相關文章
相關標籤/搜索