网络安全筑基篇——SQL注入

目录

前言

什么是SQL?

什么是SQL注入?

SQL注入的危害有哪些?

SQL注入有哪些类型?

SQL注入的一些思路

首先得判断SQL注入是否存在

判断SQL注入点

判断数据库的一个类型

SQL注入的防范措施


前言

本文可能有些许的难以理解,请大家别急躁,耐心地看完这篇文章,

对SQL语句不了解的可以先看看下面这篇文章

网络安全练气篇------SQL基础-CSDN博客

然后本文的话,主要是总结了互联网中的一些SQL注入文章,进行了一个知识汇总

什么是SQL?

SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库系统的语言,它可以用于创建、修改和删除数据库中的表和记录,以及执行查询操作。

SQL具有以下特点:

  1. 简单易学:SQL语法相对简单,易于理解和学习。
  2. 高效灵活:SQL可以执行快速和复杂的数据库操作,如插入、更新、删除和查询。
  3. 标准化:SQL是一种标准化的语言,大多数关系型数据库系统都支持SQL。
  4. 表达能力强:SQL支持各种复杂的查询和数据操作,可以根据需要进行数据的筛选、排序、合并等操作。
  5. 数据操纵语言(DML)和数据定义语言(DDL):SQL分为两种不同的语言类型,DML用于操纵数据,DDL用于定义数据库结构。

什么是SQL注入?

SQL注入是Web应用程序没有对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的

SQL注入的危害有哪些?

  1. 数据泄露:通过SQL注入,攻击者可以访问和获取数据库中的敏感数据,如用户凭据、个人信息、信用卡信息等。

  2. 数据篡改:攻击者可以修改数据库中的数据,例如更改用户权限、篡改交易记录、修改网站内容等。

  3. 数据删除:攻击者可以删除数据库中的数据,导致数据的永久性丢失,这对业务和组织的运行可能造成严重影响。

  4. 数据库服务拒绝:通过SQL注入攻击,攻击者可以执行恶意SQL语句,导致数据库服务器崩溃或变得不可访问。

  5. 横向渗透:一旦攻击者成功执行SQL注入攻击,他们可能能够访问其他连接到同一个数据库系统的服务或应用程序,从而扩大攻击范围。

  6. 其他安全漏洞的利用:SQL注入可能是其他更严重漏洞攻击的先导,通过注入恶意代码,攻击者可能利用其他漏洞来获取更高的权限或执行更危险的操作。

SQL注入有哪些类型?

  1. 基于错误的注入:攻击者通过输入带有错误语法的SQL代码来触发数据库错误信息,从而获取有关数据库结构和数据的敏感信息。

  2. 布尔盲注:攻击者通过在SQL查询中使用布尔逻辑运算符来确认或否定特定条件的存在。通过在SQL语句中使用一系列布尔表达式来推断有关数据库的信息。

  3. 时间盲注:攻击者通过在SQL查询中使用时间延迟函数来推断有关数据库的信息。攻击者可以通过注入代码来导致延迟响应,以此来确认特定条件是否存在。

  4. 联合查询注入:攻击者通过在SQL查询中插入额外的查询语句来执行未经授权的操作。攻击者可以通过联合查询注入从数据库中检索敏感信息。

  5. 堆叠查询注入:攻击者通过在SQL查询中连接多个查询语句来执行多个操作。攻击者可以通过堆叠查询注入在单个请求中执行多个SQL查询。

SQL注入的一些思路

首先得判断SQL注入是否存在

先加单引号'、双引号"、单括号)、双括号))等看看是否报错,如果报错就可能存在SQL注入漏洞了。

还有在URL后面加 and 1=1 、 and 1=2 看页面是否显示一样,显示不一样的话,肯定存在SQL注入漏洞了。

还有就是Timing Attack测试,也就是时间盲注。有时候通过简单的条件语句比如 and 1=2 是无法看出异常的。

在MySQL中,有一个Benchmark() 函数,它是用于测试性能的。Benchmark(count,expr) ,这个函数执行的结果,是将表达式 expr 执行 count 次 。

判断SQL注入点

凡是和数据库有交互的地方都容易出现SQL注入,SQL注入经常出现在登陆页面、涉及获取HTTP头(user-agent / client-ip等)的功能点及订单处理等地方。例如登陆页面,除常见的万能密码,post 数据注入外也有可能发生在HTTP头中的 client-ip 和 x-forward-for 等字段处。这些字段是用来记录登陆的 i p的,有可能会被存储进数据库中从而与数据库发生交互导致sql注入。

