SQL注入专题(防范+攻击)全手册

合集下载

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注入攻击与防范措施引言:在当今数字化时代,互联网应用广泛应用于各行各业。

然而,与之相应的网络安全威胁也随之而来。

SQL注入攻击是其中一种常见的网络攻击手段,它利用不当的输入验证和编码错误,通过恶意注入SQL代码来绕过应用程序的安全机制,实施各种危害行为。

本文将分析SQL注入攻击的原理,并提出一些有效的防范措施。

一、SQL注入攻击的原理SQL注入攻击是指黑客通过在用户输入的数据中注入恶意的SQL代码,从而实现非法访问、窃取敏感信息,甚至控制数据库服务器的攻击方式。

其原理如下:1. 输入验证不严格:当应用程序对用户输入的数据没有进行充分的验证时,用户可以在输入中插入SQL语句,从而改变程序的执行逻辑。

2. 编码错误:当应用程序在处理用户输入时出现编码错误时,用户可以通过插入特殊的字符来绕过输入验证,注入恶意的SQL代码。

3. 错误信息泄露:当应用程序把数据库返回的错误信息直接显示给用户时,黑客可以利用这些错误信息来获取数据库的结构和内容,从而更好地实施SQL注入攻击。

二、SQL注入攻击的危害SQL注入攻击可以对数据库服务器造成严重的危害,包括但不限于以下几个方面:1. 非法访问:黑客可以通过注入恶意的SQL代码,绕过身份验证,访问未经授权的数据库内容。

2. 数据泄露:黑客可以通过注入SQL代码,获取数据库中的敏感信息,例如用户的密码、信用卡信息等。

3. 数据篡改:黑客可以通过注入SQL代码,修改数据库中的数据,导致数据的不一致性和可靠性的丧失。

4. 拒绝服务:黑客可以通过注入恶意的SQL代码,导致数据库服务器负载过载,从而使合法用户无法正常访问。

三、防范SQL注入攻击的措施为了防止SQL注入攻击,我们可以采取一系列措施来确保应用程序的安全。

1. 输入验证和过滤:对用户输入的数据进行充分的验证和过滤,确保只接受合法的数据。

可以使用正则表达式、白名单等方法来过滤输入数据。

2. 参数化查询:使用参数化查询或预处理语句来构建SQL语句,确保用户输入的数据不会被误解为SQL代码的一部分。

SQL注入攻击原理与防范

SQL注入攻击原理与防范

SQL注入攻击是一种常见的网络攻击手段,其目的是利用应用程序中的安全漏洞,通过构造特定的SQL查询语句,获取或篡改数据库中的数据,从而达到非法目的。

下面我们将详细介绍SQL注入攻击的原理和防范方法。

一、SQL注入攻击原理SQL注入攻击主要是通过构造特定的SQL查询语句,绕过应用程序的安全检查,从而获取或篡改数据库中的数据。

攻击者可以通过以下几种方式进行SQL注入攻击:1. 输入恶意SQL语句攻击者可以通过构造恶意SQL语句,伪装成正常的用户输入,注入到应用程序中,从而获取或篡改数据库中的数据。

例如,攻击者可以构造一个恶意查询语句,查询所有用户的敏感信息,并将这些信息发送到攻击者指定的邮箱中。

2. 隐藏SQL注入标记攻击者还可以通过隐藏SQL注入标记,绕过应用程序的安全检查,从而达到非法目的。

例如,攻击者可以构造一个恶意查询语句,查询指定表的所有字段,并通过转义或删除特定字符的方式,绕过应用程序的安全检查。

3. 利用应用程序漏洞攻击者还可以利用应用程序漏洞,直接注入恶意代码,从而达到非法目的。

例如,攻击者可以利用SQL查询语句中的特定关键字或符号,构造恶意代码,从而获取或篡改数据库中的数据。

二、SQL注入攻击防范方法为了防范SQL注入攻击,我们可以采取以下几种方法:1. 输入验证输入验证是一种常用的防范方法,它可以防止恶意SQL语句的注入。

