SQL注入攻击实验报告_林凯杰_200930601340

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

SQL注入攻击实验

【实验要求】

1)Sql注入攻击的实现与防御,其中防御模块为可选作部分。

2)要求:提交源代码和可执行文件,提供用户使用文档和实验报告文档(包括开发环境、运行主要截图、实验收获等说明)。

【实验原理】

1、结构化查询语言(SQL)是一种用来和数据库交互的文本语言,SQL Injection就是利用某

些数据库的外部接口把用户数据插入到实际的数据库操作语言当中,从而达到入侵数据库乃至操作系统的目的。它的产生主要是由于程序对用户输入的数据没有进行细致的过滤,导致非法数据的导入查询。

2、SQL注入攻击主要是通过构建特殊的输入,这些输入往往是SQL语法中的一些组合,

这些输入将作为参数传入Web应用程序,通过执行SQL语句而执行入侵者的想要的操作,一般想要攻击成功,需要做到以下三点:

1)确定Web应用程序所使用的技术:注射式攻击对程序设计语言或者硬件关系密切,但是这些可以通过适当的踩点或者索性将所有常见的注射式攻击都搬出来逐个试一

下就知道了。为了确定所采用的技术,攻击者可以考察Web页面的页脚,查看错

误页面,检查页面源代码,或者使用诸如Nessus等工具来进行刺探。

2)确定所有可能的输入方式:Web应用的用户输入方式比较多,其中一些用户输入方式是很明显的,如HTML表单;另外,攻击者可以通过隐藏的HTML表单输入、

HTTP头部、cookies、甚至对用户不可见的后端AJAX请求来跟Web应用进行交互。一般来说,所有HTTP的GET和POST都应当作用户输入。为了找出一个Web 应用所有可能的用户输入,我们可以求助于Web代理,如Burp等。

3)查找可以用于注射的用户输入:在找出所有用户输入方式后,就要对这些输入方式进行筛选,找出其中可以注入命令的那些输入方式。这个任务好像有点难,但是这

里有一个小窍门,那就是多多留意Web应用的错误页面,很多时候您能从这里得

到意想不到的收获。

3、SQL注入攻击的特点。

4)变种极多:有经验的攻击者会手动调整攻击参数,致使攻击数据的变种是不可枚举的,这导致传统的特征匹配检测方法仅能识别相当少的攻击,难以防范。

5)攻击过程简单:目前互联网上流行众多的SQL注入攻击工具,攻击者借助这些工具

可很快对目标WEB系统实施攻击和破坏。

6)危害大:由于WEB编程语言自身缺陷以及具有安全编程能力的开发人员少之又少,大多数WEB业务系统均具有被SQL注入攻击的可能。而攻击者一旦攻击成功,可以对控制整个WEB业务系统,对数据做任意的修改,破坏力达到及至。

4、SQL注入攻击过程。

1)判断Web环境是否可以SQL注入。如果URL仅是对网页的访问,不存在SQL注

入问题,如:/162414739931.shtml就是普通的网页访问。

只有对数据库进行动态查询的业务才可能存在SQL注入,如:

/webhp?id=39,其中?id=39表示数据库查询变量,这种语句会在数据库中执行,因此可能会给数据库带来威胁。

2)寻找SQL注入点。完成上一步的片断后,就要寻找可利用的注入漏洞,通过输入一

些特殊语句,可以根据浏览器返回信息,判断数据库类型,从而构建数据库查询语

句找到注入点。

3)猜解用户名和密码。数据库中存放的表名、字段名都是有规律可言的。通过构建特

殊数据库语句在数据库中依次查找表名、字段名、用户名和密码的长度,以及内容。

这个过程可以通过网上大量注入工具快速实现,并借助破解网站轻易破译用户密码。

4)寻找WEB管理后台入口。通常WEB后台管理的界面不面向普通用户开放,要寻找

到后台的登陆路径,可以利用扫描工具快速搜索到可能的登陆地址,依次进行尝试,就可以试出管理台的入口地址。

5)入侵和破坏。成功登陆后台管理后,接下来就可以任意进行破坏行为,如篡改网页、

上传木马、修改、泄漏用户信息等,并进一步入侵数据库服务器。

【实验环境】

操作系统:Windows 7 旗舰版

IDE :Myeclipse 8.6

服务器:Tomcat 7.0.11

数据库:SQLServer 2005

浏览器:搜狗浏览器3.2.0

【实验过程】

本次的实验过程主要用自己架设的网站进行SQL注入攻击的测试和防御。

1、新建网站SQLInjection项目,新建index.jsp进行SQL注入攻击演示。

这里以index.jsp为登陆界面,用户输入用户名和密码后进行登陆,获取参数后传递给LoginDeal(Servlet)进行处理,再根据处理的结果跳转到不同的页面。

1)页面预览如下:

2)这个页面的处理流程如下:

a)页面提交的用户名和密码通过表单提交,代码为

b)当点击登陆后,即提交表单到loginDeal,在loginDeal里获取到userName

和passwd后调用com.sqlInjection.util.RequestDeal类进行登陆的验证,如果验证成功则跳转到welcom.jsp页面,如果失败则设置相应的提示信息后跳转回index.jsp页面。

c)RequestDeal进行验证的方法为利用userName和passwd两个参数构造查询

语句"select * from users where name='" + userName +"' and passwd='"

+ passwd + "'",查询后返回ResultSet set,如果set.next()为true,则表

示表中存在这样的一个记录,用户合法,所以验证成功。

3)这里用到的数据库为sqlinjection,用到的users表结构为:

+------------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+------------+-------------+------+-----+---------+-------+

| name | varchar(25) | YES | | NULL | |

| passwd | varchar(35) | YES | | NULL | |

| permission | varchar(10) | YES | | NULL | |

+------------+-------------+------+-----+---------+-------+

其中name为用户名,passwd为密码,permission为等级。

4)正常的话用户输入自己的用户名和密码,如果正确则会跳转到welcome.jsp,如果

相关文档
最新文档