简介
所谓sql注入,就是通过把sql命令插入web表单提交或者输入域名页面请求的查询字符串,最终达到欺骗服务器执行恶意的sql命令
原理
针对SQL注入的攻击行为可描述为通过用户可控制参数中注入sql语法,破坏原有的sql结构,达到编写程序时意料之外结果的攻击行为。
其成因可以归结为一下两个原因叠加造成的:
1、程序编写者在处理程序和数据库交互时,使用字符串拼接的方式构造sql语句
2、未对用户可控参数进行足够的过滤便将参数内容拼接进入到sql语句中。
注入危害
攻击者利用sql注入漏洞,可以获取数据库中的多种信息(例如:管理员后台密码),从而脱取数据库中内容(脱库)。在特别情况下,还可以修改数据库内容或者插入内容到达数据库,如果数据库权限分配存在问题,或者数据库本身存在缺陷,那么攻击者可以通过sql注入漏洞直接获得wbeshell或者服务器的系统权限。
注入分类
1、根据数据类型:
● 数字型注入
●字符型注入
区别:
字符型:需要单引号闭合的就是字符型注入,并且需要注释调后面的单引号(注释符号:#,--,/*)
数字型:不需要单引号闭合,也不需要注释符号
2、根据注入语法:
● UNION query SQL injection(可联合查询注入)
●Stacked queries SQL injection (可多语句查询注入)
●Error-based blind SQL injection (布尔型注入)
● Error-based SQL injection(报错型注入)
●Time-based blind SQL injection (基于时间延迟注入)
SQL注入挖掘
● and 1=1 和 and 1=2 回显页面不同(整形判断)
● 单引号判断 ' 显示数据库错误信息或者页面回显不同(整形,字符串类型判断)
● \ (转义符)
● -1/+1 回显下一个或上一个页面(整形判断)(需要用%2b转码+号)
● and sleep(5)(判断页面返回时间)
MySQL中常用函数
● system_user() 系统用户名
● user() 数据库的用户名
● current_user() 当前数据库用户名
● session_user() 连接数据库的用户下
● database() 数据库名
● version() 数据库版本
● @@basedir 查看安装路径
● load_file('/etc/passwd') 读取本地文件的函数
MySQL中information_scheme库
● schemata 表 字段:schema_name (数据库名字)
● tables 表 字段:table_schema,table_name
● columns 表 字段:table_schema,table_name,column_name