掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
本篇文章給大家?guī)?lái)了關(guān)于php的相關(guān)知識(shí),其中主要介紹了關(guān)于反序列化字符逃逸的相關(guān)問題,php序列化后的字符串經(jīng)過替換或修改,導(dǎo)致字符串長(zhǎng)度變化,總是先序列化,在進(jìn)行替換修改操作,下面一起來(lái)看一下,希望對(duì)大家有幫助。

推薦學(xué)習(xí):《PHP視頻教程》
本質(zhì):閉合
分類:字符變多、字符變少
共同點(diǎn):
"; $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ò)誤
所以考慮通過其長(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é)果輸出:字符減少
值逃逸
值過濾,前值包后鍵與值(左括號(hào)為止)
"; $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";}

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流