中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

php反序列化之字符串逃逸實例分析

這篇文章主要講解了“php反序列化之字符串逃逸實例分析”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“php反序列化之字符串逃逸實例分析”吧!

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),冊亨企業(yè)網(wǎng)站建設(shè),冊亨品牌網(wǎng)站建設(shè),網(wǎng)站定制,冊亨網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,冊亨網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

php反序列化之字符串逃逸實例分析

php反序列化–字符串逃逸

PHP反序列化的字符串逃逸,一共分有兩種情況,情況一:過濾后字符串變多,情況二:過濾后字符變少(本篇文章默認(rèn)已有反序列化相關(guān)知識基礎(chǔ))

過濾后字符串變多

以ctfshow-web262為例講解:

error_reporting(0);class message{
    public $from;
    public $msg;
    public $to;
    public $token='user';
    public function __construct($f,$m,$t){
        $this->from = $f;
        $this->msg = $m;
        $this->to = $t;
    }}$f = $_GET['f'];$m = $_GET['m'];$t = $_GET['t'];if(isset($f) && isset($m) && isset($t)){
    $msg = new message($f,$m,$t);
    $umsg = str_replace('fuck', 'loveU', serialize($msg));
    setcookie('msg',base64_encode($umsg));
    echo 'Your message has been sent';}highlight_file(__FILE__);

這段代碼,首先要get傳入3個參數(shù),然后序列化傳入的包含有這三個參數(shù)的msg函數(shù),之后將里面包含的fuck字符串替換成為loveU,重新賦值給umsg變量,并將該變量base64編碼,設(shè)置為cookie

根據(jù)題中注釋提示,得到message.php內(nèi)容,為

highlight_file(__FILE__);include('flag.php');class message{
    public $from;
    public $msg;
    public $to;
    public $token='user';
    public function __construct($f,$m,$t){
        $this->from = $f;
        $this->msg = $m;
        $this->to = $t;
    }}if(isset($_COOKIE['msg'])){
    $msg = unserialize(base64_decode($_COOKIE['msg']));
    if($msg->token=='admin'){
        echo $flag;
    }}

如果設(shè)置了cookie且msg中的token為admin,即可輸出flag

由index.php內(nèi)容可知,進行了一步replace,導(dǎo)致每輸入一個fuck,就會多生成一位,故我們可以利用這個特點進行字符串逃逸,首先本地嘗試一下

由題可知,我們需要修改原class類中的token值為admin,然后一起傳入三個參數(shù),f,m,t,我們可以利用其中一個參數(shù),這里利用的參數(shù)是m,為了避免需要逃逸的字符串太多,我們可以先寫f t參數(shù),本地隨便傳入值,輸出序列化結(jié)果

下圖中";s:2:"to";s:1:"1";s:5:"token";s:5:"admin";}即為我們要逃逸的部分,一共44個字符,故我們需要m輸入44個fuck來逃逸
php反序列化之字符串逃逸實例分析

php反序列化之字符串逃逸實例分析

逃逸成功,上下兩個字符串均為正常的序列化字符串,復(fù)制payload前往執(zhí)行
php反序列化之字符串逃逸實例分析

字符串變多原理詳解

這道題就用到了php反序列化中字符串逃逸的知識

首先看本地實驗的正常返回結(jié)果

php反序列化之字符串逃逸實例分析

當(dāng)傳入x時,定義的替換函數(shù),將一個x替換為兩個x后得到的                        o                    l                    d                    的                    值                    為                    ‘                    a                    :                    2                    :                             i                         :                         0                         ;                         s                         :                         4                         :                         "                         h                         a                         n                         x                         x                         "                         ;                         i                         :                         1                         ;                         s                         :                         7                         :                         "                         I                         a                         m                         11                         "                         ;                            ‘                    ,                    長                    度                    不                    匹                    配                    ,                    會                    出                    現(xiàn)                    報                    錯                    ,                    進                    而                    導(dǎo)                    致                         old的值為`a:2:{i:0;s:4:"hanxx";i:1;s:7:"I am 11";}`,長度不匹配,會出現(xiàn)報錯,進而導(dǎo)致          old的值為‘a(chǎn):2:i:0;s:4:"hanxx";i:1;s:7:"Iam11";‘,長度不匹配,會出現(xiàn)報錯,進而導(dǎo)致old的進一步反序列化失敗
php反序列化之字符串逃逸實例分析

當(dāng)然如果我們可以將hanx的字符串長度由4改為5時,雖然最開始輸入了4個字符但正常執(zhí)行,并且name由hanx變?yōu)榱?code>hanxx

