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那样添加额外换行)。
操作步骤
- 将上述代码保存为任意文件名(比如
polyglot.txt)。 - 用Postman的form-data上传该文件,字段名设置为
file。 - 发送请求后,PHP会分别用Node.js和Python执行这个文件,两者输出均与
$flag一致,即可获取Flag。
内容的提问来源于stack exchange,提问作者0xbe61a55f
相关产品推荐
相关产品推荐

