SQL注入
前言
结构化查询语句(Structured Query Language,缩写:SQL),是一种特殊的编程语言,用于数据库中的标准数据库查询语言。
SQL注入(SQL Injection)是一种常见的Web安全漏洞,攻击者利用这个问题,可以访问或者修改数据,或者利用潜在的数据库漏洞进行攻击。
什么是SQL注入?
SQL注入(SQL Injectiob)是一种将sql语句插入或者添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行。
常见的Web架构
表示层:Web浏览器/呈现引擎—访问网站
逻辑层:脚本语言:ASP、PHP、JSP、.NET等—加载、编译并执行脚本文件
存储层:数据库:MSSQL、MYSQL、PRACLE等—执行SQL语句
哪里存在SQL注入?
GEI
POST
HTTP头部注入
Cookie注入
……
任何客户端可控,传递到服务器的变量。也就是能与数据库交互的地方。
漏洞原理
针对SQL注入的攻击行为,可描述为通过用户可控参数中注入SQL语法,破坏原有的SQL结构,达到编写程序时意料之外的结果的攻击行为。
其原因可以归结为以下两点原因叠加造成的:
1.程序编写者在处理程序和数据库交互的时候,使用字符拼接的方法构造SQL语句
2.未对用户可控参数进行足够的过滤便将参数内容拼接进入到SQL语句中
SQL注入的危害
漏洞危害
攻击者利用SQL注入漏洞,可以获取数据库中的多种信息(例如:管理员后台密账号、码),从而窃取数据库中的数据。
在特别的情况下,还可以修改数据库内容或者插入内容到数据库。
如果数据库权限分配存在问题,或者数据库本身存在缺陷,那么攻击者通过SQL注入漏洞直接获取webshell或者服务器系统权限。
SQL注入的分类和利用
根据SQL数据类型分类
整型注入
字符串型注入
根据注入的语法分类
显注:
UNION query SQL Injection(可联合查询注入)
Error-based SQL Injection(报错型注入)
盲注:
Boolean-based bind SQL Injection(布尔型注入)
Time-based bind SQL Injection(基于时间延迟注入)
Stacked queries SQL Injection(可多语句查询注入)
My SQL注入相关语句
查询当前数据库版本:select version();
查询当前数据库:select database();
查询当前路径:select @@basedir;
查询当前数据库用户:select user();
查询当前My SQL路径:select @@datadir;
查询服务器的系统版本:select@@Version_compole_os
查询数据库:select schema_name from information_schema.schemata;
查询表名:select table_name from information_schema.tables where table_schema=’库名’ ;
查询列名:select column_name from information_schema.columns where table_schema=’库名’ and table_name=’表名’ ;
sql注入修复
1.正则过滤特殊字符,PDO预编译
2.web应用防火墙
3.站库分离
来源:freebuf.com 2021-03-06 21:02:27 by: 我爱喝牛奶i
请登录后发表评论
注册