sql注入的闭合方式

前言

近期在进行sql注入实战时出现了闭合方式不理解,可能是由于长时间未学习,突然再次做题出现了这种问题。对此我将问题总结如下,希望此能解决部分正在学习sql注入的人

错误理解

$sql = "select username,password from ctfshow_user2 where username !='flag' 
and id = '".$_GET['id']."' limit 1;";  

此语句中的id首先可以看出是get注入,此时我的想法是'id'是php中引用变量的固定格式,.是·拼接符,"是包裹方式,再外层的'仍是与最内层那个相似,是引用变量固定格式,这样看的话会误以为"是实际的包裹方式,我们此时注入语句的话,肯定会构造如下payload

?id=-1" union select 1,2 --+

可是我却发现这样无法正确执行,得到的数据并不是2(正解是2),我看了看相关题目的wp,发现闭合方式是',这让我有点费解,在思考了一些时间并请假了大佬后,我发现之前的想法是不可取且错误的

正解

首先看变量sql,其整个语句就是拿双引号写的,那出现双引号是想干什么呢,肯定是想闭合前面的,此时我们把语句分开来看

$sql = "select username,password from ctfshow_user2 where username !='flag' 
and id = '"

这是第一部分,后面的双引号与前面进行对应,把语句给闭合了

"' limit 1;";  

这是第二部分,两个双引号闭合了一句话
此时我们发现中间还有

.$_GET['id'].

.用来把这个get注入的id和前后两句连起来,我们此时再看语句,发现第一部分最后多了一个',很巧,第二部分也有一个',此时就可以很明显的看出来id是被单引号包裹的
,假如传入的id=1,实际执行的sql语句就是

select username,password from ctfshow_user2 where username !='flag' 
and id = '1' limit 1;

本人只是小白,如有问题还请各位师傅多多指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值