• / 21
  • 下载费用:10 金币  

l003001010-http攻击与防范-sql注入攻击.docx

关 键 词:
l003001010 http 攻击 防范 sql 注入
资源描述:
课程编写类别内容实验课题名称SQL注入攻击实验目的与要求1了解SQL注入攻击带来的危险性。2掌握SQL注入攻击的原理与方法3掌握防范攻击的方法实验环境VPC1虚拟PC)WINDOWSSERVER2003VPC1连接要求PC网络接口,本地连接与实验网络直连软件描述1、学生机要求安装JAVA环境2、VPC安装WINDWOS系统实验环境描述1、学生机与实验室网络直连2、VPC1与实验室网络直连3、学生机与VPC1物理链路连通;预备知识在PHP的WEB应用程序架构中,大部分都是配合MYSQL数据库来保存相关的数据。例如会员登录、留言板、讨论区的账号、密码、真实姓名、住址及联系电话等个人信息,或是购物系统的商品与价格等记录。WEB应用程序使用SQL语句来操作MYSQL数据库。例如,SELECT表达式用来读取数据库的记录,INSERT表达式用来在数据库中插入新的记录,DELETE表达式用来删除数据库中的记录。设置了SQL语句的字符串后,使用MYSQL_QUERY这类的PHP函数来将SQL语句传递给MYSQL数据库系统处理。MYSQL处理完后,会返回WEB应用程序所需要的数据库记录。SQL注入攻击SQLINJECTION是利用在客户端的网页中输入数据,例如,在会员登录文本框中输入用户的账号和密码,用户在提交会员登录文本框的数据后,WEB应用程序会将这些账号和密码与网站数据库中的相关记录相比较,或是插入到数据库内。一般地,用户在他的浏览器中输入的表单数据,WEB应用程序会使用_POST变量来保存。例如,_POST“NAME“是用户的名字,_POST“EMAIL“是用户的电子邮件信箱。而旦在SQL语句中,直接将SQL字符串与这些_POST变量进行字符串连接。下面是一个简单的例子QUERY“INSERTINTOMEMBERNAMEVALUES“'_POST“NAME“'““RESULTMYSQL_QUERYQUERY黑客利用这种网页设计的既定模式,在客户端输入的表单数据(即_POST变量的值)中加入特殊的代码,来改变原来的SQL语句。如果WEB应用程序没有仔细检查_POST变量的值就直接提交这个SQL语句,那么就会启动SQL注入攻击。SQL注入攻击的步骤如图所示。步骤1黑客登录有SQL注入漏洞的网站,网站显示会员登录的网页。步骤2黑客在客户端输入会员登录所需的账号和密码,但是在账号/密码的字符串内加入特殊的代码。步骤3有SQL注入漏洞的网站将黑客所输入的账号和密码用_POST变量来保存。并且将账号和密码的_POST变量与SQL字符串进行连接来生成一个新的SQL语句。步骤4有SQL注入漏洞的网站将查询的SQL语句提交到MYSQL数据库处理。步骤5因为SQL语句中被黑客注入了代码而引发SQL注入攻击。实验内容1了解SQL注入攻击带来的危险性。2掌握SQL注入攻击的原理与方法3掌握防范攻击的方法实验步骤1、学生单击实验拓扑按钮,进入实验场景,进入目标主机,(第一次启动目标主机,还需要安装JAVA控件),如图所示2打开虚拟机,输入用户名和密码,用户为ADMINSITRATOR密码为1234563打开浏览器,输入HTTP//LOCALHOST8080/EXAMPLE_CODE/如图4、找到“(5)SQL注入攻击(SQLINJECTION,俗称负料隐码)”项,并点击打开。5、攻击实例绕过账号、密码的检查先来看看上图,这是一个常见的形式简单的会员登录的画面。会员登录的功能是让来访者输入账号和密码来登录网站,入口网页的程序代码会判断来访者输入的账号和密码是否存在于数据库中。如果输入的数据存在于数据库中,就让这个来访者登录网站,否则就提示信息要求来访者必须先注册。上图的网页是一个简单的会员登录的画面LOGINPHP,请试着执行它。LOGINPHP文件会读取CH数据库中的MEMBER数据表内的记录,如果使用者所输入的账号和密码存在于MEMBER数据表内,就会打开首页EX51PHP。源码为HTTP//LOCALHOST8080/EXAMPLE_CODE/SOURCE/CODE5/LOGINPHP所谓SQL注入攻击,就是在客户端的网页中输入特定的与SQL语句有关的代码。这段特定的程序代码会改变SQL语句,也就是LOGINPHP文件中有一段代码QUERY“SELECTFROMMEMBERWHEREUSERNAME“'_POST“USERNAME““'ANDPASSWORD'“_POST“PASSWORD““'“这个SQL语句用来把在“账号”和“密码”文本框的输入值,与SELECT语句连接成一个查询语句。假如在上图的“账号”文本框中输入“DANIEL”,在“密码”文本框中输入“123456”,那么这个SQL语句会是SELECTFROMMEMBERWHEREUSEMAME'DANIEL'ANDPASSWORD'123456'使用MYSQL_QUERY函数提交这个SQL语句后,如果“DANIEL“与“123456”的账号/密码值存在于CH数据库中的MEMBER数据表内,那么MYSQL_QUERY函数会返回一个结果集RESULTMYSQL_QUERYQUERY如果“DANIEL”与“123456”的账号/密码值不存在于CH数据库中的MEMBER数据表内,那么MYSQL_QUERY函数会返回FALSE。如果能够让SQL语句QUERY“SELECTFROMMEMBERWHEREUSERNAME“'_POST“USERNAME““'ANDPASSWORD'“_POST“PASSWORD““'“不检查_POST“USERNAME“与_POST“PASSWORD“的值,那么就可以绕开会员登录的数据检查而随意录入数据。在类似这种检查“账号”与“密码”值的入口网页,许多黑客利用暴力破解的方式来尝试账号/密码,或是设法取得他人的COOKIE来得获得目标的账号/密码。如果使用SQL注入攻击的话,根本就不需要账号/密码就可以直接进入网站。6、开始攻击攻击1实例现在打开“攻击1”,进行输入,“账号”文本框中输入“'OR“'”,“密码”文本框中输入“'OR“'”。“'OR“'”字符串是由下列字符所组成的●一个单引号●一个空白;●OR●一个空白●两个单引号;●●一个单引号。输入情况下图所示。上图为输入SQL注入攻击的字符串结果如下图所示,无效的账号/密码值也可以用来登录网站。无效的账号/密码也可以登录现在回头看看LOGINPHP文件中所用的SQL语句QUERY“SELECTFROMMEMBERWHEREUSERNAME“'_POST“USERNAME““'ANDPASSWORD'“_POST“PASSWORD“,“'“在“账号”文本框中输入“'OR“'”,在“密码”文本框中输入“'OR“'”,那么这个SQL语句会是SELECTFROMMEMBERWHEREUSERNAME''OR''''ANDPASSWORD''OR''''在WHERE子句中,USERNAME''(两个单引号)表示USERNAME等于空字符串““”,““表示空字符串“''”等于空字符串“''”,所以结果为TRUE,USEMAME''OR''''的结果为TRUE,因为''''为TRUE,所以''ORTRUE的结果为TRUE。同样地,PASSWORD''(两个单引号)表示PASSWORD等于空字符串“''”,''''表示空字符串''等于空字符串'',所以结果为TRUE,PASSWORD''OR''''的结果为TRUE,因为''''为TRUE,所以''ORTRUE的结果为TRUE。所以LOGINPHP文件的SQL语句SELECTFROMMEMBERWHEREUSERNAME''OR''''ANDPASSWORD''OR''''等同于SELECTFROMMEMBERWHERETRUEANDTRUE因此这个SQL语句不会验证账号和密码文本框所输入的值,而是直接查询MEMBER数据表内的所有记录。攻击1的防护方法是字符串变量的过滤方式(使用ADDSLASHES函数)。使用ADDSLASHES函数来将SQL语句中的单引号、双引号、“\”及NULL字符加上反斜线“\”。例如ADDSLASHES“O'REILLY“会变成“O\'REILLY“注意,如果在PHPINI文件中将MAGIC_QUOTES_GPC设置为ON,那么在GET、POST和COOKIE的数据上会自动执行ADDSLASHES函数。如果再调用一次ADDSLASHES函数,就会变成加了两次反斜线“\”而产生错误。点击“防护1”,进行输入,“账号”文本框中输入“'OR“'”,“密码”文本框中输入“'OR“'”,网页不会提交。攻击2实例删除数据库的所有记录现在来看下图,这是一个常见的简单形式的留言板。下图的网页是EX52PHP,执行这个页面,EX52PHP文件会将留言的数据插入MYSQL数据库CH5里面的POSTMESSAGE数据表中。执行EX52CHECKPHP文件,浏览CH数据库的POSTMESSAGE数据表内的记录。EX52CHECKPHP文件的页面如图所示。在如下图所示的“标题”文本框中,单击第一条超链接。这时会打开EX52SHOWPHP文件来显示这一条留言,在EX52SHOWPHP文件中有一个“删除”按钮,单击这个【删除】按钮后就会删除目前显示的这一条留言,如下图所示。请注意在EX52SHOWPHP的一段这样的程序代码,有一个“删除”按钮的程序代码“删除’’按钮的NAME与ID属性值是DELETE。在删除目前这一条留言的时候,我们使用POSTMESSAGE数据表内的ID字段来标识。QUERY“DELETEFROMPOSTMESSAGEWHEREID“_POST“ID“_POST“ID“的值是由ID这个隐藏文本框“/而来的。而ID隐藏文本框的值,则是从EX52SHOWPHP的URL参数ID而来。攻击1的防护方法是字符串变量的过滤方式(使用ADDSLASHES函数)。打开“攻击2”,点击超链接按钮进行攻击,删除所有记录,如下图。同样攻击2的防护也可以使用ADDSLASHES函数来将SQL语句中的单引号、双引号、“\”及NULL字符加上反斜线“\”。例如打开“防护3”,点击按钮超链接进行防护。攻击3实例盗取密码现在来看下图,这是一个简单的首页的画面。下图的网页是EX53PHP,请试着执行它。EX53PHP文件会读取CH5数据库中的MEMBER数据表内的记录,然后在“访客”文字处显示MEMBER数据表的USERNAME文本框的值。上图是一个简单的首页的画面EX53PHP文件需要URL参数ID,这个ID值是MEMBER数据表内的ID文本框的值。在“访客”文字处显示的USERNAME值,就是URL参数ID所对应的USERNAME文本框的值。这段在EX53PHP中的程序代码HTTP//LOCALHOST8080/EXAMPLE_CODE/SOURCE/CODE5/EX53PHP。如何攻击在EX53PHP文件中,查询所用的SQL语句是QUERY“SELECTUSERNAMEFROMMEMBERWHEREID“_GET“ID“黑客利用在_GET“ID“变量内加入UNIONSELECT表达式的方式来达到盗取会员密码的目的。UNIONSELECT表达式用来实现多重查询的功能,在_GET“ID“变量内加入UNIONSELECT就会让EX53PHP文件的SQL语句变成有两个SELECT查询语句。第1个SELECT查询语句是EX53PHP原本的SELECTUSERNAMEFROMMEMBER第2个SELECT查询语句是黑客加入的SELECTPASSWORDFROMMEMBER这个SELECT查询语句用来盗取别人的密码。黑客必须让第1个SELECT查询语句失效,而让第2个SELECT查询语句成功,那么这个SQL语句就会返回PASSWORD,而不是USERNAME的值。由于EX53PHP预期SQL语句会返回USERNAME,所以在“访客”文字处显示了这个SQL语句的查询结果。但是实际上这个SQL语句返回的是PASSWORD,所以原本要显示账号的地方就会显示密码的值。因此黑客就可以借着这种SQL注入攻击,来盗取网站会员的密码。开始攻击这个攻击的程序代码在EX53ATTACKHTML文件中HTTP//LOCALHOST8080/EXAMPLE_CODE/SOURCE/CODE5/EX53ATTACKHTML。EX53ATTACKHTML文件实际上是执行一个HTTP链接HTTP//LOCALHOST/EXAMPLE/EX53PHPID“UNIONSELECTPASSWORDFROMMEMBERWHEREUSEMAME'DANIEL'/EX53PHP文件的URL参数ID的值等于“UNIONSELECTPASSWORDFROMMEMBERWHEREUSERNAME'DANIEL'/开头是两个单引号“''”。将URL参数ID的值代入SQL语句QUERY“SELECTUSERNAMEFROMMEMBERWHEREID“_GET“ID“结果得到SELECTUSERNAMEFROMMEMBERWHEREID“UNIONSELECTPASSWORDFROMMEMBERWHEREUSERNAME'DANIEL'/第1个SELECT查询语句是EX53PHP原本的SELECTUSERNAMEFROMMEMBER但是无法执行。第2个SELECT查询语句是黑客加入的SELECTPASSWORDFROMMEMBERWHEREUSERNAME'DANIEL'因此,这个SQL语句会返回PASSWORD,而不是USERNAME的值。打开“攻击3”,攻击EX53PHP文件,如下图所示。单击【攻击EX53PHP文件】按钮后,就会执行EX53PHP文件,使用SQL注入攻击来盗取密码,结果如下图所示。在上图的“访客”文字处,原本是要显示账号访客但是,因为SQL注入攻击的缘故却显示了密码,黑客就因此盗取了网站会员的密码。防范的方法SQL注入攻击SQLINJECTION之所以会发生,是由于SQL语句被篡改的缘故。因此防御的方法,就是检查SQL语句中的变量数据是否是正确的格式。1如果数据确定是整数,就使用INTVAL函数来将数据转换成整数。例如,ID值通常是由MYSQL数据库产生的整数类型的数字,因此使用INTVAL函数来将ID值转换成整数,以避免ID值被窜改。2如果数据确定是浮点数,就使用FLOATVAL或DOUBLEVAL函数来将数据转换成浮点数。FLOATVAL与DOUBLEVAL函数的功能与语法相同。3如果数据确定是字符串,就使用ADDSLASHES函数来将单引号、双引号、“\”、及NULL字符加上反斜线“\”。7、实验完毕,关闭虚拟机和所有窗口。
展开阅读全文
  麦档网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:l003001010-http攻击与防范-sql注入攻击.docx
链接地址:https://www.maidoc.com/p-1556.html

当前资源信息

m****c

编号: 20180301224545091809

类型: 共享资源

格式: DOCX

大小: 790.68KB

上传时间: 2018-03-01

关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

[email protected] 2018-2020 maidoc.com版权所有  文库上传用户QQ群:3303921 

麦档网为“文档C2C模式”,即用户上传的文档所得金币直接给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的金币归上传人(含作者)所有。
备案号:蜀ICP备17040478号-3  
川公网安备:51019002001290号 

本站提供办公文档学习资料考试资料文档下载


收起
展开