<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    CVE-2022-31625 PHP內存未初始化導致RCE漏洞成因分析和復現

    一顆小胡椒2022-06-11 22:49:56

    漏洞信息

    接上文:

    CVE-2022-31626 PHP遠程命令執行漏洞成因分析與復現
    XCyber,公眾號:且聽安全CVE-2022-31626 PHP遠程命令執行漏洞成因分析與復現

    PHP 同時還通報了另一個高危漏洞信息,編號為 CVE-2022-31625:

    在 `PHP_FUNCTION` 中分配在堆上的 `char*` 數組沒有被清除,如果發生轉換錯誤,將會調用 `_php_pgsql_free_params` 函數,由于數組沒有初始化,導致可以釋放之前請求的值,導致遠程代碼執行。漏洞影響版本:

    •  5.3.0 <= PHP 5.x <= 5.6.40
    •  7.0.1 <= PHP 7.x < 7.4.30
    •  8.0.0 <= PHP 8.0.x < 8.0.20
    •  8.1.0 <= PHP 8.1.x < 8.1.7

    漏洞成因

    在 `PHP_FUNCTION` 中,利用 `safe_emalloc` 申請指針數組 `params` ,但是沒有進行初始化,導致 `params` 數組中包含有內存中殘留的數據或指針。如果發生異常,代碼會執行 `_php_pgsql_free_params` 函數對整個指針數組進行釋放:

    在 `_php_pgsql_free_params` 函數中,根據數組中元素的總數量 `num_params` 逐個釋放非 0 的指針,但是這個指針可能尚未被未初始化,因此導致非預期的內存釋放:

    這是典型的內存未初始化漏洞,如果攻擊者能夠控制未初始化的內存內容,可以實現任意內存釋放,進而實現釋放后再引用 UAF ,最終實現遠程代碼執行。在最新的 PHP 版本中,已經對該漏洞進行修復,將原來的總數 `num_params` 改為了當前計數值 `i` ,以此來保證所有釋放的指針都是初始化過的:

    漏洞復現

    修改 `php.ini`,啟用 `pgsql` 擴展:

    extension=pgsql
    

    postgres 數據庫安裝:

    sudo apt install postgresql postgresql-contribsudo /etc/init.d/postgresql start
    

    postgres 配置密碼并允許網絡訪問。重啟服務:

    sudo /etc/init.d/postgresql restartsudo /etc/init.d/postgresql status
    

    利用 POC ( `test.php` )觸發漏洞,可以看到 `efree` 釋放了一個錯誤地址導致進程崩潰:

    php.exe -f test.php
    

    修復方式

    該內存未初始化漏洞,容易轉化成 UAF 漏洞,利用難度比 CVE-2022-31626 要簡單。通過遠程堆風水極有可能實現任意內存釋放,進而通過 UAF 實現遠程代碼執行。受影響客戶需要盡快做好補丁升級和防護。

    目前官方已發布修復版本,用戶可升級至以下安全版本:

    •  PHP 8.1.7
    •  PHP 8.0.20
    •  PHP 7.4.30
    php初始化
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    lmxcms代碼審計學習
    2023-03-30 09:40:23
    前方多圖預警,本文適合在wifi狀態下查看前言最近學習php代碼審計,lmxcms很適合去學習代碼審計,因為比較簡單。m=Book&a=reply&id=1) and updatexml--+前臺SQL注入TagsAction.class.php中看不出來$data['name']的值是如何來的,查看的p的方法可以看到type=2的時候為GET傳遞,說明我們可以控制這個參數,繼續看能不能利用查看getNameData的聲明查看oneModel查看oneDB接著在這上面寫個echo $sql;/index.php/?m=search&keywords=b&mid=1&tuijian=id%20or%20;%23這里0x6c對應的是l回顯長度為8425,隨便改個參數,返回包長度變為5403用remen參數回顯為8422寫一個簡單的python腳本就可以測出值import requestsflag=""url="http://127.0.0.1/lmxcms1.4/index.php?
    vulnhub 靶場 napping
    2022-09-29 07:34:39
    信息收集主機發現:sudo nmap -sn 192.168.56.1/24. -sC Performs a script scan using the default set of scripts. It is equivalent to --script=default. Some of the scripts in this category are considered intrusive and should not be run against a target network without permission.-sV Enables version detection, as discussed above. Alternatively, you can use -A, which enables version detection among other things.-p This option specifies which ports you want to scan and overrides the default. Individual port numbers are OK, as are ranges separated by a hyphen . The beginning and/or end values of a range may be omitted, causing Nmap to use 1 and 65535, respectively. So you can specify -p- to scan ports from 1 through 65535. Scanning port zero is allowed if
    又一個 PHP 遠程命令執行漏洞 CVE-2022-31625。在 PHP_FUNCTION中分配在堆上的數組沒有被清除,如果發生轉換錯誤,由于數組沒有初始化,導致可以釋放之前請求的值,導致遠程代碼執行。
    FastCGI與PHP-FPM FastCGI 快速通用網關接口(Fast Common Gateway Interface/FastCGI)是一種讓交互程序與Web服務器通信的協議。FastCGI是早期通用網關接口(CGI)的增強版本。FastCGI致力于減少網頁服務器與CGI程序之間交互的開銷,從而使[服務器可以同時處理更多的網頁請求。
    利用SSRF滲透內網主機
    2021-12-26 07:39:35
    接下來PHP解析器會解析php.ini文件,初始化執行環境,然后處理請求,再以規定CGI規定的格式返回處理后的結果,退出進程,Web server再把結果返回給瀏覽器。這就是一個完整的動態PHP Web訪問流程。
    0x00前言 接到任務,需要對一些違法網站做滲透測試…… 0x01信息收集 根據提供的目標,打開網站如下
    0x00前言接到任務,需要對一些違法網站做滲透測試……最終定位到該系統為某網絡驗證系統下載最新版的代碼到本地,開始審計。
    PHP官方確認,于6月9日,PHP官網發布了該漏洞的修復方案。
    這意味著如果變量名后面附加了圓括號,PHP 將尋找與變量求值結果同名的函數,并嘗試執行它。除其他事項外,這可用于實現回調、函數表等。利用包裝函數將這些構造中的任何一個用作變量函數。這可能是另一種規避阻止 PHP 函數名稱的規則的方法。
    一顆小胡椒
    暫無描述
      亚洲 欧美 自拍 唯美 另类