输入验证可以通过对用户输入进行过滤和转义,从而防止恶意SQL语句的注入。

例如,我们可以对用户输入进行正则表达式匹配,删除或替换特定字符,从而防止恶意SQL语句的注入。

2. 参数化查询参数化查询是一种常用的防范方法,它可以防止隐藏SQL注入标记。

参数化查询可以将用户输入作为查询参数的一部分,从而防止恶意SQL语句的注入。

例如,我们可以使用参数化查询语句,将用户输入作为查询参数的一部分,从而防止恶意SQL语句的注入。

3. 限制用户输入长度限制用户输入长度也是一种常用的防范方法,它可以防止恶意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注入攻击的原理、攻击方式以及防范措施。

一、SQL注入攻击的原理SQL注入攻击就是攻击者通过向网站提交恶意的SQL语句,从而实现获取、篡改或者删除网站中的数据。

这种攻击方式主要是利用网站在处理用户输入的时候没有对其进行充分的检查和过滤,使得攻击者可以利用已知的SQL语句结构,通过在用户输入中插入特殊字符来修改SQL语句,从而达到攻击网站信息的目的。

二、SQL注入攻击的方式1. 基于错误的SQL注入攻击基于错误的SQL注入攻击是攻击者通过向网站提交包含错误语法的SQL语句从而暴露网站的SQL语句结构和漏洞。

攻击者可以通过尝试构造错误的SQL语句来确定网站的SQL查询语句结构,然后再利用他们知道的信息以及其他被认为是敏感的信息来执行攻击。

2. 盲注SQL注入攻击盲注SQL注入攻击是攻击者通过向网站提交针对可能的输入序列进行测试的语句,实现获取、篡改或者删除网站中的数据。

这种类型的攻击需要进行更多的测试和更多的时间以确定数据库的实际值。

3. 堆叠查询注入攻击堆叠查询注入攻击是攻击者利用SQL语句的多条语句执行行为达到攻击目的的攻击方式。

一般情况下,攻击者将多个查询语句以分号作为分隔符,合并成一条完整的SQL语句提交给服务器执行,达到获取、篡改信息的目的。

三、SQL注入攻击的防范措施1. 防范SQL注入攻击的最简单的方法是使用预编译语句,这将防止攻击者将任何SQL代码插入输入字段。

2. 输入过滤和验证是一种更加常用的方法。

输入过滤通常由Web防火墙执行,包括过滤掉容易受到攻击的字符和语法。

在输入处理级别,可以使用JavaScript和HTML5元素来验证表单数据,以确保只接受有效数据而且数据类型正确。

网络安全中的防范SQL注入攻击

网络安全中的防范SQL注入攻击

网络安全中的防范SQL注入攻击随着网络的飞速发展,互联网已经成为人们生活中不可或缺的一部分。

但是,网络的安全问题也逐渐成为人们关注的焦点。

在网络攻击中,SQL注入攻击是一种非常常见的攻击方式。

本文将从什么是SQL注入攻击、防范SQL注入攻击的方法以及如何提升安全意识等方面进行探讨。

一、什么是SQL注入攻击在了解SQL注入攻击之前,我们需要先了解什么是SQL语句。

SQL语句是一种用于与关系型数据库进行交互的语言,常见的操作包括查询、插入、更新和删除等。

而SQL注入攻击就是利用特定的技术手段,向数据应用程序的输入参数中添加恶意的SQL语句,来实现非法的操作,比如删除或篡改数据库内容。

例如,一个常见的登录系统的SQL语句为:SELECT * FROM users WHERE username = 'admin' AND password = '123456'当用户输入用户名和密码后,系统将该语句提交给数据库,如果输入正确,则返回用户的登录信息,否则提示用户名或密码错误。

