溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決正則使用不當導致的路徑穿越問題

發(fā)布時間:2021-12-29 17:13:07 來源:億速云 閱讀:198 作者:小新 欄目:網(wǎng)絡管理

小編給大家分享一下如何解決正則使用不當導致的路徑穿越問題,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

 Forst Pattern

題目叫福斯特模式,代碼如下

如何解決正則使用不當導致的路徑穿越問題

漏洞解析

這一關考察的內(nèi)容是由正則表達式不嚴謹導致的任意文件刪除漏洞, 導致這一漏洞的原因在 第21行preg_replace 中的 pattern 部分 ,該正則表達式并未起到過濾目錄路徑字符的作用。[^a-z.-_]  表示匹配除了 a 字符到 z 字符、. 字符到 _ 字符之間的所有字符。因此,攻擊者還是可以使用點和斜杠符號進行路徑穿越,最終刪除任意文件,例如使用 payloadaction = delete&data = ../../ config.php,便可刪除 config.php 文件。

preg_replace:(PHP 4, PHP 5, PHP 7)

功能 : 函數(shù)執(zhí)行一個正則表達式的搜索和替換

定義mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

搜索 subject 中匹配 pattern 的部分, 如果匹配成功將其替換成 replacement 。

##實例分析

本次實例分析,我們選取的是 WeEngine0.8 版本。漏洞入口文件為 web/source/site/category.ctrl.php ,我們可以看到下圖 14行 處調(diào)用了 file_delete 函數(shù),而這是一個文件刪除相關操作,我們可以看一下該函數(shù)的具體定義。下圖是入口文件代碼:

如何解決正則使用不當導致的路徑穿越問題

file_delete 這一函數(shù)可以在 framework/function/file.func.php 文件中找到,該方法功能用于檢測文件是否存在,如果存在,則刪除文件。但是查看上下文發(fā)現(xiàn),程序并沒有對文件名 $file 變量進行過濾,所以文件名就可以存在類似 ../ 這種字符,這樣也就引發(fā)任意文件刪除漏洞,file_delete 函數(shù)代碼如下:

如何解決正則使用不當導致的路徑穿越問題

現(xiàn)在我們在回溯回去,看看 $file 變量從何處來。實際上,上圖的 $file 變量對應的是 $row['icon'] 的值,也就是說如果我們可以控制 $row['icon'] 的值,就可以刪除任意文件。那么我們來看看 $row 變量從何而來。該變量就在我們剛剛分析的第一張圖片中( web/source/site/category.ctrl.php 文件),該值為變量 $navs 中的元素值,具體代碼如下:

如何解決正則使用不當導致的路徑穿越問題

我們再往上看,即可找到 $navs 變量的取值情況。可以看到 $navs 變量的是是重數(shù)據(jù)庫 site_nav 表中取出的,包含了 iconid 兩個字段,具體代碼如下:

$navs = pdo_fetchall("SELECT icon, id FROM ".tablename('site_nav')." WHERE id IN (SELECT nid FROM ".tablename('site_category')." WHERE id = {$id} OR parentid = '$id')", array(), 'id');

現(xiàn)在我們要做的,就是找找看數(shù)據(jù)庫中的這兩個字段是否可以被用戶控制。我們繼續(xù)往前查找,發(fā)現(xiàn)了如下代碼:如何解決正則使用不當導致的路徑穿越問題

site_nav 表中的數(shù)據(jù),對應的是 $nav 變量。我們繼續(xù)往上尋找 $nav 變量,發(fā)現(xiàn) $nav['icon'] 變量是從 $_GPC['iconfile'] 來的,即可被用戶控制( 下圖 第21行 )。這里的 $nav['icon'] 變量,其實就是我們文章開頭分析的傳入 file_delete 函數(shù)的參數(shù),具體代碼如下:

如何解決正則使用不當導致的路徑穿越問題

