[CISCN2019 华北赛区 Day2 Web1]Hack World
打开题目就提示flag表在flag列
随便试了一下
id=1
Hello, glzjin wantsa girlfriend.
id=2
Do you want to be mygirlfriend?
发现得不到什么信息,猜测是布尔盲注
几次尝试后发现存在过滤,直接开始fuzz
发现or
and
union
limit
以及报错注入的函数被过滤,这里只能使用异或运算了
由于假^假 =真
,真^真=假
,假^真=真
,真^假=真
,所以当我们查询 1^0
、0^1
、和 1 的回显是一样的,而查询 1^1
或0^0
却会有报错提示,所以我们可以构造0^payload
,如果payload为真,则返回1,0^1=1
,将得到回显Hello, glzjin wants a girlfriend
由于空格被过滤,我们这里使用括号包裹来代替分割,于是构造
1 | 0^(ascii(substr((select(flag)from(flag)),1,1))>1) |
这里用到的substr()
也不陌生了,属于是老生尝痰
substr(string string, int a, int b);
string是需要截取的字符串,a是截取字符串的开始位置,b是要截取的字符串的长度
于是编写脚本,一个简单的二分查找:
1 | import requests |