数据库SQL注入分类及防护思路数据库SQL注入分类及防护思路

合集下载

SQL注入的原理及防范

SQL注入的原理及防范

SQL注入的原理及防范SQL注入(SQL Injection)是一种常见的安全漏洞,攻击者通过在输入框或URL参数中输入恶意SQL语句来执行未经授权的数据库操作。

SQL注入的原理是攻击者通过构造恶意的SQL语句,将其插入到应用程序的输入参数中,利用应用程序对用户输入数据的信任来获取或修改数据库中的信息。

要防范SQL注入攻击,开发人员和系统管理员需要遵循以下几个原则:1.使用参数化查询:参数化查询是防范SQL注入攻击最有效的方式之一、通过使用参数化查询,可以将用户输入的数据作为参数传递给SQL查询,而不是直接将用户输入的数据拼接到SQL语句中。

这样可以避免攻击者利用恶意SQL语句来执行未经授权的数据库操作。

2.输入验证和过滤:对用户输入数据进行验证和过滤是防范SQL注入攻击的另一个重要措施。

在接收用户输入数据之前,应该对数据进行验证,确保数据格式符合预期,并在需要时进行过滤,去除不安全的字符。

例如,可以使用正则表达式来验证输入数据是否符合特定的格式,或使用内置的函数来过滤危险字符。

3.最小化权限:在数据库的设计中,应该尽量采用最小权限原则,即只给予应用程序访问数据库所需的最小权限。

这样即使攻击者成功注入恶意SQL语句,也只能执行受限的操作,减少损失。

4.错误消息处理:在应用程序中,应该避免直接将数据库错误信息暴露给用户。

攻击者可以通过数据库错误信息来获取有关数据库结构和操作的信息,从而更有针对性地进行攻击。

应该对错误信息进行适当处理,显示友好的提示信息而不是详细的错误信息。

5.定期更新和维护:对应用程序和数据库进行定期的更新和维护也是防范SQL注入攻击的有效措施。

及时修补系统漏洞和更新软件版本可以减少攻击者利用已知漏洞进行注入攻击的机会。

总的来说,防范SQL注入攻击需要开发人员和系统管理员共同努力,采取多种手段综合防范。

只有在建立完善的安全机制和规范的开发流程的基础上,才能有效地防止SQL注入这种常见的安全威胁,保护应用程序和数据库的安全。

什么是SQL注入?如何防止SQL注入?

什么是SQL注入?如何防止SQL注入?

什么是SQL注⼊?如何防⽌SQL注⼊?⼀、SQL注⼊1、什么是SQL注⼊?SQL注⼊是⽐较常见的⽹络攻击⽅式之⼀,主要攻击对象是数据库,针对程序员编写时的疏忽,通过SQL语句,实现⽆账号登录,篡改数据库。

SQL注⼊简单来说就是通过在表单中填写包含SQL关键字的数据来使数据库执⾏⾮常规代码的过程。

SQL数据库的操作是通过SQL语句来执⾏的,这就导致如果我们在代码中加⼊了某些SQL语句关键字(⽐如说DELETE、DROP等),这些关键字就很可能在数据库写⼊或读取数据时得到执⾏。

2、SQL注⼊攻击的总体思路 1. 寻找到SQL注⼊的位置;2. 判断服务器类型和后台数据库类型;3. 针对不同的服务器和数据库特点进⾏SQL注⼊攻击。

3、SQL注⼊案例来看⼀个SQL注⼊的案例。

正常代码import sqlite3# 连接数据库conn = sqlite3.connect(‘test.db’)# 建⽴新的数据表conn.executescript(”’DROP TABLE IF EXISTS students;CREATE TABLE students (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL);”’# 插⼊学⽣信息students = [‘Paul’,’Tom’,’Tracy’,’Lily’] for name in students:query = “INSERT INTO students (name) VALUES (‘%s’)” % (name)conn.executescript(query);# 检视已有的学⽣信息cursor = conn.execute(“SELECT id, name from students”)print(‘IDName’) for row in cursor: print(‘{0}{1}’.format(row[0], row[1]))conn.close()SQL注⼊代码# 连接数据库conn = sqlite3.connect(‘test.db’)# 插⼊包含注⼊代码的信息 name = “Robert’);DROP TABLE students;–”query = “INSERT INTO students (name) VALUES (‘%s’)” % (name)conn.executescript(query)# 检视已有的学⽣信息cursor = conn.execute(“SELECT id, name from students”)print(‘IDName’) for row in cursor:print(‘{0}{1}’.format(row[0], row[1]))conn.close()上述代码执⾏其后果可想。

