8.反序列化
1. 254.
解题思路
触发vipOneKeyGetFlag()
username='xxxxxx' 和 $password='xxxxxx'; 为 真 看 代 码 只 要 传 入
?username=xxxxxx&password=xxxxxx
2. 开始序列化.
- 这里开始序列化了
$user = unserialize($_COOKIE['user']); - 复制ctfShowUser这个类,然后将这个改为true
- 创建一个对象a,并把a序列化 然后url编码输出来(因为这里是以Url模式发送出去的)
- 、
- 观察源代码可以发现 他接受这个值是从Cookie里面的user参数
同时还要登录才行 - 传参
3. 开始反序列化
- 这里传参要为真
- 但这里又要为假
- 这里序列化
- 将username改为x passwd改为y
isVIP 改为ture
4. 多个class
- 这题明显就是 Class变多了
- 观察代码发现没有像前面几题一样触发flag的。但是有个eval,这个可以用于触发rce
- 在给定的代码中,
eval()函数被调用的地方是在backDoor类的getInfo()方法中。要触发eval()函数,需要调用getInfo()方法,并向$code属性提供要执行的代码。
这里去掉了不需要的代码,首先是改成backDoor- 这样
- 就会触发backDoor里面的getInfo()方法
- 然后将
5. 开始过滤
- 这题就是上一关加了过滤
- 根据gpt可以知道这个过滤的意思是
过滤O C开头的字母 后跟一个或多个数字,再跟一个冒号 - 先看一下发现o c后面跟着的数字有 11 8
- 于是我们采用str_replace 将:11换成 :+11 :8变成:+8
6. php原生类
- 观察代码,要求本地Ip 访问,且token=ctfshow
- 这里没有发现直接的魔术方法,但是调用了一个不存在的函数getFlag()
- 可以知道,这个行为会触发call魔术方法
- 使用脚本可以查看到
- 查看soapClient的使用方法
SoapClient采用了HTTP作为底层通讯协议,XML作为数据传送的格式,其采用了SOAP协议(SOAP是一
种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息),其次我们知道某个实例化的类,如果
去调用了一个不存在的函数,会去调用 __call 方法
7. 260
<?php
error_reporting(0);
highlight_file(__FILE__);
include('flag.php');
if(preg_match('/ctfshow_i_love_36D/',serialize($_GET['ctfshow']))){
echo $flag;
}
题目意思就是你序列化出来的东西需要包含字符串ctfshow_i_love_36D,
那我们直接传ctfhsow=ctfshow_i_love_36D就可以了。
8. web261
9. web267
打开先登录




























