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>

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

相关推荐
BingoGo18 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack18 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack2 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo2 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack3 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理3 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082853 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe3 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5
一名优秀的码农3 天前
vulhub系列-14-Os-hackNos-1(超详细)
安全·web安全·网络安全·网络攻击模型·安全威胁分析
努力的lpp3 天前
SQLMap CTF 常用命令全集
数据库·web安全·网络安全·sql注入