SQL注入漏洞 – 作者:我爱喝牛奶i

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

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论