由于 $nav['icon'] 變量可被用戶控制,程序有沒有對其進行消毒處理,直接就傳入了 file_delete 函數(shù),最終導致了文件刪除漏洞。至此,我們分析完了整個漏洞的發(fā)生過程,接下看看如何進行攻擊。

##漏洞驗證

訪問url:http://xxx.xxx.xxx.xxx/WeEngine/web/index.php?c=account&a=display ,點擊管理公眾號:

如何解決正則使用不當導致的路徑穿越問題

找到分類設置,點擊添加文章分類。這里對應的url為:http://xxx.xxx.xxx.xxx/WeEngine/web/index.php?c=site&a=category,實際上表示 site 控制器的 category 模塊,即對應 category.ctrl.php 文件。

如何解決正則使用不當導致的路徑穿越問題

選擇對應的內(nèi)容,進入 if($isnav) 判斷:

如何解決正則使用不當導致的路徑穿越問題

在上傳圖標位置輸入要刪除文件的路徑

如何解決正則使用不當導致的路徑穿越問題

我們建立 delete.txt 文件,用于測試任意文件刪除:

如何解決正則使用不當導致的路徑穿越問題

我們點擊刪除時,就會調(diào)用 file_delete 函數(shù),同時就會刪除掉我們插入到數(shù)據(jù)庫中的圖片名:

如何解決正則使用不當導致的路徑穿越問題

如何解決正則使用不當導致的路徑穿越問題

這個類型任意文件刪除有點類似于二次注入,在添加分類時先把要刪除的文件名稱插入到數(shù)據(jù)庫中,然后點擊刪除分類時,會從數(shù)據(jù)庫中取出要刪除的文件名。

##修復建議

漏洞是沒有對 $row['icon'] 參數(shù)進行過濾,可以將文件名內(nèi)容加入目錄階層字符,造成任意文件刪除漏洞,所以我們要在傳入的參數(shù)中過濾"../"等目錄階層字符,避免目錄穿越,刪除其他文件夾下文件。我們在修復中可以過濾掉 $row['icon'] 中的目錄穿越字符,引入我們自定義的一個函數(shù) checkstr 函數(shù)。同時 $row['icon'] 只是文件的名稱,并非是一個路徑,因此過濾字符并不會影響到實際功能,對此修復意見我們提供如下代碼:

如何解決正則使用不當導致的路徑穿越問題

結語

看完了上述分析,不知道大家是否對 路徑穿越問題 有了更加深入的理解,文中用到的CMS可以從 這里 下載(密碼:hgjm) 下載,當然文中若有不當之處,還望各位斧正。如果你對我們的項目感興趣,歡迎發(fā)送郵件到 hongrisec@gmail.com 聯(lián)系我們。Day6 的分析文章就到這里,我們最后留了一道CTF題目給大家練手,題目如下:

// index.php
<?php
include 'flag.php';
if  ("POST" == $_SERVER['REQUEST_METHOD'])
{
    $password = $_POST['password'];
    if (0 >= preg_match('/^[[:graph:]]{12,}$/', $password))
    {
        echo 'Wrong Format';
        exit;
    }
    while (TRUE)
    {
        $reg = '/([[:punct:]]+|[[:digit:]]+|[[:upper:]]+|[[:lower:]]+)/';
        if (6 > preg_match_all($reg, $password, $arr))
            break;
        $c = 0;
        $ps = array('punct', 'digit', 'upper', 'lower');
        foreach ($ps as $pt)
        {
            if (preg_match("/[[:$pt:]]+/", $password))
            $c += 1;
        }
        if ($c < 3) break;
        if ("42" == $password) echo $flag;
        else echo 'Wrong password';
        exit;
    }
}
highlight_file(__FILE__);
?>
// flag.php
<?php $flag = "HRCTF{Pr3g_R3plac3_1s_Int3r3sting}";?>

以上是“如何解決正則使用不當導致的路徑穿越問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI