CTFshow 反序列化 web263

本文探讨了一次CTF挑战中的反序列化问题。由于PHP的不同页面session.serialize_handler设置不一致,导致了session反序列化漏洞。通过控制session值,利用User类的魔术方法写入文件,实现远程代码执行。可以使用base64编码后的payload在index.php中设置cookie,然后在check.php或inc/inc.php中触发反序列化,创建并访问log-1.php以验证成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


源码

也没有什么别的信息,扫一下目录,下载www.zip拿到源码


思路

知识点:
  1. php在session存储和读取时,都会有一个序列化和反序列化的过程,PHP内置了多种处理器用于存取$_SESSION数据,都会对数据序列化和反序列化,源码中有session_start的时候会读取session,从而进行反序列化.
  2. php . ini 中默认 session.serialize_handler 为 php_serialize,而 index.php 中将其设置为 php ,这个差异就导致了 sesssion 反序列化问题。
  3. php有三种处理器对$_SESSION数据进行序列化和反序列化。

php_binary 键名的长度对应的ascii字符+键名+经过serialize()函数序列化后的值
php 键名+竖线(|)+经过serialize()函数处理过的值
php_serialize 经过serialize()函数处理过的值,会将键名和值当作一个数组序列化

先找几个关键点

index.php

$_SESSION['limti']键名写错了,应该是limit,所以永远不成立,我们可以通过$_SESSION['limit']=base64_decode($_COOKIE['limit'])来控制session的值

	session_start();
	//超过5次禁止登陆
	if(isset($_SESSION['limit'])){
   
		$_SESSION['limti']>5?die("登陆失败次数超过限制"):$_SESSION['limit']=base64_decode($_COOKIE['limit']);
		$_COOKIE['limit'] = base64_encode(base64_decode
### CTFShow平台中的反序列化挑战解决方案 #### 背景介绍 CTFShow是一个提供多种信息安全竞赛题目和教程的学习平台。其中涉及到了许多Web安全漏洞的实践练习,包括SQL注入、XSS攻击以及反序列化漏洞等。 #### 反序列化的概念 反序列化是指将保存的对象状态信息转换为对象的过程。如果应用程序允许用户控制的数据参与此过程,则可能导致严重的安全隐患,如远程代码执行(RCE)[^3]。 #### CTFShow上的反序列化挑战实例 在CTFShow平台上存在多个有关PHP反序列化的挑战案例。通常情况下,这些挑战会给出一个带有已知类定义的服务端脚本,并提示参与者通过构造恶意输入来触发特定行为完成解题目标。 对于此类问题的一般解决思路如下: 1. **分析源码** 查看给定程序逻辑,识别出可能被利用的地方。特别是那些接受外部可控参数并对其进行unserialize()操作的位置[^4]。 2. **寻找可操控点** 寻找能够影响到`__destruct()` 或者 `__wakeup()` 魔术函数调用链路的机会。因为当对象销毁时这两个特殊成员会被自动调用,在这里可以植入自定义指令实现任意命令执行等功能[^5]. 3. **构建Payload** 利用上述发现创建合适的payload字符串,使其能够在服务器上成功解析成预期形态从而达成目的。这一步骤往往需要结合具体环境下的其他条件共同考虑,比如php版本差异等因素都会带来不同表现形式[^6]. ```php // 假设有一个简单的易受攻击的 PHP 类 class VulnerableClass { public $command; function __destruct(){ system($this->command); } } // 构造 Payload 实现反弹 Shell 的例子 (仅作教学用途) $malicious_data = 'O:13:"VulnerableClass":1:{s:7:"command";s:9:"whoami > /tmp/output";}' ``` 请注意以上代码仅为说明原理所用,在实际环境中切勿非法尝试!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值