
SQL注入漏洞介绍
本文提供的资料和信息仅供学习交流,不得用于非法用途;
对于因使用本文内容而产生的任何直接或间接损失,博主不承担任何责任;
本文尊重他人的知识产权,如有侵犯您的合法权益,请在vx公众号SecurePulse后台私信联系我们,我们将尽快删除
一、SQL注入介绍
Web程序代码中对于用户传入的参数没有做过滤,直接放到SQL语句中执行,使得参数中的特殊字符不符合SQL语句的正确逻辑语法
可以利用SQL注入漏洞执行任意SQL语句
例如:查询和下载数据、写入webshell 、绕过登录限制、执行系统命令…
二、注入方法简介
在发现有可控参数的地方可以进行SQL注入检查并且利用
参数用户可控:从前端传给后端的参数内容用户可以控制
工具可以使用burpsuite里的sqlmap插件(防火墙可能会对sqlmap进行拦截)
burpsuite需要下载的扩展插件:
下载CO2
对CO2扩展插件进行配置
在Intruder里右键,将内容发送到Repeater
在Repeater里将内容发送到SQLMapper
导入sqlmap和python文件
三、生产环境下的SQL漏洞修复方式介绍
代码层防御sql漏洞策略:采用SQL语句预编译和绑定变量
所有的查询语句都使用数据库提供的参数化查询接口
参数化的语句使用的参数,而不是将用户输入变量嵌入到SQL语句中。
现在几乎所有的数据库系统都提供了参数化SQL语句执行接口
对进入数据库的特殊字符( ' <>&*; 等)进行转义处理或者编码转换。
确认每种数据的类型:比如数字型的数据就必须是数字,存储字段必须对应为int型。
规定数据长度:在一定程度上让较长的SQL注入语句不能正确执行。
网站每个数据层的编码统一:上下层编码不一致可能会使得一些过滤模型被绕过。(建议用UTF-8编码)
严格限制网站用户的数据库的操作权限:只给用户提供能满足自己工作的权限
避免网站显示SQL错误信息:比如类型错误、字段不匹配…防止这些错误信息被利用进行判断。
四、Mysql数据库
Mysql5版本之后,Mysql默认的数据库中存放在
infomation_schema
里,这个数据库有3个表需要着重了解
columns:
存储了用户创建的所有数据库的库名、表名、字段名
提供查询表中的字段信息
作为InnoDB存储引擎的临时表
tables:
提供查询数据库内的表相关的基本信息
作为Memory引擎临时表
TABLE_SCHEMA字段和TABLE_NAME字段分别记录库名和表名
SCHEMATA:
提供查询MySQL Server中的数据库列表信息,一个schema就代表一个database
也是Memory引擎临时表
CHEMA_NAME字段记录了库的信息
information_schema:存储数据库下的数据库名及表名,列名信息的数据库
information_schema.schemata:记录数据库名信息的表
information_schema.tables:记录表名信息的表
information_schema.columns:记录列名信息表
schema_name:information_schema.schemata 记录数据库名信息的列名值
table_schema:information_schema.tables 记录数据库名的列名值
table_name:information_schema.tables 记录表名的列名值
column_name:information_schema.columns 记录列名的列名值
Mysql的三种注释符
--
:单行注释,后面必须有空格#
:单行注释/* */
:多行注释