Webhacking.kr alien golf
Challenge
Make the same input produce different SQL results across the four checks.
让同一个输入在四次 SQL 检查中产生所需的不同结果。
1 | https://webhacking.kr/challenge/new-10/ |
Analysis
服务端把 no
同时拼入无引号和有引号的两个查询,并依次要求:
- 第一个查询第一次返回
admin; - 第一个查询第二次不返回
admin; - 第二个查询第一次不返回
admin; - 第二个查询第二次返回
admin。
admin 和 if 被过滤。payload
用十六进制字面量表示 admin,再用
CASE WHEN RAND()
让四次执行得到所需的真假序列;UNION SELECT
将结果放入检查列。
Solution
提交:
1 | 0 union select case when rand()>.5 then 0x61646d696e end#' union select case when rand()>.5 then 0x61646d696e end |
RAND()
是随机的,因此单次请求不能保证成功;复现时应按响应结果重试。
本文只说明 payload 结构。MySQL 版本差异可能改变 RAND()
的求值顺序,单次请求也不能保证成功。