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

如果所查询的用户id在数据库中,可以发现页面显示”You are in”,而不像前4关那样会显示出具体的账号密码
这里写图片描述
而如果输入的查询语句不存在,则什么也不会返回
这里写图片描述
这里普及一下盲注时的常用函数
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
这里写图片描述
接着,利用substr函数,推测库名的第一个字符
大于r
这里写图片描述
小于t
这里写图片描述
由此可推断第一个字符是s
接下来判断第二个字符:
http://127.0.0.1/sqlilabs/Less-5/?id=1' and left(database(),2)>'sd'%23

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

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

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

第二步当然是推表名
因为有多个表,所以我们在这一步还是需要用到limit,以便一个个推测
还是一样,先测第一个表的长度
这里写图片描述
使用上面这个payload,如果页面返回”You are in”,则表示第一张表的长度至少为1,同样的,我们可以对 limit num,1),num,1)) num部分进行递增判断,如果进行到 limit 0,1),7,1)) 时页面返回空,则说明第一张表的长度为7-1=6

这里呢,我们只用substr就会不方便了,因为表名只要包含到数字或者像@这样的标识符,用字符一个夹逼就不是很方便,所以这里用acsii码来比对,这样范围更好确定
这里写图片描述
acsii码大于100,我们找到100所对于的acsii码得知100对应的是字符‘d’
这里写图片描述
acsii码小于102,我们找到102所对于的acsii码得知102对应的是字符‘f’
由此我们可以确定,第一个表的第一个字符是e
由此类推,得知第一个表是emails
另外呢,可以利用count函数,查询表数量
这里写图片描述
查询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<第五个列的第一个字符

猜你喜欢

转载自blog.csdn.net/qq_41618162/article/details/81982692