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: ["/", , , ]






