WeChall - Gid Gud
Challenge
URL:
https://www.wechall.net/en/challenge/gidgud/index.php
题目会为当前 WeChall session 生成一个 session-bound 目标站点,并要求在 Gid Gud University 网站中以 admin 身份登录。
本次目标 URL 形态为:
1 | https://gidgud.wechall.net?sessid=...&sessh=... |
关键发现:公开 .git
目标站点的 .git 目录可访问。/.git/HEAD 返回
master ref,/.git/config 暴露了仓库
origin;.git/index 列出 34 个文件。通过读取 git
objects,已经恢复了主要 PHP 源码。
重要文件包括:
login.phpregister.phpforgot.phpchangePassword.phpadmin.phpinc/Config.phpinc/bootstrap.phpinc/util.phpinc/seed.php
源码审计结果
inc/seed.php 创建的 admin 用户是
guido,其数据库密码字段为 MD5:
1 | 8b09ae7767db2cb77bd2a1ee4107a020 |
admin.php 在 admin session 中计算:
1 | md5($sid . $secret . $sid . $secret . $sid) |
其中 $secret 和运行环境中的 MANDT 来自被
.gitignore 排除的
env.php。header.php 还会在默认 MANDT=500
时停止页面,说明 live 环境通过 env 文件覆盖了默认配置。
login.php 的查询没有显式加入 MANDT 条件;不过当前版本的
escape() 已修复旧 commit
中的替换顺序问题。历史版本曾存在可疑的 SQL injection
条件,但不能把旧源码漏洞直接当作 live exploit。
当前状态
未解决。标准字典和常见候选没有破解 admin MD5,旧版 escape
绕过也未在当前 live 版本确认。.git
泄露已经提供了完整攻击面,但还缺少可用的 admin authentication 或 env
secret。
后续路线
- 继续审查 git 历史中 env 文件是否曾被误提交或出现在 dangling object。
- 对当前
login.php做严格的输入/编码复现,确认修复后的 escape 是否仍有边界问题。 - 检查 reset/activation 流程是否能泄露 admin token,而不是盲猜密码。
- 取得 admin session 后,再读取
admin.php输出的 per-session solution。