国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

PHP繞過(guò)禁用函數漏洞的原理

發(fā)布時(shí)間:2021-09-27 17:30 來(lái)源:億速云 閱讀:0 作者:chen 欄目: 網(wǎng)絡(luò )安全 歡迎投稿:712375056

這篇文章主要講解了“PHP繞過(guò)禁用函數漏洞的原理”,文中的講解內容簡(jiǎn)單清晰,易于學(xué)習與理解,下面請大家跟著(zhù)小編的思路慢慢深入,一起來(lái)研究和學(xué)習“PHP繞過(guò)禁用函數漏洞的原理”吧!

漏洞簡(jiǎn)介

PHP 發(fā)布公告,舊版本的 php_array_merge_recursive 函數中存在UAF風(fēng)險,被利用可能導致用來(lái)繞過(guò)禁用函數。

受影響的版本

PHP 7.2 - 7.4.9

安全專(zhuān)家建議用戶(hù)盡快升級到安全版本,以解決風(fēng)險。

漏洞原理

一、array_merge_recursive 函數實(shí)現

在 array_merge_recursive 函數的實(shí)現中,通過(guò)遍歷源數組鍵值,如果鍵值不存在,則將對應的值直接插入目標數組;如果鍵值存在,則查詢(xún)相應的目標數組。在目標數組不存在此鍵值時(shí),將鍵值與相應的值插入目標數組;如果存在相同的鍵值,則會(huì )嘗試將相應的值加入到目標數組中。具體處理如下圖,在目標值為 NULL 時(shí),將其轉變?yōu)閿到M類(lèi)型并在數組中加入 NULL,在源數組中的值為對象類(lèi)型時(shí)將其轉換為數組類(lèi)型,嘗試為 src_entry 添加引用后將 src_zval 添加到數組中;如果源數組中的值類(lèi)型為數組則遞歸調用 php_array_merge_recursive 函數。

、原理分析

在嘗試為源數組中的值添加引用計數的時(shí)候錯誤地調用了 Z_TRY_ADDREF_P(src_entry), src_entry 此時(shí)為對源數組中的值的引用,此時(shí)引用計數被添加到了引用而不是源數組中的值。

如果在 array_merge_recursive 函數中傳入可變的字符串(通過(guò)直接賦值獲得的字符串不可變,在嘗試添加引用計數時(shí)會(huì )失?。?,此時(shí) src_zval 即可變字符串的引用計數并沒(méi)有增加,在數組被銷(xiāo)毀時(shí),因為可變字符串的引用計數提前變?yōu)?0 導致 UAF。

三、利用分析

注: 以下調試直接在 php 調試而不是在加載 php 調試,但是差別不大。

1、在字符串被釋放后,創(chuàng )建一個(gè)新的對象占位,進(jìn)行類(lèi)型混淆,此時(shí)字符串的 len 被新創(chuàng )建對象的 ce 覆蓋。ce 是一個(gè)地址,所以后續不會(huì )影響字符串的寫(xiě)入。

占位前后對比圖如下:

字符串對象被釋放后,創(chuàng )建對象前:

創(chuàng )建對象后:

2、讀取新創(chuàng )建對象的 handlers 方便之后泄露內存信息,handers 的值即為上圖的 0x0000000008dfe500,在后面可以達到任意內存讀取后可以用來(lái)泄露 php 基地址。讀取新創(chuàng )建對象中包含堆地址的區域,獲取被釋放的字符串地址,例如可以讀取 0x7ffffb080540 中的堆地址,減去 0xc8 即為字符串對象中的字符串地址 hex(0x00007ffffb0805b0 - 0xc8) = 0x7ffffb0804e8 即為字符串對象的 val 屬性的地址。

3、將新創(chuàng )建對象的一個(gè)屬性的值指向的類(lèi)型改寫(xiě)為引用,引用的地址為一個(gè)偽造的引用字符串對象??梢詫⑿聞?chuàng )建對象的第一個(gè)屬性即 properties_table 數組中的第一個(gè)元素的類(lèi)型改為引用,地址改為偽造的引用字符串對象的地址。地址0x7ffffb0804f8 保存的即為新創(chuàng )建對象的第一個(gè)屬性的地址,地址0x7ffffb080500 中存儲的 0xa 代表引用類(lèi)型。

其指向的地址 0x00007ffffb080548 保存的為偽造引用對象的地址,偽造的對象的第三個(gè)八字節需置為 6 (引用對象的類(lèi)型)。引用字符串對象的內存布局如下圖??梢钥吹?,引用中保存類(lèi)型為 0x6 代表字符串類(lèi)型,但是地址為 0x0,之后可以通過(guò)寫(xiě)入任意地址來(lái)達到內存讀取。

4、通過(guò)修改偽造的字符串的起始地址來(lái)達到任意內存讀取,利用之前泄露的 handlers 地址來(lái)獲取 elf 基址,之后遍歷內存獲取 zif_system 函數的地址。

5、偽造一個(gè)閉包對象,從一個(gè)真實(shí)存在的閉包對象拷貝其存儲的值,修改函數類(lèi)型為內置函數類(lèi)型,has_dimension 屬性地址為 zif_system,修改后如下圖。

6、修改對象的一個(gè)屬性地址為偽造的閉包對象的地址,調用對象的屬性函數即可完成禁用函數的繞過(guò)。

漏洞驗證

一、在7.4.5 版本中進(jìn)行攻擊嘗試

在目標服務(wù)器上傳利用腳本,執行命令。

(視頻地址:https://v.qq.com/x/page/c31651dla6g.html)

二、7.4.10 版本修復分析

修改 Z_TRY_ADDREF_P(src_entry) 為 Z_TRY_ADDREF_P(src_zval)。

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

php
国模无码视频一区二区三区| 韩国无码无遮挡在线观看| 真人性视频全过程视频| 色吊丝AV中文字幕| 国产乱人对白| 人妻AV中文系列|