You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web类型CTF求助:PHP执行Node/Python脚本无法同时匹配Flag

解决方案

核心问题分析

题目中PHP会用同一个上传文件分别执行Node.js和Python脚本,要求两者的输出结果完全等于file_get_contents('/flag')的内容。你之前分别上传不同文件的思路不对,必须构造一个同时兼容JS和Python语法的多语言脚本(Polyglot)。

构造兼容脚本

编写一个同时能被Node.js和Python正确执行的文件,内容如下:

"""//
const fs = require('fs');
process.stdout.write(fs.readFileSync('/flag'));
//"""
print(open('/flag').read(), end='')

代码解释

  • Python执行逻辑:开头的"""是多行字符串标记,会把//到//"""的内容当作字符串(不执行),直接运行后面的print语句。end=''用于避免Python默认在输出末尾添加换行符,保证输出和$flag完全一致。
  • Node.js执行逻辑://是JS的单行注释,会注释掉开头的""",然后执行fs.readFileSync读取/flag,用process.stdout.write直接输出内容(不会像console.log那样添加额外换行)。

操作步骤

  1. 将上述代码保存为任意文件名(比如polyglot.txt)。
  2. 用Postman的form-data上传该文件,字段名设置为file。
  3. 发送请求后,PHP会分别用Node.js和Python执行这个文件,两者输出均与$flag一致,即可获取Flag。

内容的提问来源于stack exchange,提问作者0xbe61a55f

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 18:01:10