SQL注入与防御

  1. SQL注入概述
  2. SQL注入利用
  3. SQL注入探测
  4. SQL注入绕过
  5. SQL注入防御
  6. SQLMAP使用



一、SQL注入概述

1. 什么是SQL注入

服务端没有对用户提交的参数进行严格的过滤,导致可以将SQL语句插入可控参数中,改变原有的SQL语义结构,从而执行攻击者所预期的结果。

2. SQL注入危害
  • 获取数据(拖库)
  • 读取敏感系统文件
  • 写入webshell
  • 命令执行



二、SQL注入利用

1. 联合注入

(1)什么是union?

union用于合并两个select的结果集。

  • union必须由两条或者两条以上的select语句组成,语句之间使用Union链接
  • union中的每个查询必须包含相同的列、表达式或者聚合函数,他们出现的顺序可以不一致(这里指查询字段相同,表不一定一样)
  • 列的数据类型必须兼容,兼容的含义是必须是数据库可以隐含的转换他们的类型。

(2)什么是联合注入?怎么拿到其他表中的数据?

在mysql数据库中有一个数据库information_schema下的SCHEMATA表保存了所有的数据库名称TABLES表保存了所有的表名称COLUMNS表保存了所有的列名称

2. 报错注入

利用页面返回的mysql报错信息,将想得到的数据通过报错信息带出。报错注入的利用方式和mysql版本有很大的关联。

十种mysql报错注入

3. 盲注

不能直接通过显示数据来获得数据库数据时,需要使用其他方式判断或者尝试,这个过程就是盲注

  • 基本布尔盲注(根据页面返回内容判断)
  • 基于时间盲注(根据页面响应时间判断)
4. 万能密码

数据库逻辑上是TRUE

命令
’ or ‘1’ = '1
’ or 1 = 1#
1’ ll '1
1’ ll 1#
‘=’
‘-’



三、SQL注入探测

1. 判断数据库类型
  • 端口
  • 报错信息
  • 猜测
2. 寻找SQL注入点

寻找与数据库交互的可控参数

  • GET
  • POST
  • COOKIE
3. 确认注入点

确认注入点的核心思想就是判断插入的数据是否被当做SQL语句执行。
1. 区分数据类型:我们在确认注入点的过程还需要区分可控参数在SQL语句中的数据类型

  • 整型注入:select * from news where id = 1
  • 字符串类型注入:select * from news where author = ‘admin’
  • 搜索类型注入:select * from news where title like ‘%xxx%’

2. 内联式:内联式注入是指向查询注入一些SQL代码后,原来的查询仍然会全部执行。
3. 终止式:终止式注入是攻击者在注入SQL代码后,将原有的查询代码全部注释掉
4. 堆叠:堆叠查询是指可以在单次数据库连接中,执行多个查询序列。简单的来说就是执行多条语句
5. 事件延迟:攻击者注入的SQL语句能让本次查询引发时间延迟,例如mysql中sleep()函数或者benchmark()



四、SQL注入绕过

大部分情况下,都存在安全机制来防御SQL注入,但是补眼睛的安全机制就存在绕过的方式,来突破安全机制。


1. OR或AND绕过

  • 大小写变形:Or,OR,oR
  • 双写绕过:oorr,anandd
  • 使用 || && 代替。(注意对&&进行url编码)

2. 空格绕过
(1)使用/**/绕过过滤空格

  • id=1’/**/AND/**/1=1#

