SQL注入与检测

1.应用场景

主要用于安全攻防, 帮助更加深入理解SQL注入的原理/操作/安全防护.

2.学习/参考

前言

正常的 SQL 调用可以帮我们从数据库中获取想要的数据,然而我们构建的 Web 应用是个应用程序,本身也可能存在安全漏洞,如果不加以注意,就会出现 Web 安全的隐患,比如通过非正常的方式注入 SQL

在过去的几年中,我们也能经常看到用户信息被泄露,出现这种情况,很大程度上和 SQL 注入有关。

所以了解 SQL 注入的原理以及防范还是非常有必要的。

今天我们就通过一个简单的练习看下 SQL 注入的过程是怎样的,内容主要包括以下几个部分:

1. SQL 注入的原理。为什么用户可以通过 URL 请求或者提交 Web 表单的方式提交非法 SQL 命令,从而访问数据库?

2. 如何使用 sqli-labs 注入平台进行第一个 SQL 注入实验?

3. 如何使用 SQLmap 完成 SQL 注入检测?

1. SQL 注入的原理

SQL 注入也叫作 SQL Injection,它指的是将非法的 SQL 命令插入到 URL 或者 Web 表单中进行请求,而这些请求被服务器认为是正常的 SQL 语句从而进行执行. [单说, 就是用户利用SQL语法对程序进行攻击, 造成破坏]

也就是说,如果我们想要进行 SQL 注入,可以将想要执行的 SQL 代码隐藏在输入的信息中,而机器无法识别出来这些内容是用户信息,还是 SQL 代码,在后台处理过程中,这些输入的 SQL 语句会显现出来并执行,从而导致数据泄露,甚至被更改或删除。

为什么我们可以将 SQL 语句隐藏在输入的信息中呢?

这里举一个简单的例子。

比如下面的 PHP 代码将浏览器发送过来的 URL 请求,通过 GET 方式获取 ID 参数,赋值给 $id 变量,然后通过字符串拼接的方式组成了 SQL 语句。这里我们没有对传入的 ID 参数做校验,而是采用了直接拼接的方式,这样就可能产生 SQL 注入。

$id = $_GET['id'];
$sql = "SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);

如果我们在 URL 中的?id= 后面输入' or 1=1 --+,那么 SQL 语句就变成了下面这样:

SELECT * FROM users WHERE id='' or 1=1 -- ' LIMIT 0,1

其中我们输入的(+)在浏览器 URL 中相当于空格,而输入的(--)在 SQL 中表示注释语句,它会将后面的 SQL 内容都注释掉,这样整个 SQL 就相当于是从 users 表中获取全部的数据。然后我们使用 mysql_fetch_array 从结果中获取一条记录,这时即使 ID 输入不正确也没有关系,同样可以获取数据表中的第一行记录。

2. 如何使用 sqli-labs 注入平台进行第一个 SQL 注入实验?

2.1 首先我们需要搭建 sqli-labs 注入环境

在这个项目中,我们会面临 75 个 SQL 注入的挑战,你可以像游戏闯关一样对 SQL 注入的原理进行学习。

GitHub: https://github.com/audi-1/sqli-labs

2.2 操作

下面的步骤是关于如何在本地搭建 sqli-labs 注入环境的,成功搭建好的环境类似链接里展现的。

详细参见: https://time.geekbang.org/column/article/137050

3. 如何使用 SQLmap 完成 SQL 注入检测?

使用 SQLmap 工具进行 SQL 注入检测

具体操作TBD

4.总结

在今天的内容中,我使用了 sqli-labs 注入平台作为实验数据,使用了 SQLmap 工具自动完成 SQL 注入。SQL 注入的方法还有很多,我们今天讲解的只是其中一个方式。

你如果对 SQL 注入感兴趣,也可以对 sqli-labs 中其他例子进行学习,了解更多 SQL 注入的方法。

在这个过程中,最主要的是理解 SQL 注入的原理。

在日常工作中,我们需要对用户提交的内容进行验证,以防止 SQL 注入。

当然很多时候我们都在使用编程框架,这些框架已经极大地降低了 SQL 注入的风险,但是只要有 SQL 拼接的地方,这种风险就可能存在

总之,代码规范性对于 Web 安全来说非常重要,尽量不要采用直接拼接的方式进行查询。

同时在 Web 上线之后,还需要将生产环境中的错误提示信息关闭,以减少被 SQL 注入的风险

此外我们也可以采用第三方的工具,比如 SQLmap 来对 Web 应用进行检测,以增强 Web 安全性。

后续补充

...

3.问题/补充

TBD

4.参考

https://github.com/audi-1/sqli-labs  //SQL注入开源项目

https://time.geekbang.org/column/article/137050  //极客时间-SQL必知必会

后续补充

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值