CTFshow-WEB-新年好?解题思路

0x00 前言

  • CTF 加解密合集

  • CTF Web 合集

  • 网络安全知识库

0x01 题目

题目名称:新年好? 分值:10 出题人:Firebasky 题目链接:https://a203e2c7-672a-42c9-af31-723d99890d57.challenge.ctf.show

访问首页,直接返回 app.js 源码。

复制代码
const express = require('express');
const fs = require('fs');
const flag = require('./flag')
const app = express();
​
app.get('/flag', function (req, res) {
    function getflag(flag) {
        res.send(flag);
    }
    let delay = 10 * 1000;
    if (Number.isInteger(parseInt(req.query.delay))) {
        delay = Math.max(delay, parseInt(req.query.delay));
    }
    const t = setTimeout(getflag, delay, flag);
    setTimeout(() => {
        clearTimeout(t);
        try {
            res.send('Timeout!');
        } catch (e) {
​
        }
    }, 1000);
});
app.get('/', function (req, res) {
    res.set('Content-Type', 'text/javascript;charset=utf-8');
    res.send(fs.readFileSync('./app.js'));
});
​
app.listen(3000, '0.0.0.0', () => {
    console.log('Start listening')
})

0x02 Write Up

访问靶场首页,页面直接输出完整 js 源码,重点看两处setTimeout。

复制代码
const t = setTimeout(getflag, delay, flag);
setTimeout(() => {
    clearTimeout(t);
    try {
        res.send('Timeout!');
    } catch (e) {
​
    }
}, 1000);

setTimeout 语法:setTimeout(回调函数, 延迟毫秒, 参数)。延迟时间到达后,执行回调,后续参数会传给回调函数。 代码逻辑:

  1. 访问/flag路由,读取 GET 参数delay,默认 delay=10000ms;如果传入合法整数 delay,取默认值和传入值的较大者。

  2. 开启定时器 t,delay 毫秒后执行 getflag,getflag 会直接把 flag 返回给页面。

  3. 同时开启第二个定时器,1000 毫秒后执行,清除定时器 t,页面返回 Timeout!。

正常情况下,delay 最小是 10000ms,大于 1000ms。第二个定时器会先触发,clearTimeout(t)取消 getflag 执行,页面输出 Timeout!,拿不到 flag。

知识点:Node.js 中 setTimeout 的延时参数使用32 位有符号整数 ,取值上限2147483647。当传入数字 > 2147483647,会发生整数溢出,数值截断,实际延时会变成一个很小的值。

我们传入delay=2147483648,这个数字超出上限,溢出后实际延时小于 1000ms。getflag 会优先执行,在 clearTimeout 执行之前返回 flag。

构造 Payload 访问: https://a203e2c7-672a-42c9-af31-723d99890d57.challenge.ctf.show/flag?delay=2147483648

页面直接返回 flag: {"FLAG":"ctfshow{496d2e3e-d6d0-4840-92c9-ac6c4df5a47f}"}

相关推荐
东姬AI3 小时前
挖出948个内核漏洞、自动写补丁:GPT-6 Cyber把AI推进“实战岗“,内容行业还卡在哪一关?
人工智能·网络安全·openai·gpt-6
QXWZ_IA4 小时前
定位数据怎么推给 IoT 平台?消息协议选型与接入准备
网络·人工智能·物联网·安全
不庸.4 小时前
WPScan 实战入门:从 Docker 靶场到弱密码爆破
运维·安全·web安全·docker·容器·安全性测试·wpscan
qq_452396235 小时前
第十篇:《Kafka 安全加固:SASL、SSL、ACL 与多租户隔离》
安全·kafka·ssl
ppo_wu15 小时前
解决夸克网盘自动修改PDF打开方式的方法
经验分享·安全·网络安全
迪康coolmu20 小时前
出差终端数据安全落地实战:基于迪康端点安全一体化管理系统的四道防线实践
运维·服务器·经验分享·笔记·其他·安全·php
阡陌数智1 天前
Claude API新版本重大变更与安全升级指南
java·linux·安全
andxe1 天前
工业级 PoE 交换机选型指南:破解边缘部署四大核心难题
运维·网络·安全·光通信·交换机
狂师1 天前
把别人的软件拆开看,推荐5个主流逆向工具
安全·程序员·开源
kingx31 天前
Bugku 逆向 MatrixHunter:黑盒 oracle + GF(2) 消元出唯一解
网络安全·矩阵·逆向·ctf