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 同时拼入无引号和有引号的两个查询,并依次要求:

  1. 第一个查询第一次返回 admin;
  2. 第一个查询第二次不返回 admin;
  3. 第二个查询第一次不返回 admin;
  4. 第二个查询第二次返回 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() 的求值顺序,单次请求也不能保证成功。