SQL注入与检测

article/2025/8/8 16:31:41

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必知必会

后续补充

...


http://chatgpt.dhexx.cn/article/WUjtfOvU.shtml

相关文章

sqlmap-sql注入检测

SqlMap(防sql注入)使用手册 下载地址: Download and update sqlmapproject/sqlmap Wiki GitHub 下载后无须安装 依赖: 需要有python 2.6, 2.7 or 3.x的 使用: 在sqlmap的目录下 ,使用 python sqlmap.py -u ht…

使用sqlmap检测sql注入漏洞

一、 sql注入概述并安装sqlmap漏洞查看工具 1、 sql注入概述 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 它是利用现有应用程序,可以通过在Web表单中输入&…

sql注入在线检测(sqlmapapi)

之前一搞渗透的同事问我,sqlmapapi.py是干啥的,我猜很多人都玩过sqlmap,但玩过sqlmapapi的应该比较少,今天就和大家一起看看如何使用以及一些美的地方。 说白了,sqlmapapi.py就是提供了一个检查sql注入的接口&#xf…

SQLMap sql注入检测工具使用

摘要1:https://www.freebuf.com/sectool/164608.html 摘要2:https://blog.csdn.net/qq_33530840/article/details/82144515 sqlmap是一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器…

Python 开发 利用SQLmap API接口进行批量的SQL注入检测.(SRC挖掘)

目录: SQL注入检测步骤: (1)创建新任务记录任务ID. (2)设置任务ID的配置信息.(扫描信息) (3)启动对应ID的扫描任务. (4)获取对应ID的扫描状态. &#x…

使用sqlmap进行SQL注入检测

最近公司项目被扫描出有SQL注入的漏洞,通过百度之后,决定使用sqlmap进行SQL注入的检测。这里仅仅是记录一下注入检测的步骤。 检测前准备 sqlmap是一个python编写的工具,因此我们首先要进行python环境的搭建,然后再从sqlmap官网下载最新版本。 检测步骤 查看需要检测的注入…

安全测试之sql注入

目录 1. 概述1.1 web安全渗透测试分类web数据库安全(sql注入漏洞)web应用服务器安全(文件上传漏洞,文件包含漏洞)web客户端安全(XSS跨站攻击) 1.2 sql注入原理1.3 sql注入危害1.4 sql注入实现方…

渗透测试之sql注入

原文地址 什么是SQL注入? SQL 注入(SQL Injection)是发生在 Web 程序中数据库层的安全漏洞,是网站存在最多也是最简单的漏洞。主要原因是程序对用户输入数据的合法性没有判断和处理,导致攻击者可以在 Web 应用程序中事…

如何快乐地检测SQL注入

这估计大家也都发现了,测试SQL注入这种漏洞啊,又有WAF页面又没有明显的报错的情况下, 测试起来就是一个字,烦。 有waf: 我 and 11, 啪,它拦了。 我 order by, 啪,它拦了。 我 sleep(5), 啪,…

SQL注入(一)之原理与检测

一 SQL注入攻击原理 01 注射式攻击的原理 注入产生的原因是接受相关参数未经处理直接带入数据库查询操作;注入攻击属于服务端攻击,他与操作系统、数据库类型、脚本语言类型无关总之一句话: 注入产生的原因是接受相关参数未经处理直接带入数据库查询操作。02 sql注入…

25显函数求导数

1、显函数求导数

人工智能之数学基础----隐函数求导和相关变化率

本章主要讲解隐函数求导和相关变化率,大家理解什么叫隐函数及其如何求导 隐函数求导 相关变化率 隐函数求导 首先我们来理清什么叫隐函数,讲解隐函数之前我们来讲显函数,因为隐函数是相对显函数而言的 y f ( x ) yf(x) yf(x)像这种函数中&am…

Python应用:画出任意二维函数的轨迹

一、提要 对于显函数,其曲线可以通过给出定义域和对应的函数值画出。然而对于一些隐函数,不能显式表达,其曲线如何画出?如果从定义域内,逐点求出函数值,然后画出点序就不是一个很好的主意。用计算方法求出所…

Matlab之函数绘图函数ezplot

一、功能 可以直接调用ezplot进行函数绘制 二、语法 1.ezplot(fun) 绘制表达式 fun(x) 在默认定义域 -2π < x < 2π 上的图形&#xff0c;其中 fun(x) 仅是 x 的显函数。 fun 可以是函数句柄、字符向量或字符串。 2.ezplot(fun,[xmin,xmax]) 绘制 fun(x) 在以下域…

隐函数作图

背景介绍 Matlab提供了一系列绘图函数&#xff0c;常见的包括绘制2D曲线的plot函数、绘制2D隐函数曲线的ezplot函数、绘制3D曲面的mesh和surf函数、绘制3D显函数曲面的ezmesh和ezsurf函数。值得注意的是&#xff0c;ez系列的绘图函数里只有ezplot是绘制隐函数曲线的&#xff0c…

基础30讲 第11讲 多元函数微分学

目录 综述1、基本概念1.1 平面点集邻域边界区域聚点 1.2 极限1.3 连续1.4 偏导数1.5 可微1.6 偏导数的连续性 2、多元函数微分法则2.1 链式求导法则2.2 隐函数存在定理&#xff08;公式法&#xff09; 3、多元函数的极值与最值3.1 概念3.2 无条件极值(数学公式计算只适用于2元)…

MATLAB符号函数绘制各种函数图像,ezplot()函数 ezplot3()函数

我们学习常遇见的函数种类有显函数&#xff0c;隐函数&#xff0c;参数方程三种&#xff0c;对于隐函数绘制图像比较麻烦&#xff0c;给大家介绍一种简单实用的一中画函数的方法。 函数介绍 二维曲线ezplot()函数 ezplot()函数用于绘制显函数&#xff0c;隐函数&#xff0c;…

9.5 隐函数求导法则

本篇内容我们说一下隐函数求导的法则&#xff0c;之前在初次接触导数的时候&#xff0c;我们有总结过一部分隐函数求导的内容&#xff0c;虽然和本篇的内容有一部分相似&#xff0c;但是可以再看一看用于对比理解。上正文。 一、概念阐明 1.什么叫隐函数&#xff1f; 形如F(x…

MATLAB绘图命令fimplicit绘制隐函数图形入门详解

一、fimplicit基本语法 数学上的一元函数可以分为显函数和隐函数两大类&#xff0c;显函数的优点是能够明显的看出来因变量和自变量之间的关系&#xff0c;也就是对应法则&#xff0c;但是隐函数往往无法看出对应法则&#xff0c;而且很多时候都不能轻松的转化为显函数。 fplot…

高数-隐函数求导

目录 什么是隐函数 一个方程&#xff0c;两个未知数 一个方程&#xff0c;三个未知数 方程组求偏导 隐函数求导一般有两种情形&#xff0c;一种是单个方程&#xff0c;另一种是方程组。下面来介绍这两种情形的求导方法。 什么是隐函数 首先我们要明确&#xff1a;什么是隐函…