SQL注入式攻击及其防范措施研究

SQL注入式攻击及其防范措施研究

SQL注入式攻击及其防范措施研究SQL注入式攻击是一种常见的Web应用程序攻击技术,通过恶意注入SQL语句,攻击者可以绕过应用程序的身份验证和授权机制,获取或修改数据库中的敏感数据。

本文将详细介绍SQL注入式攻击的原理和常见的攻击手段,并提出有效的防范措施。

一、SQL注入原理及其危害1.SQL注入原理SQL注入攻击利用了应用程序未对用户输入的数据进行完全验证和过滤的漏洞。

当用户输入的数据直接拼接到SQL查询语句中时,攻击者可以通过在输入中插入恶意代码,改变SQL查询的逻辑,从而获取或修改数据库中的数据。

2.SQL注入的危害(1)数据泄露:攻击者可以通过恶意注入的SQL语句获取数据库中的敏感数据,如用户的账号、密码、信用卡信息等。

(2)数据修改:攻击者可以修改数据库中的数据,包括删除、修改、添加数据,从而破坏应用程序的功能或篡改系统配置。

(3)绕过身份验证:通过注入的SQL语句,攻击者可以绕过应用程序的身份验证和授权机制,以管理员或其他特权用户的身份执行恶意操作。

(4)拒绝服务:攻击者可以利用SQL注入攻击导致数据库崩溃或系统资源耗尽,从而拒绝正常用户的服务。

二、SQL注入攻击的常见手段1.基于报错的注入攻击攻击者通过输入恶意代码,触发应用程序产生报错信息,从而获取数据库中的信息,如表名、列名等。

常见的攻击代码包括单引号、注释符、SQL语句的拼接等。

2.盲注攻击盲注攻击是一种注入攻击的变种,攻击者无法直接获取数据库的信息,但可以通过不断尝试恶意代码并观察应用程序的响应来判断数据库是否存在漏洞。

常见的盲注攻击包括利用布尔盲注和时间盲注。

3.堆叠查询攻击攻击者利用应用程序允许同时执行多条SQL查询的漏洞,将多条恶意SQL语句堆叠在一起执行,从而获取或修改数据库中的数据。

三、防范SQL注入式攻击的措施1.输入验证与过滤应用程序应对用户的输入进行完全验证和过滤,将用户输入的字符、特殊字符和SQL敏感字符进行转义或替换。

SQL注入攻击的种类和防范手段

SQL注入攻击的种类和防范手段

SQL注入攻击的种类和防范手段1.基于错误的注入攻击:攻击者在SQL查询中插入错误或不完整的语句,以引发错误信息或日志,从而获取对数据库的相关信息。

2. 基于联合查询的注入攻击:攻击者通过在用户输入中插入union 语句,用于合并两个或多个查询结果,从而泄露数据库中的数据。

3.基于布尔查询的注入攻击:攻击者通过修改WHERE或HAVING语句中的条件,利用布尔值的真假来获取有关数据库的信息。