在返回包或者请求包中、Cookie、referer、XFF、UA等地方尝试插入代码、符号或语句,尝试是否存在数据库参数读取行为,如产生影响则说明存在注入点。

  1. 输入检查:尝试在输入字段中插入特殊字符(例如单引号、分号、注释符等),观察应用程序是否正确处理这些字符。如果应用程序未正确处理这些字符,可能存在SQL注入漏洞。

  2. 错误消息:通过在输入字段中插入错误的SQL语法,观察应用程序返回的错误消息。如果错误消息暴露了数据库相关信息,例如数据库类型、表名、列名等,可能存在SQL注入漏洞。

  3. 堆叠查询:尝试在输入字段中插入多个SQL查询语句,观察应用程序是否执行多个查询。如果应用程序执行了多个查询且返回结果,可能存在SQL注入漏洞。

  4. 盲注:尝试通过布尔盲注或时间盲注的方式,判断是否存在SQL注入漏洞。例如,在输入字段中插入布尔表达式或延时函数,并观察应用程序的响应是否有所不同。

  5. 使用自动化扫描工具:使用SQL注入扫描工具,例如SQLMap、Netsparker等,对目标应用程序进行扫描,自动发现潜在的SQL注入漏洞。

判断数据库的一个类型

  • 使用数据库特有的函数来判断
  • 使用数据库专属符号来判断,如注释符号、多语句查询符等等
  • 报错信息判断
  • 数据库特性判断

当然也可以对主机进行端口扫描,可以根据数据库是否开启对应端口

  • Oracle 1521
  • SQL Server 1433
  • MySQL 3306
  • PostgreSql 5432

SQL注入的防范措施

  1. 使用参数化查询或预编译语句:使用参数化查询或预编译语句可以将用户输入的数据与SQL语句分离,从而避免了直接将用户输入的数据作为SQL查询的一部分。这样可以防止恶意用户通过注入SQL语句来进行攻击。

  2. 输入验证和过滤:对用户的输入进行验证和过滤,确保输入的数据符合预期的格式和范围。可以使用合适的正则表达式或自定义的验证函数来验证用户的输入,过滤掉不符合规范的字符或字符串。

  3. 最小特权原则:限制数据库用户的权限,确保用户只拥有必要的权限。避免使用具有超级用户权限的数据库账户进行数据库操作,尽量使用仅拥有执行所需操作的最低权限的账户。

  4. 错误信息保护:在生产环境中,不要向用户显示详细的错误信息。将错误信息记录到日志中,只向用户显示一个通用的错误提示。详细的错误信息可能会泄露数据库的结构和敏感数据,从而为攻击者提供有价值的信息。

  5. 转义字符处理:对于用户输入的特殊字符,如引号、斜杠等,需要进行转义处理。数据库提供了相应的函数或方法来处理这些字符,确保它们被正确地解释为普通字符,而不是SQL语句的一部分。

  6. 异常处理:在代码中捕获并正确处理SQL语句执行过程中的异常,避免将异常信息直接显示给用户。通过合理的异常处理,可以增强代码的健壮性,防止SQL注入攻击。

  7. 框架和库安全:使用被广泛认可且经过测试的框架和库,这些框架和库通常会提供内置的安全措施来尽量避免SQL注入攻击。

  8. 定期更新和升级:保持数据库和应用程序的安全补丁和更新,及时修复已知的安全漏洞。

  9. 安全审计和测试:进行定期的安全审计和测试,发现和修复潜在的安全风险。可以借助安全测试工具,如SQLMap等,对数据库进行渗透测试,发现和修复SQL注入漏洞。

  10. 安全培训:对开发人员和数据库管理员进行安全培训,提高他们的安全意识和技能,让他们了解SQL注入攻击的风险和防范措施。

相关推荐
红肤色9 分钟前
【网络安全基础】CentOS 7超详细安装教程(含镜像)
linux·运维·服务器·安全·网络安全·centos
Sean_summer33 分钟前
木马学习记录
web安全
数据智能老司机2 小时前
CockroachDB权威指南——SQL调优
数据库·分布式·架构
数据智能老司机2 小时前
CockroachDB权威指南——应用设计与实现
数据库·分布式·架构
数据智能老司机2 小时前
CockroachDB权威指南——CockroachDB 模式设计
数据库·分布式·架构
数据智能老司机21 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机1 天前
CockroachDB权威指南——开始使用
数据库·分布式·架构
松果猿1 天前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
无名之逆1 天前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s9123601011 天前
rust 同时处理多个异步任务
java·数据库·rust