SQL注入

本文详细解释了SQL注入的概念,包括其原理,通过示例展示了如何利用和检测这种漏洞。还讨论了四种常见手法、危害以及如何通过技术手段如过滤、权限管理和参数化查询进行防御。
摘要由CSDN通过智能技术生成

什么是sql注入

原理:

产生SQL注入漏洞的根本原因在于代码中没有对用户的输入项进行验证和处理变直接拼接到查询语句中,利用SQL注入漏洞,攻击者可以在应用中的查询语句中插入自己的SQL代码并传递给后台SQL服务器时加以解析并执行

  • 可以使用一组针对应用程序中每个入口点的系统测试来手动检测 SQL 注入。

  • 单引号字符,并查找错误或其他异常。'

  • 一些特定于 SQL 的语法,用于计算入口点的基本(原始)值和其他值,并查找应用程序响应中的系统差异。

  • 布尔条件(如 和 ),并查找应用程序响应中的差异。OR 1=1OR 1=2

  • 有效负载设计用于在 SQL 查询中执行时触发时间延迟,并查找响应所需时间的差异。

  • OAST 有效负载,用于在 SQL 查询中执行时触发带外网络交互,并监视任何生成的交互。

或者可以使用 Burp Scanner 快速可靠地找到大多数 SQL 注入漏洞。

检索隐藏数据

想象一下,一个显示不同类别产品的购物应用程序。当用户单击购物”类别时,其浏览器会请求 URL:

https://insecure-website.com/products?category=Gifts

这会导致应用程序进行 SQL 查询,以从数据库中检索相关产品的详细信息:

SELECT * FROM products WHERE category = 'Gifts' AND released = 1

此 SQL 查询要求数据库返回:

  • 所有细节 (*)
  • 从表格中products
  • 其中 是categoryGifts
  • 并且是 released1

该限制用于隐藏未发布的产品。我们可以假设对于未发布的产品,.released = 1released = 0

应用程序未实现任何针对 SQL 注入攻击的防御措施。这意味着攻击者可以构建以下攻击,例如:

https://insecure-website.com/products?category=Gifts'--

这将导致 SQL 查询:

SELECT * FROM products WHERE category = 'Gifts'--' AND released = 1

至关重要的是注意:这是 SQL 中的注释指示符。这意味着查询的其余部分被解释为注释,从而有效地删除了它。此示例中,这意味着查询不再包含 .因此,将显示所有产品,包括尚未发布的产品。-- AND released = 1

您可以使用类似的攻击来使应用程序显示任何类别中的所有产品,包括他们不知道的类别:

https://insecure-website.com/products?category=Gifts'+OR+1=1--

这将导致 SQL 查询:

SELECT * FROM products WHERE category = 'Gifts' OR 1=1--' AND released = 1

修改后的查询将返回 为 或等于 的所有项目。与往常一样,查询将返回所有项。category Gifts 1 1 1=1

注意

​ 将条件注入 SQL 查询时要小心。即使它在你注入的上下文中看起来是无害的,应用程序在多个不同的查询中使用来自单个请求的数据也是很常见的。

例如,条件达到 OR 语句,则可能导致数据意外丢失。OR 1=1,UPDATE,DELETE

颠覆应用逻辑

​ 想象一下,一个允许用户使用用户名和密码登录的应用程序。如果用户提交用户名和密码,则应用程序通过执行以下 SQL 查询来检查凭据:wiener``bluecheese

SELECT * FROM users WHERE username = 'wiener' AND password = 'bluecheese'

如果查询返回用户的详细信息,则登录成功。否则,它将被拒绝。

​ 在这种情况下,攻击者可以以任何用户身份登录,而无需密码。他们可以使用 SQL 注释序列来执行此操作,以从查询子句中删除密码检查。例如,提交用户名和空白密码会导致以下查询:-- WHERE administrator'--

SELECT * FROM users WHERE username = 'administrator'--' AND password = ''

此查询返回其用户,并成功以该用户身份将攻击者登录。username``administrator

sql注入四种手法

  1. 联合查询
  2. 布尔盲注
  3. 延时注入
  4. 报错注入

SQL注入的危害

  1. 数据库信息泄露
  2. 网页被篡改
  3. 网站挂马,传播恶意软件
  4. 数据库被恶意操作
  5. 服务器被植入后门
  6. 破坏银盘或者服务器等硬件设备

绕过技术

  1. 关键字可以用%(只限IIS系列),如select可以sel%e%ct
  2. 通杀的,内联注释如,/*!select*/
  3. 编码,可以进行多次编码
  4. multipart请求绕过,在POST请求中添加一个上传文件可以绕过大多数的WAF
  5. 参数绕过,复制参数,id=1&id=1
  6. 组合法,如and可以用&&再URL编码
  7. 替换法,如:and改为&&;=可以用likein

如何进行SQL防御

  1. 关闭应用的错误提示
  2. 加设备,如:waf
  3. 对输入进行过滤,编写黑白名单
  4. 限制输入长度
  5. 限制数据库权限,如drop/create/truncate等权限谨慎grant
  6. 避免采用拼接的方式构造SQL语句,可以采用预编译等技术(同时也称为参数化查询)
  7. 数据库信息加密安全,不采用MD5因为有彩虹表,一般是一次MD5后加盐值在MD5
  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值