4.基于时间延迟的注入攻击:攻击者通过在数据库查询中添加延迟函数,如SLEEP(,使应用程序的响应时间延长,从而可以通过测量响应时间来判断条件是否成立。

5. 盲注入攻击:攻击者无法直接从Web应用程序中获取任何错误信息,但可以使用其他方式来确认注入成功,如延迟注入或二分法等方法。

防范手段:1.使用参数化查询或预编译语句:参数化查询可以防止攻击者在用户输入中插入恶意的SQL代码。

2.过滤和验证用户输入:对用户输入进行严格的过滤和验证,确保只接受合法的数据,如去除非法字符、转义特殊字符等。

3.最小权限原则:数据库用户应该具有最小的权限,只能执行必要的操作,并且不应具有直接修改数据库结构或执行系统命令的权限。

4.改变默认的数据库监听端口:将数据库的监听端口从默认的端口改为非常规的端口,可以减少被攻击的概率。

5.错误信息处理:应该避免在错误信息中透露关键的系统或数据库信息,最好将详细的错误信息记录在日志中,只向用户显示一般的错误提示信息。

6.防火墙和入侵检测系统:使用防火墙和入侵检测系统来监控和阻止潜在的SQL注入攻击。

7.定期更新和维护应用程序和数据库:及时更新和维护应用程序和数据库的补丁,以修复已知的漏洞。

8.检查第三方代码库和插件:确保使用的任何第三方代码库和插件都是受信任的,并且定期更新和审查其代码。

9.数据加密和敏感信息保护:对数据库中的敏感数据进行加密,并采取适当的措施来保护加密密钥和凭证。

综上所述,针对SQL注入攻击,我们需要综合使用多种防范手段,既包括在应用程序层面上做好安全防护,如使用参数化查询、过滤和验证用户输入,也需要在网络和基础设施层面上加强安全措施,如使用防火墙、入侵检测系统等。

SQL注入入侵防范技术措施

SQL注入入侵防范技术措施

SQL注入入侵防范技术措施SQL注入是一种常见的web应用漏洞,攻击者利用输入的数据篡改SQL查询语句,从而获取、修改或删除数据库中的数据。

为了防范SQL注入,需要采取一系列的技术措施来保护web应用的安全性。

以下是常见的SQL注入防范技术措施:1.使用参数化查询:参数化查询是一种通过将用户输入的值作为参数传递给预编译的SQL语句来执行查询的方法。

这样可以避免将用户输入直接拼接到SQL语句中,从而防止注入攻击。

3.拒绝动态SQL:尽可能避免使用动态SQL语句,尤其是直接拼接用户输入的内容。

如果必须使用动态SQL,确保对输入进行严格的验证和过滤,以及使用参数化查询来执行动态SQL。

4.最小权限原则:给数据库用户分配最低权限的角色,避免使用具有过高权限的数据库用户。

限制数据库用户的访问权限可以减少攻击者成功入侵数据库的可能性。

5.日志监控与分析:记录所有SQL查询的日志,并对其进行监控和分析。

通过对日志进行审查,可以发现潜在的SQL注入攻击,并及时采取相应的措施来应对。

6. 使用防火墙:在数据库和web服务器之间设置防火墙,限制对数据库的直接访问。

只允许web服务器的IP地址访问数据库,并且禁止来自外部的直接连接。

这样可以降低数据库被攻击的风险。

7. 定期更新和维护:及时更新数据库软件和相关的补丁程序,以及web应用程序。

这样可以修复已知的安全漏洞,并提高系统的安全性。

另外,定期对数据库进行巡检和维护,确保数据库的完整性和安全性。

8. 使用安全编码实践:采用安全编码的最佳实践来开发web应用程序,例如避免在页面中显示详细的错误信息,防止敏感信息泄露等。

了解和遵守安全编码的指导原则,可以减少SQL注入等漏洞的出现。

9.安全训练和意识提高:加强员工的安全培训,提高对SQL注入等安全漏洞的认识和意识。

建立一个安全意识的文化,让员工充分理解安全风险,并知道如何正确地处理用户输入和数据库操作。

总之,SQL注入是一种常见的web应用漏洞,但采取正确的技术措施可以有效地防范注入攻击。

sql注入漏洞原理、常见测试方法及防御方法

sql注入漏洞原理、常见测试方法及防御方法

sql注入漏洞原理、常见测试方法及防御方法SQL注入漏洞原理:SQL注入是一种利用Web应用程序中未正确过滤、转义或验证用户输入的漏洞,允许攻击者执行恶意的SQL语句。

攻击者可以通过在输入中插入特定的注入代码来修改应用程序的SQL查询,或者绕过身份验证、绕过访问控制或直接获取敏感信息。

常见的SQL注入测试方法:1. 基于错误的盲注:场景是当应用程序返回错误消息时,攻击者可以通过插入错误的语句来诱使应用程序返回不同的错误消息。

通过观察错误消息,攻击者可以推测出数据库结构和内容。

2. 基于时间的盲注:场景是当应用程序有时间延迟时,攻击者可以通过插入一些导致延迟的语句来判断SQL语句的执行结果。

通过观察应用程序的响应时间,攻击者可以推测出一些敏感信息。

3. 基于布尔的盲注:场景是当应用程序返回不同的响应内容时,攻击者可以通过插入布尔语句来判断SQL语句的执行结果。

通过观察应用程序的响应内容,攻击者可以推测出一些敏感信息。

防御方法:1. 输入验证和过滤:对用户输入的数据进行验证和过滤,确保只有合法的数据被传递给SQL查询。

可以使用编程语言内置的验证函数,或采用正则表达式进行输入过滤。

2. 使用参数化查询或预编译语句:通过使用参数化查询或预编译语句,可以确保用户输入的数据被正确地转义和处理,从而避免SQL注入漏洞。

3. 最小权限原则:数据库用户应该被授予最小的权限,以限制其对数据库的访问。

具体来说,应该禁止数据库用户执行DDL语句,只允许执行必要的DML操作。

4. 异常处理:在应用程序中正确处理异常,不要将详细的错误信息暴露给攻击者。

错误信息应该记录在日志中,而不是直接显示给用户。

5. 定期更新和修补:及时更新和修补数据库和应用程序中的安全漏洞,以确保系统的安全性。

同时,定期进行安全审计和漏洞扫描,及时发现和修复潜在的SQL注入问题。

SQL注入攻击及防御详解

SQL注入攻击及防御详解

SQL注⼊攻击及防御详解在owasp年度top 10 安全问题中,注⼊⾼居榜⾸。

SQL注⼊攻击指的是通过构建特殊的输⼊作为参数传⼊Web应⽤程序,⽽这些输⼊⼤都是SQL语法⾥的⼀些组合,通过执⾏SQL语句进⽽执⾏攻击者所要的操作,其主要原因是程序没有细致地过滤⽤户输⼊的数据,致使⾮法数据侵⼊系统。

1. 对于Web应⽤程序⽽⾔,⽤户核⼼数据存储在数据库中,例如MySQL、SQL Server、Oracle;2. 通过SQL注⼊攻击,可以获取、修改、删除数据库信息,并且通过提权来控制Web服务器等其他操作;3. SQL注⼊即攻击者通过构造特殊的SQL语句,⼊侵⽬标系统,致使后台数据库泄露数据的过程;4. 因为SQL注⼊漏洞造成的严重危害性,所以常年稳居OWASP TOP10的榜⾸!1.实验说明⽬标靶机:OWASP_Broken_Web_Apps_VM_1.2测试渗透机:Kali-Linux-2018.2-vm-amd641.SQL注⼊的危害1、拖库导致⽤户数据泄漏;2、危害web等应⽤的安全;3、失去操作系统的控制权;4、⽤户信息被⾮法买卖;5、危害企业及国家的安全!2.注⼊流程1. 判断是否有SQL注⼊漏洞;2. 判断操作系统、数据库和web应⽤的类型;3. 获取数据库信息,包括管理员信息及拖库;4. 加密信息破解,sqlmap可⾃动破解;5. 提升权限,获得sql-shell、os-shell、登录应⽤后台;2.⼿动注⼊实战1.基于错误的注⼊错误注⼊的思路是通过构造特殊的sql语句,根据得到的错误信息,确认sql注⼊点;通过数据库报错信息,也可以探测到数据库的类型和其他有⽤信息。

通过输⼊单引号,触发数据库异常,通过异常⽇志诊断数据库类型,例如这⾥是MySQL数据库。

SQL注⼊语句解析:mysql> select first_name,last_name from ers;mysql> select first_name,last_name from ers where user_id='1';#你输⼊1 相当于在最后的两个单引号中间插⼊⼀个1来执⾏mysql的查询语句怎么样判断我们是否可以注⼊呢?会发⽣页⾯报错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> select first_name,last_name from ers where user_id='''这就代表此⽹站我们可以注⼊,有注⼊点。

SQL注入的常见攻击方法及其防范

SQL注入的常见攻击方法及其防范

SQL注入的常见攻击方法及其防范1.基于错误的盲注攻击:攻击者通过构造恶意的SQL查询语句,利用应用程序返回的错误信息获取数据库信息。

攻击者可以通过错误信息获知数据库版本、表结构等敏感信息,从而为进一步的攻击做准备。

防范方法:-对用户输入进行严格的输入验证。

检查用户输入是否合法,包括数据类型、长度、格式等。

-使用参数化查询或预编译语句,将用户输入的数据作为参数传递给SQL语句,而不是直接拼接在SQL语句中。

2.基于联合查询的注入攻击:攻击者通过构造恶意的SQL查询语句,利用联合查询的特性获取数据库信息。

联合查询是指同时从多个表中查询数据的语句,攻击者可以通过在恶意的SQL语句中添加并执行额外的查询来获取敏感数据。

防范方法:-避免动态拼接SQL语句,尽量使用预编译语句或参数化查询。

-限制数据库的用户权限,为应用程序使用的数据库用户设置最小必要权限。

3.基于时间的盲注攻击:攻击者通过构造恶意的SQL查询语句,利用应用程序在执行查询时的时间差异来获取数据库信息。

攻击者可以通过延长SQL查询的执行时间来判断是否注入成功。

防范方法:-对用户输入进行严格的输入验证和过滤,防止恶意的查询语句进入数据库。

-设置合理的超时时间,避免长时间的查询操作。

4.基于布尔的盲注攻击:攻击者通过构造恶意的SQL查询语句,利用应用程序对查询结果的不同响应来获取数据库信息。

攻击者可以通过不断尝试不同的条件,利用应用程序的响应来推测数据库的内容。

防范方法:-使用参数化查询或预编译语句,避免将用户输入直接拼接到SQL语句中。

-严格限制应用程序的错误信息泄露,仅向用户返回必要的错误信息。

-对用户输入进行严格的输入验证和过滤,排除可能的恶意输入。

除了以上几种常见的攻击方法和相应的防范措施,还有以下几点可以帮助提高应用程序的安全性:-定期更新和修补数据库和应用程序,及时应用安全补丁。

-采用最小权限原则,仅为应用程序使用的数据库用户分配最小必要的权限。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据库SQL注入分类及防护思路作者:安华金和思成一. 背景数据库凭借其强大的数据存储能力和卓越的数据处理性能,在各行各业的信息化建设中发挥着关键的作用。

随着数据库在各行业的大规模应用,数据泄露事件也频繁发生,这就使数据库安全问题也日益凸显,逐渐变成用户越来越担心的问题。

虽然数据库厂商已经做了许多有效的措施来尽量解决数据库存在的安全问题,但至今为止数据库的安全漏洞仍然不断增加。

下图为近5年数据库漏洞数量图。

在数据库漏洞中最为常见的漏洞类型是SQL注入漏洞。

安华金和数据库攻防实验室结合多年的实践结果总结出了数据库注入的分类分享给大家,以便大家对SQL注入型漏洞有一个更加全面的了解。

SQL注入漏洞不仅出现在WEB端,也出现在数据库的自定义或标准库的存储过程、函数、触发器中。

数据库自身的SQL注入漏洞比WEB端的注入漏洞对数据库的威胁性更大。

本文对SQL注入的分类是从数据库的角度来划分,不考虑WEB端的角度,这两者在分类上有着不同的角度。

首先在解释不同的数据库SQL注入漏洞之前先简要说明一下数据库攻击者能够进行SQL 注入的主要原理:SQL注入漏洞是用户在输入中混入了程序命令。

最直接的例子就是攻击者在正常的Web 页面中把自己的SQL 代码通过用户输入传输到相应的应用程序中,从而执行一些非授权的SQL 代码,以达到修改、窃取或者破坏数据库信息的目的。

SQL 注入攻击甚至可以帮组攻击者绕过用户认证机制,使其可以完全的操控远程服务器上的数据库。

如果应用程序使用一些用户输入的数据来构造动态的SQL语句去访问数据库,将可能遭受到SQL 注入攻击。

同样的如果在代码中使用了存储过程,并且这些存储过程缺乏对用户输入的合理限制也很容易发生SQL 注入。

二. SQL注入分类2.1 注入途径分类SQL注入漏洞按照注入的物理途径可以分成两大类:通过WEB端对数据库进行注入攻击和直接访问数据库进行注入攻击。

直接访问数据库进行注入攻击是以数据库用户的身份直接连接数据库进行SQL注入攻击。

在这种攻击方式中,攻击者可以通过SQL注入来执行SQL语句从而提高用户权限或者越权执行。

而那些在PL/SQL程序中在给用户授权的时候没有使用authidcurrent_user进行定义的存储过程、函数、触发器、程序块将更容易受到SQL注入攻击。

通过WEB应用程序的用户对数据库进行连接并进行SQL注入攻击。

在这种类型的SQL 注入攻击中,攻击者多采用拼接语句的方法来改变查询的内容。

获取该账号权限下的全部信息。

一些高级的攻击手段往往结合这两种方式,先利用WEB应用程序上的SQL注入漏洞获取数据库和数据库所在服务器的基本信息。

再利用数据库自身SQL注入漏洞对获取的数据库账号进行提权、越权等操作已达到对数据库进行破坏或者获取敏感信息的目的。

2.2 注入方式分类根据入侵方式,针对数据库的SQL注入攻击可以分为四种类型,分别是SQL Manipulation、Code Injection 、Function Call Injection以及Buffer Overflows 。

前两种SQL注入攻击较为常见,多出现在WEB端的SQL注入上,而后两种攻击类型是直接针对数据库自身的攻击方式,所以对数据库的安全威胁更加致命。

1.针对SQL 操作的注入攻击(SQL manipulation)是在所有的SQL 注入攻击类型中最常见的一种类型。

这种攻击的原理在于攻击者会试图在已经存在的SQL 语句中通过集合运算符(SET Operator)比如UNION、INTERSECT 或者MINUS 来添加一些内容在WHERE 子句中使其功能产生变化。

当然还有可能会有其他的很多变化存在。

最经典的SQL manipulation 攻击就存在于登录验证过程中。

一个简单的Web 应用程序就可以通过执行以下的SQL 语句来检查用户认证是否有返回值:SELECT * FROM users WHERE username = 'admin' and PASSWORD = 'guess'而攻击者就可以尝试修改SQL 语句使其变为:SELECT * FROM users WHERE username = 'admin' and PASSWORD = 'xxxx'or 'a' ='a'通过以上对于WHERE 子句的修改操作可以使用户登录的判定恒为真,这样攻击者便绕过了用户验证获得了进入后台的权利。

集合运算符UNION 也常常被用在SQL 注入攻击中,其最主要的目的就是通过操作SQL 语句来从另外一个表中返回某些行。

一个WEB 窗体可以执行以下SQL 语句从一个存在的product 表中返回一个需要的表单:SELECT product_name FROM all_products WHERE product_name like '%ddd%'而攻击者可以修改SQL 语句使其变为:SELECT product_name FROM all_products WHERE product_name like '%ddd%' UNION SELECT username,password FROM dba_users WHERE username like ‘%’这种情况下在执行完这个SQL语句以后所返回的web表单中的结果就会包括所有的产品名以及所有的数据库用户名和密码(当然需要链接账号具备查询表dba_users 权限)。

2.代码注入攻击(CODE INJECTION)就是尝试在已经存在的SQL 语句中添加额外的SQL语句或者命令。

这种类型的攻击会经常的被应用在微软的SQLServer应用程序里。

在SQL Server 中EXECUTE 语句经常会成为这种SQL 注入攻击的目标。

虽然Oracle 这类数据库中没有相应的语句,在PL/SQL 和Java中,也不支持单个数据库的多条SQL 语句的请求,但一些程序语言或者API 可能允许多个SQL 语句同时执行。

PL/SQL 和Java 应用程序可以动态的执行那些容易受到代码注入攻击的匿名PL/SQL 块。

所以在特定情况下代码注入攻击对即便不支持多SQL请求的数据库依旧有效。

3.函数调用注入(FUNCTION CALL INJECTION)是因为在数据库函数或者自定义函数中存在某些漏洞,攻击者对问题函数进行SQL 语句注入从而使此函数可以执行非预期功能而达到攻击者的目的。

严格讲不光数据库中的函数可能存在这些漏洞存储过程、触发器等也存在类似漏洞。

这些函数调用可以被用来在数据库中生成数据或者系统调用。

以Oracle为例,Oracle 数据库允许自定义函数或者包中的函数作为SQL 语句的一部分来执行。

同时Oracle 数据库在175 个标准数据库包中提供了1000 多个函数,其中有一小部分有可能遭到SQL 注入攻击,而那些用作网络通信的函数同样可以被攻击者利用。

任何的自定义函数或者那些存在于自定义包中的函数都可以在SQL语句中执行。

当函数作为SQL SELECT 语句中的一部分来执行的时候对于数据库来说不会造成任何变化除非这个函数被标记成了“PRAGMATRANSACTION”。

只有极少数的标准数据库函数会被自动执行,而那些在插入、更新、删除语句中执行的函数会对数据库中的数据进行修改。

当攻击者使用那些有漏洞的标准Oracle 函数的时候就可以将数据库中的信息发送到远程计算机或者在其他的数据库服务器执行攻击。

许多基于Oracle 的应用程序都可能会使用那些有漏洞的数据库软件包,而这些自定义的软件包里就有可能会包括那些可以修改密码或执行那些敏感的应用程序的函数。

对于函数调用注入攻击来说,任何动态生成的SQL 语句都是脆弱的,即使是最简单的SQL 语句都可以被攻击者利用。

例如创建存储过程test说明用DBA权限建立自定义存储过程create or replace procedure test (putin varchar2) astypec_type is ref cursor;cvc_type;buffer varchar2(200);begindbms_output.enable(1000000);open cv for ‘select object_name from all_objects where owner =’’’||putin||’’’and object_type=’’library’’’’;…close cv;End;/这个SQL 语句不容易遭到其它类型的注入攻击,但是却很容易遭受到函数注入攻击。

这是因为在这个函数中缺乏对输入变量的约束。

攻击者可能会输入的是一个想要执行的命令。

例如grant dba to public;低权限用户构造一个含有想要执行的命令的函数Create or replace function get_dba return varchar authidcurrent_user isPragma autonomous_transaction;BeginExecute immediate ‘grant dba to scott’;End;/在这个例子中本来存储过程test是用来查询用户所拥有的库的,但是为了方便其他用户使用test的执行,这一权限被赋予了所有用户,导致任何用户都可以执行test存储过程。

但是函数中由于采用了定义者权限定义test,所以造成所有用户在执行test的时候都获得了DBA 权限。

这一过程是低权限用户创建注入函数get_dba。

通过test把任意低权限账号提权到DBA 权限。

Exec sys.test(‘AAAA’||username.get_dba()—‘);至此低权限用户通过漏洞把自身提权到DBA权限可以对整个数据库进行非法控制。

数据库厂商的解决方案一般是通过删除存在漏洞函数的public执行权限来解决4.许多的标准数据库函数都很容易受到缓冲区溢出(BUFFER OVER FLOWS)攻击,这是因为只需要对那些没有及时打补丁的数据库做SQL 注入攻击就可以很容易利用到缓冲区溢出漏洞。

缓冲区溢出漏洞危害很大,往往最终会造成攻击者直接控制数据库或数据库所在操作系统。

以Oracle为例,在某些版本的标准数据库软件包和标准数据库函数中TZ_OFFSET,TO_TIMESTAMP_TZ, BFILENAME, FROM_TZ, NUMTOYMINTERVAL, andNUMTODSINTERVAL等函数存在缓冲区溢出漏洞。

而要使用这些存在缓冲区溢出漏洞的标准数据库包和函数来做缓冲区溢出漏洞攻击就需要利用到之前所介绍的函数注入的方法;当攻击者通过SQL 注入攻击来利用缓冲区溢出漏洞的时候,就可以实现远程连接操作系统。

相关文档
最新文档