[特殊字符] 一次经典Web漏洞复现:修改序列化对象直接提权为管理员(附完整步骤)

💡 本文通过一个实验靶场,演示如何因为不安全的序列化机制 ,导致普通用户可以直接修改 cookie,伪造管理员身份并删除其他用户。这类漏洞在一些老系统、PHP 项目和不规范框架中仍然很常见


一、漏洞背景:什么是"序列化对象"?

在 Web 系统中,我们经常需要保存用户状态,比如:

  • 是否已登录

  • 用户名

  • 是否为管理员

一些开发者为了方便,会把对象直接 serialize() 序列化,然后存在:

✔ cookie

✔ session token

✔ URL 参数

例如(PHP):

php 复制代码
O:5:"User":2:{s:5:"admin";b:0;s:4:"name";s:6:"wiener";}

其中:admin = b:0 表示 false(普通用户)


❗漏洞发生的关键点

如果这个序列化对象是放在客户端的,并且没有做完整性校验

那么我们可以直接修改它:

把:b:0 改成:b:1

👉 系统就相信你是 管理员


二、实验环境与账号

靶场链接:https://portswigger.net/web-security/deserialization/exploiting/lab-deserialization-modifying-serialized-objects

portswigger靶场提供普通用户账号:靶场提供:用户名:wiener 密码:peter

登录之后进入:/my-account

浏览器会生成如上图所示一个 session cookie

看上去像一串乱码,其实是:👉 URL + Base64 编码后的数据


在 Burp Suite 中打开请求,使用 Inspector 查看 cookie。

解码后内容如下:

a:2:{ s:5:"admin";b:0; s:4:"name";s:6:"wiener"; }

解释一下:

字段 含义
admin 是否管理员
b:0 false(不是管理员)

📌(这里可以放上第一张截图:Inspector 解码后页面)


四、修改序列化对象 → 变成管理员

把请求发送到 Repeater ,找到 cookie 中的 admin 字段:

复制代码

上图b:0 修改为:b:1

Burp 会帮我们:

✔ 自动重新序列化

✔ 自动重新 Base64 编码

✔ 自动更新 cookie

点击 Send


五、结果:后台管理入口出现

这说明:

系统已经认为当前用户是管理员。


六、进入后台并删除用户 carlos

访问:/admin

后台里有一个"删除用户"的接口,我们直接请求:

/admin/delete?username=carlos

请求发送后:

✔ carlos 用户被删除

✔ 实验完成


七、漏洞原理总结(非常适合考试/面试)

🎯 漏洞本质:客户端可控的序列化对象 + 存在敏感权限字段 + 缺乏签名校验

系统错误地相信:

"只要 cookie 里写的是 admin=true,那一定是真的用户"

属于典型的:

✔ 权限提升(Privilege Escalation)

✔ 业务逻辑漏洞

✔ 不安全序列化


八、安全开发防护建议(这一段加分)

安全做法应该是:

1️⃣ 不在客户端存敏感权限信息

管理员判断,必须:

✔ 服务端 session

✔ 数据库重新查询

2️⃣ 即使必须放客户端,也要:

  • 对数据 加签(HMAC)

  • 校验完整性

  • 禁止用户直接篡改

3️⃣ 避免使用 serialize() 直接持久化对象

尤其在:

  • PHP

  • Java

  • Python pickles


九、结语

这个实验虽然简单,但意义很大:

🛑 只要系统把"是否管理员"这种敏感信息交到客户端,我们就可以控制整个系统。

希望通过这篇文章:

✔ 你理解了序列化对象为何危险

✔ 知道了如何发现类似漏洞

✔ 也能在项目中提醒开发避免这种设计

相关推荐
晨旭缘17 小时前
前端视角 | 从零搭建并启动若依后端(环境配置)
前端
金士镧(厦门)新材料有限公司17 小时前
稀土抑烟剂在船舶中的应用:提升航行安全与环保
科技·安全·全文检索·生活·能源
江公望17 小时前
VUE3中,reactive()和ref()的区别10分钟讲清楚
前端·javascript·vue.js
攀登的牵牛花17 小时前
前端向架构突围系列 - 框架设计(二):糟糕的代码有哪些特点?
前端·架构
EndingCoder17 小时前
函数基础:参数和返回类型
linux·前端·ubuntu·typescript
码客前端17 小时前
理解 Flex 布局中的 flex:1 与 min-width: 0 问题
前端·css·css3
Komorebi゛17 小时前
【CSS】圆锥渐变流光效果边框样式实现
前端·css
Lethehong17 小时前
第二届“启航杯“网络安全挑战赛开始啦!
安全·web安全·ctf·启航杯
iosTiov17 小时前
ios生态的分发密钥:企业签、V3签、TF签深度解析与选型指南
安全·ios·团队开发·苹果签名·稳定