日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
PHP反序列化詳細(xì)解析之字符逃逸

本篇文章給大家?guī)?lái)了關(guān)于php的相關(guān)知識(shí),其中主要介紹了關(guān)于反序列化字符逃逸的相關(guān)問(wèn)題,php序列化后的字符串經(jīng)過(guò)替換或修改,導(dǎo)致字符串長(zhǎng)度變化,總是先序列化,在進(jìn)行替換修改操作,下面一起來(lái)看一下,希望對(duì)大家有幫助。

推薦學(xué)習(xí):《PHP視頻教程》

本質(zhì):閉合
分類:字符變多、字符變少
共同點(diǎn):

  1. php序列化后的字符串經(jīng)過(guò)替換或修改,導(dǎo)致字符串長(zhǎng)度變化
  2. 總是先序列化,在進(jìn)行替換修改操作

字符增多

  • 思路:
    根據(jù)序列化后字符串格式與特點(diǎn),字符個(gè)數(shù)標(biāo)識(shí)了后面要識(shí)別的長(zhǎng)度
    要修改某個(gè)屬性就要將其替換,可通過(guò)傳入的字符串控制
    要將前面的雙引號(hào)閉合,再傳入后面要構(gòu)造的字符
    但是此時(shí)與前面字符串長(zhǎng)度不匹配,構(gòu)造無(wú)效
    解決:根據(jù)替換字符長(zhǎng)度變化,將構(gòu)造的字符串?dāng)D出長(zhǎng)度范圍,成為下一部分
    (要用替換時(shí)的長(zhǎng)度變換填補(bǔ)注入字符串的空缺)
  • tips:
  1. 判斷每個(gè)字符過(guò)濾后會(huì)比原字符多出x個(gè)
  2. 確定要注入的目標(biāo)子串的長(zhǎng)度n
  3. 注入字符重復(fù)n/x遍,并帶上注入字符 (構(gòu)造代碼的長(zhǎng)度÷多出的字符數(shù))
  • 例:
    目標(biāo):修改對(duì)象中一個(gè)數(shù)值,如age要改為20
";
$r = filter(serialize($user));
var_dump($r);
var_dump(unserialize($r));
?>

下面部分可以記作模板,做題時(shí)先輸出看一下

var_dump(serialize($user));    # 序列化
echo "
";
$r = filter(serialize($user)); # 替換后序列化
var_dump($r);
var_dump(unserialize($r));     # 打印反序列化

可以觀察到,每次替換將p改為ww,即每次都多出一個(gè)字符
這就導(dǎo)致反序列化時(shí)長(zhǎng)度分配讀取錯(cuò)誤而輸出錯(cuò)誤
所以考慮通過(guò)其長(zhǎng)度讀取的性質(zhì)來(lái)構(gòu)造字符逃逸

要將10改為20,先確定后面要構(gòu)造的字符串:

原字符串:";i:1;s:2:"10";}
目標(biāo)子串:";i:1;s:2:"20";}

確定長(zhǎng)度:16(即傳入的字符串需要多出16個(gè)字符來(lái)將這些字符放到下一個(gè)屬性的位置上去)
每次多1個(gè)字符,故需要16個(gè)p
故傳入:

結(jié)果輸出:

字符減少

值逃逸

值過(guò)濾,前值包后鍵與值(左括號(hào)為止)


  • 目標(biāo):age改為20
";
$r = filter(serialize($user)); # 替換后序列化
var_dump ($r);
var_dump (unserialize($r));     # 打印反序列
?>

與上面代碼相似,只是此時(shí)是將2個(gè)p替換為一個(gè)w,字符減少
同樣數(shù)值不對(duì)應(yīng)會(huì)反序列化失敗


A后面是傳入的age字符串,計(jì)算構(gòu)造長(zhǎng)度

即要占位這13個(gè)字符
每2個(gè)p變1個(gè)w,相當(dāng)于逃逸一位,故輸入13*2=26個(gè)p,字符長(zhǎng)度標(biāo)識(shí)為26,變?yōu)?3個(gè)w,后面13個(gè)字符占余下13位

payload:

username='pppppppppppppppppppppppppp'
age=A";i:1;s:2:"20";}

總結(jié)

  1. 字符增多
    1. 看第一個(gè)參數(shù)結(jié)尾后的引號(hào)到最后右括號(hào)的長(zhǎng)度(目標(biāo)字符串)n
    2. 看每次替換增量x
    3. 用n/x個(gè)替換字符和構(gòu)造代碼構(gòu)造,傳入序列化對(duì)象
  2. 字符減少
    1. 用第二個(gè)參數(shù)構(gòu)造
    2. 開(kāi)頭設(shè)置閉合:A"(后面再考慮怎么構(gòu)造)
    3. 看第一個(gè)參數(shù)后的右引號(hào)到A有多少個(gè)字符n
    4. 替換減少x個(gè)字符
    5. 創(chuàng)建對(duì)象:
      第一個(gè)參數(shù)傳入n*(x+1)個(gè)替換字符
      第二個(gè)參數(shù)傳入構(gòu)造的字符串

新聞標(biāo)題:PHP反序列化詳細(xì)解析之字符逃逸
本文來(lái)源:http://www.5511xx.com/article/dhppgpe.html