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.php
  • register.php
  • forgot.php
  • changePassword.php
  • admin.php
  • inc/Config.php
  • inc/bootstrap.php
  • inc/util.php
  • inc/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.phpheader.php 还会在默认 MANDT=500 时停止页面,说明 live 环境通过 env 文件覆盖了默认配置。

login.php 的查询没有显式加入 MANDT 条件;不过当前版本的 escape() 已修复旧 commit 中的替换顺序问题。历史版本曾存在可疑的 SQL injection 条件,但不能把旧源码漏洞直接当作 live exploit。

当前状态

未解决。标准字典和常见候选没有破解 admin MD5,旧版 escape 绕过也未在当前 live 版本确认。.git 泄露已经提供了完整攻击面,但还缺少可用的 admin authentication 或 env secret。

后续路线

  1. 继续审查 git 历史中 env 文件是否曾被误提交或出现在 dangling object。
  2. 对当前 login.php 做严格的输入/编码复现,确认修复后的 escape 是否仍有边界问题。
  3. 检查 reset/activation 流程是否能泄露 admin token,而不是盲猜密码。
  4. 取得 admin session 后,再读取 admin.php 输出的 per-session solution。