sqli-labs练习(五)------GET-Double injection-Single Quotes-String

本文介绍了一种利用SQL注入技巧的方法,通过构造特定的SQL子查询语句,可以在错误信息中获取数据库名称及表名等敏感信息。这种方法依赖于对特定函数如rand(), floor(), count()的理解,并利用group by子句来实现。

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

这里写图片描述
按提示,输入id参数1,得到回馈结果,但是没用
这里写图片描述
输入1',报错
这里写图片描述
查看报错信息near ''1'' LIMIT 0,1' at line 1
输入参数1'',没有报错,
这里写图片描述
通过以上过程可以发现,当我们改变参数的时候,回显只有两种结果
1>You are in...........
2> 报错信息
没办法,正确的查询只返回第一种情况,那么只能靠第二种回显结果了,即利用错误回显得到我们想要的查询结果,也就是将查询结果在错误提示中反馈到前端页面。

有了思路,那么接下来就是手段或方法的问题了,在sql查询中有这样一种情况,那就是利用子查询,其原理就是通过构造一种合适的子查询语句,可以将查询的一部分结果以报错的形式返回。

在运用这样一个神奇的子查询语句之前,我们需要理解下面4个函数:

  • rand():该函数的作用是产生0-1之间的随机数
  • floor(a):该函数返回一个最大的,但是不大于a的整数
  • count():聚合函数也称作计数函数,返回查询对象的总数
  • group by clause:根据clause对查询结果进行分组

构建下面一个子查询语句,这个语句也是前人的总结结晶,形式比较固定,比如在错误回显中显示当前数据库名
-1' union select count(*),2,concat(':',(select database()),':',floor(rand()*2))as a from information_schema.tables group by a%23
由于rand()函数的随机性,需要多次刷新,会得到下图结果
这里写图片描述

再次构造,获取数据库security中的表名
0' union select count(*),2,concat('/',(select group_concat(table_name) from information_schema.tables where table_schema='security'),'/',floor(rand()*2))as a from information_schema.tables group by a%23
这里写图片描述

OK,第5节的内容到这里就结束啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值