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