但是,如果黑客在用户输入框中输入以下内容:' OR '1'='1则该SQL语句将变为:SELECT * FROM users WHERE username = '' OR '1'='1' AND password = ''此时,因为'1'='1' 总为真,恶意用户就可以绕过原有的认证机制,成功登陆系统。

二、防范SQL注入攻击的方法虽然SQL注入攻击看起来非常可怕,但是在掌握正确的防范方法后,我们可以有效地提高应用程序的安全性。

下面介绍一些常见的防范方法:1.使用参数化查询:参数化查询利用预编译的语句,将输入数据与查询语句分离,使得攻击者无法向输入中添加恶意代码。

应用程序事先将SQL查询语句编写好,只需要传递必要的参数值,从而避免用户输入的数据与查询语句混淆。

网络安全防护防止SQL注入攻击

网络安全防护防止SQL注入攻击

网络安全防护防止SQL注入攻击网络安全防护:防止SQL注入攻击随着互联网的蓬勃发展,人们越来越依赖于网络进行生活、工作和娱乐。

然而,网络的广泛应用也带来了一系列的安全威胁,其中之一就是SQL注入攻击。

本文将以网络安全防护的角度,探讨如何有效地防止SQL注入攻击。

1. 什么是SQL注入攻击?SQL注入攻击是一种常见的网络攻击手段,黑客通过在用户输入的数据中嵌入恶意的SQL代码,从而绕过应用程序的验证机制,对数据库进行非法操作。

这些恶意的SQL代码可导致数据库泄露、数据篡改、服务器崩溃等严重后果。

因此,防止SQL注入攻击对于确保系统的安全性至关重要。

2. 防止SQL注入攻击的方法2.1 输入校验与过滤输入校验是防止SQL注入攻击的第一道防线。

应用程序应该对用户输入的数据进行有效的校验和过滤,确保只有合法的数据能够通过。

下面是一些常用的输入校验与过滤方法:- 数据类型验证:确保用户输入的数据类型与要求一致,例如数字、字符串等。

- 长度限制:对用户输入的数据长度进行限制,避免过长的输入导致缓冲区溢出。

- 特殊字符过滤:过滤掉用户输入中的特殊字符,如单引号、双引号、分号等,这些字符常被用于构造恶意的SQL语句。

- 参数化查询:使用参数化查询来代替拼接SQL语句,从而避免了用户输入被误解为SQL代码的风险。

2.2 最小权限原则最小权限原则是一种重要的安全策略,即用户只能拥有其所需的最低权限。

将数据库的读写权限控制到最小范围,可有效降低SQL注入攻击的风险。

在设计数据库权限时,应根据具体业务需求为用户分配不同的权限等级,合理划分用户组织结构。

此外,还需定期审查和更新权限设置,以保持数据的安全性。

2.3 防火墙和入侵检测系统防火墙和入侵检测系统是网络安全的重要组成部分,也可以有效防止SQL注入攻击。

防火墙可监控和过滤网络流量,对非法的SQL请求进行拦截和阻止。

入侵检测系统可以检测和预警潜在的SQL注入攻击,及时采取应对措施。

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注入专题(防范+攻击)全手册SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。

随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。

但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。

用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。

SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。

但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。

能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。

1楼:SQL注入漏洞全接触--入门篇2楼:SQL注入漏洞全接触--进阶篇3楼:SQL注入漏洞全接触--高级篇4楼:SQL Server应用程序中的高级SQL注入5楼:编写通用的ASP防SQL注入攻击程序6楼:利用instr()函数防止SQL注入攻击7楼:SQL注入攻击的原理及其防范措施8楼:跨站式SQL注入技巧9楼:防范Sql注入式攻击10楼:Dreamweaver中sql注入式攻击的防范11楼:PHP与SQL注入攻击12楼:SQL注入攻击零距离13楼:SQL注入技术和跨站脚本攻击的检测14楼:菜鸟入门级:SQL注入攻击15楼:三步堵死SQL注入漏洞16楼:SQL注入实战---利用“dbo”获得SQL管理权限和系统权限17楼:两个防SQL注入过滤代码18楼:蓝雨设计整站SQL注入漏洞19楼:SQL注入渗透某网络安全公司的网站全过程20楼:sql注入防御21楼:终极防范SQL注入漏洞22楼:SQL注入与ASP木马上传23楼:如何在SQL注入时保护数据库24楼:天晨设计整站SQL注入漏洞25楼:浅谈sql注入式(SQL injection)攻击与防范26楼:用vbs来写sql注入等80端口的攻击脚本27楼: C# 检查字符串,防SQL注入攻击28楼:SQL注入入侵动网SQL版论坛29楼:利用SQL注入2分钟入侵网站全程实录SQL注入漏洞全接触--入门篇随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。

