学习SQL注入的基本信息

77 阅读6分钟

熟悉的SQL注入

信息是数据系统中最关键的部分。大多数协会都利用信息库控制的网络应用程序从客户那里获取信息。因此,要注意信息安全。

SQL注入是一种攻击,它破坏了动态SQL的衔接,以注释出断言的特定部分或附加一个持续有效的条件。

它利用了计划不完善的网络应用程序的缺陷。

这样做是为了利用SQL声明来执行报复性的SQL代码。

这篇文章将带领读者了解SQL的灌输。它还将明确说明它是如何进行的,以及如何防止SQL注入。

了解SQL导流

利用SQL灌注可以执行的攻击种类,取决于数据集的种类马达。攻击是对动态SQL衔接的削除。

一个强大的断言是在运行时利用来自网络结构或URI查询字符串的边界密语创建的解释。

让我们来看看一个简单的带有一些基本风格的登录表单。

  • [获取表单]
  • 创建2个文件。
    • index.html
    • style.css
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="style.css" />
    <title>Demo</title>
  </head>
  <body>
    <div class="wrapper">
      <form action="loginAuth.php" method="post">
        <h4 class="logo-text">LOGIN</h4>
        <div class="line"></div>
        <input
          type="text"
          name="uName"
          class="input-group"
          placeholder="Enter your Username"
        /><input
          type="text"
          name="pass"
          class="input-group"
          placeholder="Enter your Password"
        />
        <pre> <input type="checkbox" name="chkbox"> Remember me</pre>
        <button type="submit" name="submit" class="btn">LOGIN</button>
      </form>
    </div>
  </body>
</html>

Form

上面的结构确认了用户名和密码,然后将它们提交给一个名为loginAuth.php 的PHP记录。

它有一个选择,就是把登录会话放在一个cookie中。

我们从remember-me 的复选框中得到了这一点。它利用了post策略来提交信息。

这意味着用户凭证不会显示在URL中。

假设用户认证是利用以下语句完成的。

SELECT * FROM members WHERE username = $_POST['uName'] AND password = md5($_POST['pass']);

上面的断言利用了$_POST[] 集群的优势,而没有清洗它们。密码是使用MD5 计算的编码。

我们将使用sqlfiddle 表示SQL灌输攻击。

在你的互联网浏览器中打开SQL Fiddle

你会得到附带的窗口。

sqlfiddle ,你要做的第一件事是创建一个模式。

所以,在左边的窗格中粘贴下面的SQL代码。

CREATE TABLE `members` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `userName` VARCHAR(45) NULL,
  `password` VARCHAR(45) NULL,
  PRIMARY KEY (`id`));


insert into members (username,password) values ('johnD',md5('doe'));

点击build schema 按钮。

schema

在右边的窗格中输入。

SELECT * FROM members;

运行该代码。

sql-code

你的输出将是。

result

假设用户提供logan 作为用户名,5678 作为密码。

要执行的SQL代码可能是。

SELECT * FROM members WHERE username = 'logan` AND password = md5('5678');

上面的代码可以通过注释去掉秘密密钥(密码)部分并附加一个持续有效的条件来加以利用。

假设一个攻击者在输入字段中给出了以下内容。

  1. username = xyz.mnp' OR 1 = 1 LIMIT 1 — ']
  2. password = fff

要执行的语句如下。

SELECT * FROM members WHERE username = 'xyz.mnp' OR 1 = 1 LIMIT 1 -- ‘ ] AND password = md5(‘5678’);

Xyz.mnp 用一个单独的语句来结束字符串的引用。

或者这样1 = 1 LIMIT 1 是一个持续有效的条件,并将返回的结果限制为只有一条记录。

-- 'AND … 是一个SQL注释,它取出了秘密密钥部分。

在SQL FiddleRun SQL文本框中运行上述代码,如下所示。

image

结果如下图所示。

result2

活动:注入一个网页

我已经创建了一个登录表单,我们将用它来运用SQL注入漏洞。

这个表单有一些基本的安全性,例如,对用户名字段进行消毒。

这意味着我们上面的代码不能被用来规避登录的问题。

为了解决这个问题,我们可以利用密语字段的优势。

下面的纲要显示了你应该遵循的步骤。

第1步

在你的本地计算机上克隆源代码,并在xammp 服务器上运行它。

第2步

输入登录信息。

  • 用户名='xyzxyz'
  • password = 'xyz') OR 1=1 - ]

如下图所示。

hack-activity

点击提交。

第3步

准许访问 -> 重定向到仪表板

如果一个用户提供了以下内容。

  • 用户名 =xyzxyz
  • 密码 =xyz') OR 1 = 1 -- ]

点击提交按钮后,用户将被重定向到仪表板。

让我们仔细看一下生成的语句。

SELECT * FROM members WHERE username = ‘xyzxyzx’ AND password = md5(‘xyz’) OR 1 = 1 — ]’);

generated-statements

其他SQL注入攻击类型

SQL注入可以做更多的破坏,而不仅仅是绕过登录的计算。

一部分攻击包括。

  • 擦除信息。
  • 更新信息。
  • 嵌入信息。
  • 在工人身上执行命令,可以下载和引入木马等恶性项目。
  • 发出重要信息。例如,万事达卡的细目、电子邮件和密码给攻击者的远方工人。
  • 获取客户的登录细目等等。

上面的列表并不彻底,它只是让你想到了SQL注入的能力。

SQL注入的自动化设备

在上面的模型中,我们利用了手工攻击的方法,依赖于我们对SQL的大量信息。

有一些机械化的设备可以帮助你更有效地进行攻击。而且,在可以想象的最短的时间内。

这些工具包括。

  • [卫星导航系统(Sonarqube)]
  • [攻击]

阻止SQL注入的攻击

一个协会可以采取相应的策略来确保自己免受SQL注入攻击。

  1. 客户信息不应该被信任--在它被用于独特的SQL解释之前,它应该一直被消毒。
  2. 使用收起的方法 - 这些可以示范SQL解释,并把所有的贡献作为边界。
  3. 安排好的解释--安排好的宣告工作是先做SQL的衔接,然后在把所有提交的客户信息作为边界。这对SQL衔接的语言结构没有影响。
  4. 习惯性的衔接--可以利用这些衔接来区分可能的有害代码,并在执行SQL解释之前结束它。
  5. 信息库关联客户访问权限--只有重要的访问权限才应该被赋予用于与数据集对接的账户。这可以帮助减少SQL解释对工人的影响。
  6. 错误信息--这些信息不应揭露敏感的数据和发生错误的确切区域。直截了当的自定义错误信息,例如:"心碎,我们遇到了专门的错误。已经到达专门的小组。请稍后再尝试",而不是显示导致错误的SQL解释。

总结

SQL注入是一种得益于可怕的SQL衔接的攻击。

SQL注入可以被用来规避登录计算、恢复、增加、刷新和删除信息。

SQL注入工具包括SqlSusSQLPing ,和Sonarqube ,等等。

在编写SQL声明时,一个体面的安全策略可以帮助减少SQL灌注攻击。