pikachu——php反序列化

php反序列化

两个关键函数:

序列化 serialize()

反序列化 unserialize()

五个魔法函数:

__construct():创建对象时调用

__destruct():对象销毁时调用

__toString():当一个对象被当作一个字符时用

__wakeup():对象序列化之后调用

__sleep():对象序列化之前调用

这一关是更基础的属性直接输出型漏洞, 魔法函数在本关没有利用到,这里给一个魔法函数典型利用场景

pikachu例题:

先去找php后端代码,打开unser.php

这段关键代码的逻辑大概是,用户提交一个序列化的字符串_POST\['o'\],令s = _POST\['o'\],然后php后端代码用unserialize()函数把它变成新的对象 unser,如果这个反序列化函数执行成功,那么,红框内代码 unser-\>test 就会执行,也就是把unser体现在页面上,反之报错提醒

我们按照注释提示构造代码,成功回显

然后我们来分析一下为什么这么构造payload

payload分析:

复制代码
O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

O:长度:"类名":属性数量:{属性列表}

|------------------------------------------|---------------------------------------------|
| 代码碎片 | 含义 |
| O | Object,后面跟着我们对象的完整结构(a:数组,s:字符串,i:整数......) |
| 1 | 对象名长度,这里对象是S |
| "S" | 对象名(类名) |
| 1 | 对象的属性个数,这是只有test一个属性 |
| s:4:"test" | 属性名:s(string 缩写);内容字符串长度:"自定义内容" |
| s:29:"<script>alert('xss')</script>" | 属性值: |

并且在属性列表内部,必定是属性名:属性值,成对出现,举个栗子

复制代码
O:4:"User":2:{s:8:"username";s:5:"admin";s:8:"password";s:6:"123456";}

其中第一个s:8....说明第一个username属性名,后面跟的s5....就是username的值,依次类推后面的一组

所以这里就是属性名为test的属性值<script>alert('xss')</script>

❀❀❀完结撒花!!!❀❀❀

相关推荐
两个人的幸福6 天前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
BingoGo8 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack8 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982079 天前
PHP 扩展——从入门到理解
php
鹏仔先生10 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
云水一下10 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
xingpanvip10 天前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua
零零信安10 天前
零零信安荣登数世咨询《新质·数字安全专精百强(2026)》暗网情报领域,彰显专业实力与创新引领
安全·网络安全·数据泄露·暗网·零零信安
憧憬成为web高手10 天前
l33t-hoster
学习·web安全·网络安全
HackTwoHub10 天前
Sqli-Scanner SQL注入SKILL自动化挖掘SQL注入,零依赖自动化SQL注入挖掘,赏金猎人
数据库·人工智能·sql·web安全·网络安全·自动化·系统安全