但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。

用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。

SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。

但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。

能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。

根据国情,国内的网站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。

在本文,我们从分入门、进阶至高级讲解一下ASP注入的方法及技巧,PHP注入的文章由NB联盟的另一位朋友zwell撰写,希望对安全工作者和程序员都有用处。

了解ASP 注入的朋友也请不要跳过入门篇,因为部分人对注入的基本判断方法还存在误区。

大家准备好了吗?Let's Go...入门篇如果你以前没试过SQL注入的话,那么第一步先把IE菜单=>工具=>Internet选项=>高级=>显示友好 HTTP 错误信息前面的勾去掉。

否则,不论服务器返回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息。

第一节、SQL注入原理以下我们从一个网站开始(注:本文发表前已征得该站站长同意,大部分都是真实数据)。

在网站首页上,有名为“IE不能打开新窗口的多种解决方法”的链接,地址为:/showdetail.asp?id=49,我们在这个地址后面加上单引号’,服务器会返回下面的错误提示:Microsoft JET Database Engine 错误 '80040e14'字符串的语法错误在查询表达式 'ID=49'' 中。

/showdetail.asp,行8从这个错误提示我们能看出下面几点:1.网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。

2.程序没有判断客户端提交的数据是否符合程序要求。

3.该SQL语句所查询的表中有一名为ID的字段。

从上面的例子我们可以知道,SQL注入的原理,就是从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取你想到得到的资料。

第二节、判断能否进行SQL注入看完第一节,有一些人会觉得:我也是经常这样测试能否注入的,这不是很简单吗?其实,这并不是最好的方法,为什么呢?首先,不一定每台服务器的IIS都返回具体错误提示给客户端,如果程序中加了cint(参数)之类语句的话,SQL注入是不会成功的,但服务器同样会报错,具体提示信息为处理 URL 时服务器上出错。

请和系统管理员联络。

其次,部分对SQL注入有一点了解的程序员,认为只要把单引号过滤掉就安全了,这种情况不为少数,如果你用单引号测试,是测不到注入点的那么,什么样的测试方法才是比较准确呢?答案如下:① /showdetail.asp?id=49② /showdetail.asp?id=49 and 1=1③ /showdetail.asp?id=49 and 1=2这就是经典的1=1、1=2测试法了,怎么判断呢?看看上面三个网址返回的结果就知道了:可以注入的表现:① 正常显示(这是必然的,不然就是程序有错误了)② 正常显示,内容基本与①相同③ 提示BOF或EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof 时)、或显示内容为空(程序加了on error resume next)不可以注入就比较容易判断了,①同样正常显示,②和③一般都会有程序定义的错误提示,或提示类型转换时出错。

当然,这只是传入参数是数字型的时候用的判断方法,实际应用的时候会有字符型和搜索型参数,我将在中级篇的“SQL注入一般步骤”再做分析。

第三节、判断数据库类型及注入方法不同的数据库的函数、注入方法都是有差异的,所以在注入之前,我们还要判断一下数据库的类型。

一般ASP最常搭配的数据库是Access和SQLServer,网上超过99%的网站都是其中之一。