(2)不使用空格绕过

  • id=(sleep(ascii(mid(user()from(2)for(1)))=109)
  • 1’||updatexml(1,concat(0x7e,version()),1)||‘1’='1

(3)特殊字符代替

  • %09 TAB键(水平)
  • %0a 新建一行
  • %0c 新的一页
  • %0d return功能
  • %0b TAB键(垂直)
  • %a0 空格

3. 注释符绕过
(1)替换绕过

  • –空格
  • –空格a
  • #
  • /**/

(2)闭合绕过

  • id=1’ and '1

4. 大小写绕过:当安全机制并没有做大小写不敏感的处理,那么就可能存在大小写绕过。

  • id=Union

5. 宽字节绕过
在这里插入图片描述



五、SQL注入防御

SQL语句预编译和绑定变量

使用足够严格的过滤和安全防御



六、SQLMAP介绍

SQLMAP是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是mysql,oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM DB2,SQLite,Firebird,Sybase和SAP MaxDB。

kali自带sqlmap
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述






在这里插入图片描述
warning :未经授权,不得转载
声明:本文旨在为学习网络信息安全的同学提供指引帮助,维护网络空间的安全
有问题的小伙伴请在下方留言,喜欢就点个赞吧;关注我,带你一起写bug
知乎:叄贰壹
简书:带只拖鞋去流浪

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL注入是一种常见的网络安全漏洞,可以通过在应用程序的输入字段中插入恶意的SQL语句,从而绕过应用程序的安全机制,访问、更改或删除数据库中的数据。 SQL注入的攻击手段可以通过构造恶意的SQL语句来实现,例如在登录界面的用户名和密码输入框中输入'or 1=1 --,这会使应用程序的SQL查询条件变为:WHERE username='' OR 1=1 --',从而绕过用户名和密码的验证,直接登录到应用程序。 为了防止SQL注入攻击,我们需要采取一些防御措施。首先,我们需要进行输入验证和过滤,确保用户输入的数据符合预期的格式和类型,并且不包含恶意代码。其次,我们应该使用参数化查询或准备语句来构造SQL查询,而不是将用户输入直接拼接到查询语句中。这样可以将用户输入的数据作为参数传递给SQL查询,从而防止恶意代码的注入。另外,限制应用程序的数据库用户的权限,可以有效减少攻击者对数据库的操作权限。 除了以上措施,我们还可以使用Web应用程序防火墙(WAF)来检测和防止SQL注入攻击。WAF可以通过识别和拦截恶意的SQL语句,保护应用程序的安全性。 总而言之,SQL注入是一种常见的安全漏洞,对应用程序和数据库造成严重的威胁。为了防止SQL注入攻击,我们需要进行充分的输入验证和过滤,使用参数化查询或准备语句以及限制数据库用户的权限。同时,使用WAF可以提供额外的保护层级。只有综合使用这些防御措施,才能有效地保护应用程序免受SQL注入攻击的威胁。 ### 回答2: SQL注入是一种常见的网络安全漏洞,它允许攻击者通过操纵SQL查询语句来获取未授权的访问权限或者获得敏感数据。SQL注入攻击是通过将恶意的SQL代码插入到用户输入的数据中,以欺骗数据库服务器执行恶意操作。 为了防止SQL注入攻击,需要采取一系列的防御措施: 1. 输入验证:对用户的输入进行验证和过滤,确保输入数据符合预期的格式和类型。可以使用正则表达式、白名单验证或黑名单过滤等方法来限制用户输入的特殊字符和命令。 2. 使用参数化查询或预编译语句:使用参数化查询可以将用户的输入数据与SQL查询语句进行分离,从而避免将用户输入作为SQL语句的一部分执行。预编译语句也可以达到相同的效果,这样数据库会将查询和参数分开处理。 3. 最小权限原则:为数据库用户提供最小的权限,仅限于其所需的操作。这样即使发生SQL注入攻击,攻击者也无法执行敏感操作或者获取敏感数据。 4. 错误处理:不要向用户透露数据库错误信息,这可能包含有关数据库结构和其他敏感信息。在处理错误时,只返回给用户一个通用的错误信息,以防止攻击者通过错误信息获取更多有关数据库的信息。 5. 定期更新和补丁管理:及时更新和打补丁数据库系统,以修复已知的安全漏洞和风险。 总之,SQL注入是一种严重的网络安全威胁,但通过合适的防御措施,我们可以大大减少SQL注入攻击的风险。请大家注意保护自己的数据库和应用程序,确保数据的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值