1、 信息系统应用安全课程终期论文 ——Web系统SQL注入漏洞 专业:信息安全 班级:0903 姓名:付晓帆 学号:U200915328 1. 选题背景 1.1.全球网络面临的主要威胁——黑客攻击 目前全球网络面临的主要威胁是黑客攻击,黑客技术逐渐被越来越多的人掌握和滥用,目前世界上有20多万个黑客网站,这些站点介绍一些攻击方法和攻击软件的使用以及曝光系统的一些漏洞,因而由此带来的各种攻击的可能性就非常大。尤其是现在众多机构还缺乏针对网络犯罪卓有成效的反击
2、和跟踪手段,使得隐蔽性好的黑客的攻击具有更大的破坏性,这是目前网络安全的主要威胁。 1.2. 黑客脚本攻击的主要技术——SQL注入 目前黑客攻击采用的主流技术是结构化查询语(Structured Query Language,SQL)注入攻击,它产生于应用层,现已成为网上最流行最热门的黑客脚本攻击方法之一。SQL注入攻击是指黑客利用一些WEB应用程序(论坛,留言本,文章发布系统)中某些疏于防范和用户可以提交或修改的数据的页面,精心构造SQL语句,把特殊的SQL指令语句插入到系统实际SQL语句中并执行它,以获取用户密码等敏感信息,以及获取主机控制权限的攻击方法。 而我国
3、计算机技术普及相对较晚,网站管理员普遍经验不足,再加上网站开发人员技术不过关,严重缺乏安全意识,导致存在大量的不安全网站。这些不安全的网站上存储着大量的用户帐号及密码信息,一旦被攻击者攻破,很可能会引起信用卡等金融安全问题。政府门户网站是政府对外宣传和信息发布的重要途径,由于安全问题没有得到重视,网站被篡改事件频繁发生,在社会上造成恶劣影响。 2. 实验原理 2.1 SQL注入攻击 SQL注入(SQL Injection)攻击是目前网上最流行最热门的黑客脚本攻击方法之一,那什么是SQL注入式攻击呢?它是指黑客利用一些WEB应用程序(论坛,留言本,文章发布系统)中某些疏于防范和用
4、户可以提交或修改数据的页面,精心构造SQL语句,把特殊的SQL指令语句插入到系统实际SQL语句中并执行它,以获取用户密码等敏感信息,以及获取主机控制权限的攻击方法。但这并不局限于MS SQL数据库中,ACCESS、MySQL、ORACLE、SYBASE都可以进行SQLInjection攻击。且SQL注入攻击具有以下特点:常规网络安全系统无法检测;攻击后果很严重;易于实施且技术门槛很低。 2.2 SQL注入攻击原理 SQL注入原理:目前,几乎所有的Web应用在后台都使用某种SQL数据库。跟大多数语言一样,SQL语法允许数据库命令和用户数据混杂在一起的。如果开发人员不细心的话,用
5、户数据就有可能被解释成命令,这就是潜在的SQL注入漏洞,针对此类漏洞,一旦参数精心构造,远程用户就不仅能向Web应用输入数据,而且还可以在数据库甚至OS上执行任意命令。 存在SQL注入漏洞的根本原因:在用户输入作为SQL语句参数时,未进行充分的检查验证,导致程序命令和用户数据(即用户输入)之间混淆,从而使得攻击者有机会将程序命令当作用户输入的数据提交给Web程序,造成破坏。 2.3 如何利用SQL注入漏洞进行攻击 用一个攻击实例来说明: 假设一个由ASP技术搭建的电子银行网站,用户登陆后,可以查看他们的帐户信息,进行在线付款等操作。WEB应用程序的典型操作流程为:首先
6、用户在WEB浏览器(表示层)中输入用户名和密码。然后,WEB浏览器通过Internet向服务器提交该信息。中间层根据用户的输入构造SQL查询语句,然后数据层在关系数据库中执行这个查询操作,并把查询的结果返回给中间层。中间层对返回的数据进行封装,生成HTML页面,建立连接返回给客户端的WEB浏器,这样用户就可以看到自己帐户的余额、付款记录等信息。上面所说的网上银行服务器,一般都有类似下面的脚本代码: 1.Login.asp 2.<% 3.’服务器脚本中接收用户提交信息 4.name=Request(”login”) 5.pwd=Request(”pass”) 6.’连接数据库
7、 7.Set Conn=Server.CreateObject(”adodb.Connection”) 8.Conn.ConnectionString=”driver={SQLserver};server---dbsever;UID=id; 9.PWD=pwd; 10.Database=sei” 11.conn.open 12.‘数据已经打开 13. 14.…… 15. 16.’构造查询的SQL语句 17.SQL=”select*from users where user=”+”&name&”+”password=”+ ”&pwd&” 18.’执行SQL语句 19.C
8、onn.Execute(SQL) 20. 21…… 22.%> 如上面代码所示,如果用户输入的Login和pass的值分别为“doe”和“xyz”,则服务器得到用户输入,交给Login asp脚本处理,在脚本的第4、5行将用户输入保存到变量中,在第17行将用户输入放在SQL查询语句中.自动生成查询语句为: Select*from users where username =’Doe’ and password = ’xyz’。 如果用户的输入为“‘abe’or 1=1—”和“”,而不是“doe”和“xyz”,该服务器端脚本构造的SQL查询语句为: Select * f
9、rom users where username = ’abe’ or l =1-- and password = ‘ ’ 输入的“’”闭合了SQL语句的“’”,“--”是SQL语言中的注释。所以“--”后面的所有内容被忽略,WHERE 判断语句后面的“Or 1=1”的恒成立,攻击者绕过了SQL语句的验证逻辑,查询执行之后将返回所有用户的信息。可见,服务器执行查询或存储过程时,由于SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者。 3. 实验设计 3.1 实验目的: 1. 学会SQL漏洞注入攻击; 2. 学会利用SQ
10、L漏洞注入攻击Web网站; 3. 对实验进行总结。 3.2 实验环境及工具: 操作系统 Windows XP 专业版 32位 SP3 ( DirectX 9.0c ) 处理器 英特尔 酷睿2 双核 T6570 @ 2.10GHz 笔记本处理器 网络平台 电信局域网 工具 小榕哥的SQL注入攻击工具;明小子注入工具 3.3 实验设计思路: 3.3.1 确定注入漏洞 要进行SQL注入攻击,首先要确认攻击的网络应用程序存在注入漏洞。一般攻击者通过进行攻击测试,首先尝试提交一些无
11、效的请求,根据能否引起服务器错误来判断WEB页面是否存在注入漏洞。 一个网络应用程序主要会产生两种类型的错误,第一种是由WEB服务器产生的代码异常(exception),第二类错误是由应用程序代码产生的。无论哪一种错误发生.都表明这可能是个潜在的注入点。 3.3.2 分析漏洞注入点 每一个从网络应用程序提交给SQL查询的参数可以被划分为三个主要类型:数字、字符串和日期。其中数字参数被直接提交给服务器,而字符串和日期则需要加上引号才被提交,例如: Select * from products where ProdID=4 与 Select * from products
12、 where ProdName=’Book’ 攻击者为了对注入点充分利用,需要分析出注入点的参数类型,以便在随后的攻击中采取适当的方式。如果注入点确实存在,通过一定的技巧,攻击者很容易判断出注入点的参数类型。 3.3.3 实施注入攻击 攻击者在确定注入点并对其进行分析后,就要尝试进行注入利用,这需要确定符合SQL语法的注入请求表达式,判断出后台数据库的类型,然后构造出所需的利用代码。 (1) 确定正确的注入句式:这是SQL注入攻击中最难也最有技巧的步骤,如果最初的SQL请求语句很简单,那么确定正确的注入句法也相对容易,而如果最初的SQL请求语句较复杂,那么要想突破其限制
13、就需要多次的尝试,但进行这些尝试所需要的基本技术却是非常简单。 (2) 判断出后台数据库的类型:这个步骤比确定注入句法要简单得多。攻击者使用的技巧是基于不同类型数据库引擎在具体实现上的差异。比如:MS SQLServer使用符号“+"来连结字符串,而Oracle使用符号“ || "来连结。 (3) 构造注入利用代码:当上述步骤都成功的时候,攻击者就可以开始进行注入利用,通过构造特定的SQL语句的敏感信息,提升访问权限甚至渗透至操作系统。 攻击者通常也会采用下面介绍的一些常用的技术: 1)插入恒等式 这是SQL注入最常用的技巧之一,通过向SQL查询语句中插入恒等式可以在
14、没有经过授权的情况下进入数据库。更为严重的是,如果中间层需要的只是一条记录,而SQL查询返回的是一个数据库表的所有记录,一般中间层会把查询结果集合的第一条记录返回给客户端,而用户表中第一条记录往往就是管理员的信息。 2)UNION查询 UNION关键字可以将两个查询连接在一起,并合并查询结果,返回一个查询集合。进行UNION SELECT注入需要预先获知数据库的表中的字段个数和类型,而这些信息通过WEB服务器返回的错误信息的提示是比较容易获得的。 3)利用注释 在T-SQL和PL/SQL中,连字符一一表示注释的开始。通过加入注释符号,攻击者可以截断SQL语句,绕过认证逻
15、辑,从而对数据库进行越权操作。 4)调用存储过程 存储过程(stored procedure)是一组为了完成特定功能的SQL语句集,经编译和优化后存储在数据库。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程允许标准组件式编程,具有较快的执行速度,能够减少网络流量等优点,所以在WEB应用程序开发中被广泛应用。但是如果存储过程能够为攻击者所调用,则对WEB应用程序系统的危害是无法估量的。 4.实验过程 4.1 下载榕哥的工具包 小榕哥的这个SQL注入攻击工具包在榕哥的站点 小程序:"wed.exe"和"wis.exe",
16、其中"wis.exe"是用来扫描某个站点中是否存在SQL注入漏洞的;"wed.exe"则是用来破解SQL注入用户名密码的。两个工具的使 用都非常简单,结合起来,就可以完成从寻找注入点到注入攻击完成的整个过程。 4.2 寻找SQL注入点 "wis.exe"使用的格式如下:"wis.exe 网址",首先打开命令提示窗口,输入如下命令:"wis.exe (在输入网址时,前面的"http://";和最后面的"/"是必不可少的,否则将会提示无法进行扫描),输入完毕后回车,即可开始进行扫描了。很快得到了扫描结果,可以看到这个网站中存在着一些SQL注入漏洞,我们可以挑其中一个来做试
17、验,比如/archiver/ ,截图如下所示: 4.3 SQL注入破解管理员帐号 现在进入命令窗口中,使用刚才下载的工具包中的"wed.exe"程序,命令使用格式为:"wed.exe 网址"输入如下命令:"wed.exe 。回车后可看到命令运行情况。(这次输入网址时,最后面千万不要加上那个"/",但前面的"http://";头也还是必不可少的)。 可以看到程序自动打开了工具包中的几个文件,"C:\wed\wed\TableName.dic"、"C:\wed\wed\UserField.dic"和"C:\wed\wed\PassField.dic",这几个文件分别是用
18、来破解用户数据库中的字表名、用户名和用户密码所需的字典文件 在破解过程中还可以看到"SQL Injection Detected."的字符串字样,表示程序还会对需要注入破解的网站进行一次检测,看看是否存在SQL注入漏洞,成功后才开始猜测用户名。 实验截图如下所示,可以看到没有检测到该网页的SQL注入漏洞。 试图对其它几个注入点尝试SQL注入破解管理员账户,也因为类似原因失败。如下,对/wap/进行实验: 所以可以认为小榕哥的SQL注入攻击工具无法对该论坛的管理员帐号进行破解。可以尝试其它网站。 我在尝试了其它一些网站后发现,小榕哥的SQL注入攻击工
19、具要么我发找到注入点,要么即使找到大量注入点也无法破解管理员账户,所以小榕哥的SQL注入攻击工具可以发现大量注入点,但很难从中合适的注入点进行管理员账户破解。 之后我下载了明小子的注入工具进行SQL漏洞注入实验,但大多数网址在注入点检测时都显示:检测失败,该URL不可以进行注入!如下图所示: 在尝试了一些网址后终于发现了一个可以进行SQL注入的网页,是伊春职业学院的首页地址,检测结果显示该URL可以注入,且数据库类型为Acess数据库。实验截图如下所示: 对其进行表名猜解、列名猜解以及内容猜解后得到如下结果: 可以看到
20、有一个名为 admin 的数据库,且得到三个账户: username内容:admin password内容:e1565f7ad2cdc0f7 username内容:admin password内容:49ba59abbe56e057 username内容:admin password内容:21bf9830f2b1ec07 对这些账户的密码形式进行观察,认为这些密码可能是加过密的,在网上尝试对其进行解密后得到: username内容:admin password内容:han654321 username内容:admin password内容
21、123456 username内容:admin password内容:han123456 观察解密后结果,可以认为这些密码确实是加过密的。 然后对该URL进行管理入口扫描后可以得到一系列的管理入口地址,扫描时间可能会有些漫长,扫描后得到12条地址,如下图所示: 对扫描到的网址一一右击打开,结果却发现下面的一系列问题,截图如下: 或者: 或者是用户登录界面: 或者: 或者: 就是无法找到系统的后台管理页面。尝试从用户界面登录,都无法成功登录。尝试用 google hacking 的方法寻找管
22、理员后台登录界面,也没有找到。所以此次利用明小子的注入工具进行SQL漏洞注入实验虽然找到了三个管理员账户信息,但却没有找到可用的系统后台管理页面,无法验证账户信息的正确与否。 4. 试验总结 在此次实验中,我了解到了更多有关SQL注入攻击技术的手段,也尝试着亲自动手利用SQL注入技术对Web网站进行攻击,并在实践中发现了一系列的问题,通过对这些问题的查询,动手验证,使我对此有了更深的理解。 由于SQL注入攻击时针对应用程序开发过程中的编程漏洞,这种攻击是可以绕过的。随着SQL注入技术的不断提高,只要Web应用系统或源代码中任然存在此类漏洞,就会潜伏着这种隐患,特别是当SQL注入攻击与其它一些攻击工具结合时的,对服务器乃至整个系统都是巨大的威胁。因此,研究SQL注入攻击方法,如何正确的对服务器进行安全配置,如何做好代码的安全编写与用户输入的过滤检查,对于开发Web应用程序有着重要的意义。所以我们理应对其加以重视。