怎么让程序告诉你它使用的什么数据库呢?来看看:SQLServer有一些系统变量,如果服务器IIS提示没关闭,并且SQLServer返回错误提示的话,那可以直接从出错信息获取,方法如下:/showdetail.asp?id=49 and user>0这句语句很简单,但却包含了SQLServer特有注入方法的精髓,我自己也是在一次无意的测试中发现这种效率极高的猜解方法。

让我看来看看它的含义:首先,前面的语句是正常的,重点在and user>0,我们知道,user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。

拿一个 nvarchar 的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错,SQLServer的出错提示是:将nvarchar值”abc” 转换数据类型为 int 的列时发生语法错误,呵呵,abc正是变量user的值,这样,不废吹灰之力就拿到了数据库的用户名。

在以后的篇幅里,大家会看到很多用这种方法的语句。

顺便说几句,众所周知,SQLServer的用户sa是个等同Adminstrators权限的角色,拿到了sa权限,几乎肯定可以拿到主机的 Administrator了。

上面的方法可以很方便的测试出是否是用sa登录,要注意的是:如果是sa登录,提示是将”dbo”转换成int的列发生错误,而不是”sa”。

如果服务器IIS不允许返回错误提示,那怎么判断数据库类型呢?我们可以从Access和SQLServer和区别入手,Access和 SQLServer都有自己的系统表,比如存放数据库中所有对象的表,Access是在系统表[msysobjects]中,但在Web 环境下读该表会提示“没有权限”,SQLServer是在表[sysobjects]中,在Web 环境下可正常读取。

在确认可以注入的情况下,使用下面的语句:/showdetail.asp?id=49 and (select count(*) from sysobjects)>0/showdetail.asp?id=49 and (select count(*) from msysobjects)>0如果数据库是SQLServer,那么第一个网址的页面与原页面/showdetail.asp?id=49是大致相同的;而第二个网址,由于找不到表msysobjects,会提示出错,就算程序有容错处理,页面也与原页面完全不同。

如果数据库用的是Access,那么情况就有所不同,第一个网址的页面与原页面完全不同;第二个网址,则视乎数据库设置是否允许读该系统表,一般来说是不允许的,所以与原网址也是完全不同。

大多数情况下,用第一个网址就可以得知系统所用的数据库类型,第二个网址只作为开启IIS错误提示时的验证。

[ 此贴被sunyfun在2007-05-03 20:13重新编辑 ]本贴标签:Posted:2007-05-03 19:49 | [楼主]sunyfun用户名:sunyfun级别: 论坛版主精华: 6发帖: 686经验值: 1034点积分: 850 分贡献值: 2注册时间:2007-03-08 SQL注入漏洞全接触--进阶篇第一节、SQL注入的一般步骤首先,判断环境,寻找注入点,判断数据库类型,这在入门篇已经讲过了。

其次,根据注入参数类型,在脑海中重构SQL语句的原貌,按参数类型主要分为下面三种:(A) ID=49 这类注入的参数是数字型,SQL语句原貌大致如下:Select * from 表名 where 字段=49注入的参数为ID=49 And [查询条件],即是生成语句:Select * from 表名 where 字段=49 And [查询条件](B) Class=连续剧这类注入的参数是字符型,SQL语句原貌大致概如下:Select * from 表名 where 字段=’连续剧’注入的参数为Class=连续剧’ and [查询条件] and ‘’=’ ,即是生成语句:Select * from 表名 where 字段=’连续剧’ and [查询条件]and ‘’=’’(C) 搜索时没过滤参数的,如keyword=关键字,SQL语句原貌大致如下:Select * from 表名 where 字段like ’%关键字%’注入的参数为keyword=’ and [查询条件] and ‘%25’=’,即是生成语句:Select * from 表名 where字段like ’%’ and [查询条件] and ‘%’=’%’接着,将查询条件替换成SQL语句,猜解表名,例如:ID=49 And (Select Count(*) from Admin)>=0如果页面就与ID=49的相同,说明附加条件成立,即表Admin存在,反之,即不存在(请牢记这种方法)。

相关文档
最新文档