网络攻击与防护优秀论文

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

网络攻击与防护优秀论文

————————————————————————————————作者:————————————————————————————————日期:

江西理工大学应用科学学院《网络攻击与防御》课程作业论文

题目:利用SQL注入漏洞入侵网站

系别:______ 信息工程系_______________

班级:网络工程091

姓名:刘小彪

成绩:_____________________

二〇一二年四月

利用SQL注入漏洞入侵网站

一、选题的目的和意义

由于现今信息技术发展迅速,网络安全越来越成为虚拟网络中不可或缺的一部分。然而,因为各种Web服务器的漏洞与程序的非严密性,导致针对服务器的脚本攻击时间日益增多,其大多数是通过ASP或者PHP等脚本主图作为主要攻击手段,加之Web站点迅速膨胀的今天,基于两者的SQL注入也慢慢成为目前攻击的主流方式。其应用方式主要集在利用服务端口接收用户输入的功能,将构造的语句传给数据库服务器,让其执行者开发者规定外的任务。本次针对SQL 注入技术进行专题研究,进行工具注入的实战详解。简单介绍本次专题研究背景、来源以及研究意义;阐述SQL注入技术的背景与网络环境;详细介绍本次专题研究SQL注入攻击的实验过程和结果分析。

二、目前该选题的研究现状

目前至少70%以上的Web站点存在着SQL注入的缺陷,恶意用户便可以利用服务器、数据库配置的疏漏和精心构造的非法语句通过程序或脚本侵入服务器获得网站管理员的权限和数据库的相关内容,严重的还可以获得整个服务器所在内网的系统信息,它们的存在不仅对数据库信息造成威胁,甚至还可以威胁到系统和用户本身。所以当今的网络基本处于人人自危大家却不知道的状况,网络安全已经日益严重,许多的黑客能轻易的入侵一些中小型企业的网站,造成的财产损失还是很大的,对此我们有必要研究探索这方面的问题。

三、设计思路分析

手工猜解四部曲:数据库名:shop_admin 字段名:admin password 用户名:admin 密码:7a57a5a743894a01(admin的MD5)

SQL 注入是一种攻击方式,在这种攻击方式中,恶意代码被插入到字符串中,然后将该字符串传递到程序执行的SQL 语句中构成攻击者想执行的任意SQL语句,分析服务器返回的信息获得有关网站或服务器的敏感信息,进一步获得非法的信息和权限。

利用WEB应用对用户输入验证设计上的疏忽,或验证的不严格,从而使用户输入的数据中包含对某些数据库系统有特殊意义的符号或命令,让WEB应用用户有机会直接对后台数据库系统下达指令,实施入侵行为。SQL注入的产生主要是由动态字符串构建和不安

全的数据库配置产生,其中动态字符串构建主要是由不正确的处理转义字符、不正确的处理类型、不正确的处理联合查询、不正确的处理错误和不正确的处理多次提交构成。不安全的数据库配置产生主要是由默认预先安装的用户、以root,SYSTEM或者Administrator权限系统用户来运行和默认允许很多系统函数(如xp_cmdshell,OPENROWSET等)构成。如果一个恶意用户提供的字段并非一个强制类型,或者没有实施类型强制,就会发生这种形式的攻击。当在一个SQL语句中使用一个数字字段时,如果程序员没有检查用户输入的合法性(是否为数字型)就会发生这种攻击。例如:

Statement:="SELECT*FROM data WHERE id="+a_variable+";"

从这个语句可以看出,作者希望a_variable是一个与"id"字段有关的数字。不过,如果终端用户选择一个字符串,就绕过了对转义字符的需要。

Web应用程序开发时没有对用户的输入进行转义字符过滤时,就会发生这种形式的注入式攻击,它会被传递给一个SQL语句.这样就会导致恶意用户对数据库上的语句实施操纵。例如,下面的这行代码就会演示这种漏洞:

Statement:="SELECT*FROM users WHERE name='"+userName+"';"

此段代码的设计目的是将一个特定的用户从其用户表中取出,但是,如果用户名被一个恶意的用户用一种特定的方式伪造,这个语句所执行的操作可能就不仅仅是应用程序开发者所期望的那样例如,将用户名变量(即username)设置为:

a′or′1′=1′,此时原始语句发生了变化:

SELECT*FROM users WHERE name=′a′OR′1′=′1′;

如果这种代码被用于一个认证过程,那么这个例子就能够强迫选择一个合法的用户名,因为赋值

′1′=′1永远是真。

在一些特定的SQL服务器上,如在SQL Server中,任何一个SQL命令都可以通过这种方法被注入,包括执行多个语句。

Union查询动机是绕过验证或者提取数据。攻击者在查询语句中注入Union SELECT语句,并且因为用户控制"SELECT语句"的内容,攻击者可以得到想要的信息。Union查询SQL注入测试。

假设我们有如下的查询:

SELEC Name,Psw,Tel FROM Users WHERE Id=$id然后我们设置id的值为:

$id=1UNION ALL SELECT bank CardNumber,1,1 FROM BankCardTable

那么整体的查询就变为:

SELECT Name,Psw,Tel FROM Users WHERE Id=1 UNION ALL SELECT bankCardNumber,1,FROM BankCarTable

显然这样就能得到所有银行卡用户的信息。

使用注释通常可以使攻击者绕过验证。SQL在查询中支持注释,如,--、#等。通过注入注释符,恶意用户或者攻击者可以毫不费力的截断SQL查询语句。例如,对于查询语句SELECT*FROM users WHERE usermame=uname and Password=psw,如果恶意用户输入参数uname的值为admin--,Password的值为空,那么查询语句变为SELECT*FROM users WHERE usermame=admin and Password=,也就SELECT*FROM users WHERE usermame=admin。这就使得恶意用户不用提供密码就可以通过验证。

四、设计过程描述

SQL注入攻击可以手工进行,也可以通过SQL注入攻击辅助软件如HDSI、Domain、NBSI等,其实现过程可以归纳为以下几个阶段:

(1)寻找SQL注入点;寻找SQL注入点的经典查找方法是在有参数传入的地方添加诸如“and 1=1”、“and 1=2”以及“’”等一些特殊字符,通过浏览器所返回的错误信息来判断是否存在SQL注入,如果返回错误,则表明程序未对输入的数据进行处理,绝大部分情况下都能进行注入。

(2)获取和验证SQL注入点;找到SQL注入点以后,需要进行SQL注入点的判断,常常采用2.1中的语句来进行验证。

(3)获取信息;获取信息是SQL注入中一个关键的部分,SQL注入中首先需要判断存在注入点的数据库是否支持多句查询、子查询、数据库用户账号、数据库用户权限。如果用户权限为sa,且数据库中存在xp_cmdshell存储过程,则可以直接转(4)。

(4)实施直接控制;以SQL Server 2000为例,如果实施注入攻击的数据库是SQL Server 2000,且数据库用户为sa,则可以直接添加管理员账号、开放3389远程终端服务、生成文件等命令。

(5)间接进行控制。间接控制主要是指通过SQL注入点不能执行DOS等命令,只能进行数据字段内容的猜测。在Web应用程序中,为了方便用户的维护,一般都

相关文档
最新文档