熟悉的SQL注入
信息是数据系统中最关键的部分。大多数协会都利用信息库控制的网络应用程序从客户那里获取信息。因此,要注意信息安全。
SQL注入是一种攻击,它破坏了动态SQL的衔接,以注释出断言的特定部分或附加一个持续有效的条件。
它利用了计划不完善的网络应用程序的缺陷。
这样做是为了利用SQL声明来执行报复性的SQL代码。
这篇文章将带领读者了解SQL的灌输。它还将明确说明它是如何进行的,以及如何防止SQL注入。
了解SQL导流
利用SQL灌注可以执行的攻击种类,取决于数据集的种类马达。攻击是对动态SQL衔接的削除。
一个强大的断言是在运行时利用来自网络结构或URI查询字符串的边界密语创建的解释。
让我们来看看一个简单的带有一些基本风格的登录表单。
- [获取表单]
- 创建2个文件。
index.htmlstyle.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>

上面的结构确认了用户名和密码,然后将它们提交给一个名为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 按钮。

在右边的窗格中输入。
SELECT * FROM members;
运行该代码。

你的输出将是。

假设用户提供logan 作为用户名,5678 作为密码。
要执行的SQL代码可能是。
SELECT * FROM members WHERE username = 'logan` AND password = md5('5678');
上面的代码可以通过注释去掉秘密密钥(密码)部分并附加一个持续有效的条件来加以利用。
假设一个攻击者在输入字段中给出了以下内容。
username = xyz.mnp' OR 1 = 1 LIMIT 1 — ']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文本框中运行上述代码,如下所示。

结果如下图所示。

活动:注入一个网页
我已经创建了一个登录表单,我们将用它来运用SQL注入漏洞。
这个表单有一些基本的安全性,例如,对用户名字段进行消毒。
这意味着我们上面的代码不能被用来规避登录的问题。
为了解决这个问题,我们可以利用密语字段的优势。
下面的纲要显示了你应该遵循的步骤。
第1步
在你的本地计算机上克隆源代码,并在xammp 服务器上运行它。
第2步
输入登录信息。
- 用户名='xyzxyz'
- password = 'xyz') OR 1=1 - ]
如下图所示。

点击提交。
第3步
准许访问 -> 重定向到仪表板
如果一个用户提供了以下内容。
- 用户名 =
xyzxyz - 密码 =
xyz') OR 1 = 1 -- ]
点击提交按钮后,用户将被重定向到仪表板。
让我们仔细看一下生成的语句。
SELECT * FROM members WHERE username = ‘xyzxyzx’ AND password = md5(‘xyz’) OR 1 = 1 — ]’);

其他SQL注入攻击类型
SQL注入可以做更多的破坏,而不仅仅是绕过登录的计算。
一部分攻击包括。
- 擦除信息。
- 更新信息。
- 嵌入信息。
- 在工人身上执行命令,可以下载和引入木马等恶性项目。
- 发出重要信息。例如,万事达卡的细目、电子邮件和密码给攻击者的远方工人。
- 获取客户的登录细目等等。
上面的列表并不彻底,它只是让你想到了SQL注入的能力。
SQL注入的自动化设备
在上面的模型中,我们利用了手工攻击的方法,依赖于我们对SQL的大量信息。
有一些机械化的设备可以帮助你更有效地进行攻击。而且,在可以想象的最短的时间内。
这些工具包括。
- [卫星导航系统(Sonarqube)]
- [攻击]
阻止SQL注入的攻击
一个协会可以采取相应的策略来确保自己免受SQL注入攻击。
- 客户信息不应该被信任--在它被用于独特的SQL解释之前,它应该一直被消毒。
- 使用收起的方法 - 这些可以示范SQL解释,并把所有的贡献作为边界。
- 安排好的解释--安排好的宣告工作是先做SQL的衔接,然后在把所有提交的客户信息作为边界。这对SQL衔接的语言结构没有影响。
- 习惯性的衔接--可以利用这些衔接来区分可能的有害代码,并在执行SQL解释之前结束它。
- 信息库关联客户访问权限--只有重要的访问权限才应该被赋予用于与数据集对接的账户。这可以帮助减少SQL解释对工人的影响。
- 错误信息--这些信息不应揭露敏感的数据和发生错误的确切区域。直截了当的自定义错误信息,例如:"心碎,我们遇到了专门的错误。已经到达专门的小组。请稍后再尝试",而不是显示导致错误的SQL解释。
总结
SQL注入是一种得益于可怕的SQL衔接的攻击。
SQL注入可以被用来规避登录计算、恢复、增加、刷新和删除信息。
SQL注入工具包括SqlSus ,SQLPing ,和Sonarqube ,等等。
在编写SQL声明时,一个体面的安全策略可以帮助减少SQL灌注攻击。