PHP 在反序列化時,底層代碼是以 ; 作為字段的分隔,以 } 作為結(jié)尾(字符串除外),并且是根據(jù)長度判斷內(nèi)容的 ,同時反序列化的過程中必須嚴(yán)格按照序列化規(guī)則才能成功實現(xiàn)反序列化 。

由上面的輸出結(jié)果可以看到x被換成了xx,然而序列化的結(jié)果中數(shù)值仍然是原來的4,我們可以根據(jù)字符串在經(jīng)過過濾函數(shù)后字符串變多的特點找到漏洞

漏洞原理:我們可以利用等長的可以用來閉合的字符串傳入數(shù)據(jù),假設(shè)我們需要傳入age為woaini,故我們可以利用";i:1;s:6:"woaini";}這個字符串,該字符串一共20位,我們可以通過補充20個x來實現(xiàn)字符串逃逸,最終構(gòu)造的payload如下:

name=maoxxxxxxxxxxxxxxxxxxxx";i:1;s:6:"woaini";}

因為題中已知會將一個x替換為兩個x,故我們可以令x的數(shù)量與上面payload中";i:1;s:6:"woaini";}的數(shù)量相等,這樣既滿足了,序列化之前,name的長度為40(不算前面的mao),又滿足了替換后x擴大一倍,導(dǎo)致引號閉合,那么長度仍為40位,但是我們通過字符串逃逸,傳入了想要的age的值
php反序列化之字符串逃逸實例分析

由圖可知,傳入的age值成功溢出,字符串逃逸成功!

過濾后字符串變少

php反序列化之字符串逃逸實例分析

本地測試如上,初始時name和sign沒有賦值,number為2020,存在字符串逃逸漏洞,假設(shè)我們通過構(gòu)造反序列化字符串逃逸,使number值由2020變?yōu)?002為成功,則可以嘗試構(gòu)造序列化字符串

首先代碼中通過get傳入name和sign參數(shù),之后進行反序列化,并將反序列化的結(jié)果進行字符串替換,輸出替換后的結(jié)果,把反序列化的結(jié)果賦值給fake,分別輸出經(jīng)過改造后的name、sign、number值

正常輸入得到正常輸出:

php反序列化之字符串逃逸實例分析

當(dāng)輸入包含有l(wèi)emon或者shy時,會替換為空,字符串變短導(dǎo)致代碼中反序列化失敗,輸出錯誤:

php反序列化之字符串逃逸實例分析

在上面的反序列化字符串中,控制number值的字符串為";s:6:"number";s:4:"2020";}總長為27,所以我們需要在name變量中設(shè)置被過濾的字符進行置空,該置空部分的字符串,需要保證我們在第二個變量輸入人為補充的序列化字符串時,位數(shù)正好,不報錯

php反序列化之字符串逃逸實例分析

這里sign輸入了YKing";s:4:"sign";s:4:"evan";s:6:"number";s:4:"2002";}其中,YKing用于湊字?jǐn)?shù),補充前面的name變量的長度,保證后續(xù)可以正常反序列化,然后輸入了手工構(gòu)造的sign變量,并賦值,值為多少無所謂,保證序列化正確即可,最后將我們想要的number值2002,補充到sign變量中,并通過}閉合,導(dǎo)致原題中的2020無法反序列化,進而實現(xiàn)number值的覆蓋

name變量的長度,保證后續(xù)可以正常反序列化,然后輸入了手工構(gòu)造的sign變量,并賦值,值為多少無所謂,保證序列化正確即可,最后將我們想要的number值2002,補充到sign變量中,并通過}閉合,導(dǎo)致原題中的2020無法反序列化,進而實現(xiàn)number值的覆蓋

感謝各位的閱讀,以上就是“php反序列化之字符串逃逸實例分析”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對php反序列化之字符串逃逸實例分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

文章名稱:php反序列化之字符串逃逸實例分析
標(biāo)題網(wǎng)址:http://www.rwnh.cn/article40/gcgieo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、面包屑導(dǎo)航網(wǎng)站內(nèi)鏈、ChatGPT關(guān)鍵詞優(yōu)化、移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
琼海市| 凤城市| 启东市| 蛟河市| 长岭县| 香港| 塘沽区| 石台县| 邵武市| 陇川县| 新泰市| 太仓市| 新宾| 资中县| 宜城市| 卢湾区| 汶川县| 工布江达县| 唐河县| 凤庆县| 明溪县| 汨罗市| 天长市| 革吉县| 黄大仙区| 房产| 闻喜县| 乌兰察布市| 吉首市| 卢氏县| 德钦县| 卢氏县| 抚州市| 九龙坡区| 潮安县| 电白县| 建始县| 沁水县| 南华县| 西昌市| 都昌县|