SQL注入原理
SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据或者说是对数据的合法性判断不完全,致使非法数据侵入系统。
sql注入的通常思路
找注点/判断是否存在注入漏洞
首先要求闭合字符
求列数
求显示位
爆库名、表名、列名、字段名
SQL注入类型
按注入点:有三类
数字型注点(?id=数字)注入的值为数字。
字符型注点(?name=‘字符/字符串’),当注入值为字符时要单引号进行闭合('')
搜索型注点(通常会有keyword=/或者有表单提交数据)
按数据提交方式:有四类
get注入:注入点为传参的参数
post注入:特征存在表单提交数据
Cookie注入:注入点存在Cookie当中的某个字段中
HTTP头部注入:注点一般会存在于请求头的字段里
按执行效果:有五类
布尔盲注:通过布尔逻辑来判断条件的真假。
时间盲注:利用时间延迟函数特性进行时间延迟判断条件是否成立。
报错注入:通过页面回显的语句,来调整修改构造的sql语句。
联合查询注入:union(可以拼接两个以上的select查询语句,但是查询列数要位数要一致)
堆栈注入:多条语句同时执行。
**三种注释方式
#、--、/**/
常用函数:
user()用户名
datebase()数据库
current_user()可以查看权限
version()数据库版本
@@datadir()数据库路径
load_file()读取文件
into outfile()/into dumpfile 写入文件
字符串连接函数:
concat(str1,str2.....)
group_concat(str1,str2.....)
concat_ws(,sep/*分隔符*/,str1,str2.....)
information_schema结构:
数据库
information_schema.schemata 查所有数据库名
information_schema.schemata(schema_name) 数据库名
数据表
information_schema.tables 查所有表名
information_schema.tables(table_schema) 查该表的数据库名
information_schema.tables(table_name) 查表名
字段
information_schema.columns 所有字段名
information_schema.columns(table_schema) 查该字段的数据库名
information_schema.columns(table_name) 查该字段的表名
information_schema.columns(column_name) 查字段名