如何理解PHP反序列化漏洞

本篇文章為大家展示了如何理解PHP反序列化漏洞,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司公司2013年成立,先為未央等服務(wù)建站,未央等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為未央企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

序列化

是將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^(guò)程。在序列化期間,對(duì)象將其當(dāng)前狀態(tài)寫入到臨時(shí)或持久性存儲(chǔ)區(qū)。以后,可以通過(guò)從存儲(chǔ)區(qū)中讀取或反序列化對(duì)象的狀態(tài),重新創(chuàng)建該對(duì)象。[將狀態(tài)信息保存為字符串]

反序列化

反序列化就是再將這個(gè)狀態(tài)信息拿出來(lái)使用(重新再轉(zhuǎn)化為對(duì)象或者其他的)[將字符串轉(zhuǎn)化為狀態(tài)信息]

特殊寫法

<?=$todo>相當(dāng)于<?php   echo $todo?>

常見函數(shù)

__FILE__     獲取當(dāng)前文件路徑
show_source()    顯示文件源碼
print_r()    可以輸出非字符串

常見魔術(shù)方法

__construct()     對(duì)象創(chuàng)建時(shí)(new)自動(dòng)調(diào)用,但在unserialize()時(shí)不會(huì)自動(dòng)調(diào)用
__destruct()       對(duì)象銷毀時(shí)自動(dòng)調(diào)用
__wakeup()        使用unserialize()函數(shù)時(shí)自動(dòng)調(diào)用
__toString()    當(dāng)對(duì)象被當(dāng)作字符串輸出時(shí)自動(dòng)調(diào)用

flag in ./flag.php

<?php
Class readme{
  public function __toString()
  {
      return highlight_file('Readme.txt', true).highlight_file($this->source, true);
  }
}
if(isset($_GET['source'])){
  $s = new readme();
  $s->source = __FILE__;
  echo $s;
  exit;
}
//$todos = [];
if(isset($_COOKIE['todos'])){
  $c = $_COOKIE['todos'];
  $h = substr($c, 0, 32);
  $m = substr($c, 32);
  if(md5($m) === $h){
      $todos = unserialize($m);
  }
}
if(isset($_POST['text'])){
  $todo = $_POST['text'];
  $todos[] = $todo;
  $m = serialize($todos);
  $h = md5($m);
  setcookie('todos', $h.$m);
  header('Location: '.$_SERVER['REQUEST_URI']);
  exit;
}
?>

<html>
<head>
</head>

<h2>Readme</h2>
<a href="?source"><h3>Check Code</h3></a>
<ul>
<?php foreach($todos as $todo):?>
  <li><?=$todo?></li>
<?php endforeach;?>
</ul>

<form method="post" href=".">
  <textarea name="text"></textarea>
  <input type="submit" value="store">
</form>

首先定義了一個(gè)類,里面的_toString()是一個(gè)魔術(shù)方法,
表示將Readme.txt和source里面的代碼拼接在一起,并高亮顯示。
判斷get傳參中是否有source字符串,
再創(chuàng)建一個(gè)readme類的對(duì)象s,并將當(dāng)前文件路徑的值,賦值給變量s的參數(shù)source,
最后輸入s。
判斷cookie傳參中是否有todos字符串,
如果有將cookie傳參的todos字符串賦給變量c,
變量h表示截取變量c從開始到第32位的字符串,
變量m表示變量c 32位以后構(gòu)成的字符串,
當(dāng)變量m進(jìn)行md5加密后的值等于變量h時(shí),輸出反序列化的變量m。
表示遍歷輸出todos,會(huì)觸發(fā)_toString()方法,
Readme.txt文件是寫死的,只有變量source是可控的,
因此可以通過(guò)將FILE改為flag.php來(lái)返回flag.php的內(nèi)容。

上述內(nèi)容就是如何理解PHP反序列化漏洞,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章題目:如何理解PHP反序列化漏洞
當(dāng)前URL:http://muchs.cn/article26/ghehjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、企業(yè)網(wǎng)站制作網(wǎng)站設(shè)計(jì)公司、網(wǎng)站導(dǎo)航、虛擬主機(jī)Google

廣告

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

營(yíng)銷型網(wǎng)站建設(shè)