基于sqlserver的web应用程序注入攻击介绍_第1页
基于sqlserver的web应用程序注入攻击介绍_第2页
基于sqlserver的web应用程序注入攻击介绍_第3页
基于sqlserver的web应用程序注入攻击介绍_第4页
基于sqlserver的web应用程序注入攻击介绍_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于SQLServer的WEB应用程序注入攻击介绍摘要:由于网页制作者水平和经验的不足,很多网页中存在着不安全的因素,这就给网页本身以及系统造成了潜在的威胁。特别是一些需要接受输入内容的网页,这种威胁就更加明显,攻击者可能会利用向数据库服务器发送一段包含特殊字符的查询语句,来骗取数据库服务器执行该语句,然后根据返回的出错信息获得想要数据,进而对数据库进行进一步的危险操作,以此来破坏数据库的完整性;因此预防与禁止这些操作就显得极为重要。关键词:sql注入;sql注入攻击;asp+sqlserver;防范。

TheintroductionofinjectioninwebapplicationthatbasedonsqlserverattackingAbstract:Becauseofthewebsitemakerlevelandexperience'sinsufficiency,manywebsiteshavetheunsafefactors,itbringsonthelatentthreatinwebsiteitselfaswellasthesystem.Especiallysomewebsiteswhichneedtoacceptanimportablecontents,thiskindofthreatmoreobvious,theaggressormaymakeuseoftowarddatabaseservertosendoutaSQLstatementwhichincludesspecialcharacters,tocheatdatabaseservertocarryoutthat,thenaccordingtoreturnederroneousinformationtogetdatathatitwant,thencarryonafurtherdangerousoperationtothedatabase,tobreaktheintegrityofdatabasewiththis.Soitseemsthatitisextremelyimportanttopreventandforbidtheseoperations.Keywords:sqlinjection;sqlinjectionattack;asp+sqlserver;defence。

随着B/S(浏览器/服务器)模式应用开发的发展,使用此种模式编写应用程序的程序员越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有考虑到对用户输入数据的合法性进行判断,使应用程序存在着安全隐患。所谓的SQL注入(SQLInjection)就是用户在web页面需要输入数据处输入若干数据,形成一段数据库查询代码提交给数据库服务器执行,然后根据程序返回的结果,获得某些他想得知的数据,最后根据得到的信息进行进一步操作。SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。SQL注入攻击是一种常规性的攻击,它可以允许一些不法用户检索你的数据,改变服务器的设置,或者在你不小心的时候黑掉你的服务器。SQL注入攻击不是SQLServer问题,而是不适当的程序造成的。如果你想要运行这些程序的话,你必须明白这冒着一定的风险。下面介绍一下SQL注入:首先把IE菜单=>工具=>Internet选项=>高级=>显示友好HTTP错误信息前面的勾去掉。否则,不论服务器返回什么错误,IE都只显示为HTTP500服务器错误,不能获得更多的提示信息。一、原理了解SQL注入之前先要了解一些基本的B/S模式应用程序的知识,以及浏览器与服务器交互的相关知识。目前,国内的网站用ASP+Access或SQLServer的占70%以上,PHP+MySQL占20%,其他的不足10%。对于ASP+SQLServer的应用程序结构,一个ASP程序实际上是SQLServer的一个客户端,它需要一个合法的SQL登录名和密码去连接SQLServer数据库。下面一段代码是典型的在ASP中连接SQLSERVER的例子:<%rServer=“myserver”‘定义变量保存SQLSERVER服务器名rUid=“sa”‘定义变量保存SQLSERVER登录名rPwd=“123”‘rDatabase=“mydatabase”‘定义变量保存SQLSERVER数据库名setconn=Server.CreateObject(“ADODB.Connection”)‘创建数据库连接对象strconn=“driver={sqlserver};server=“&rServer&“;uid=“&rUid&“;pwd=“&rPWD&“;database=“&rDatabase’设置连接字符串conn.openstrconn’通过连接字符串打开数据库连接%>SQL注入的脆弱点发生在程序开发员构造一个WHERE子句伴随着用户的输入的时候。比如,下面列出一个简单的ASP程序example.asp,它的功能是跟据GET方式发送的信息获得的参数ID显示数据库xinxi表中相应ID值的个人信息内容。<%strID=Trim(Request.QueryString(“ID”))‘定义变量保存get方式发送的信息strSQL=“select*fromxinxiwhereID=“&strID&”‘定义变量保存要执行的sql语句setrs=server.CreateObject(“ADODB.Recordset”)‘创建记录集对象对数据库进行操作rs.openstrSQL,conn,1,3打开记录集实例%>‘以下创建表格保存结果数据<tablewidth=“100%”border=“0”cellpadding=“10”cellspacing=“1”class=“table1”><trclass=“trtitle”><td><divalign=“center”><%=rs(“name”)></div></td></tr><trclass=“trcontent”><td><%=rs(“department”)%></td></tr></table>本例要实现的功能是通过一个输入界面,在其表单域(一般为文本框、密码框等)输入内容,然后通过get方式发送至服务器,服务器再指定特定的网页文件来接收信息(本例是使用example.asp接收);然后接收文件再利用接收到的信息作为sql语句的查询条件执行该语句,将结果以表格的方式输出。请注意strSQL=“select*fromxinxiwhereID=“&strID&””这一句。实际运行时,客户端应当使用类似/example.asp?ID=12这样的URL访问此ASP程序,当ID为数字12时,strID的值为字符型”12”,VBScript中”&”所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串(前例中example.asp?ID=12就是一个查询字符串),欺骗服务器执行恶意的SQL命令。一种情况是:攻击者在访问这个网页的时候,可以直接在地址栏输入/example.asp?ID=12这样的地址直接访问网页,而不需要经过输入界面,这也可以为服务器所接受,从而骗过了服务器。另一种情况是:攻击者在输入界面的输入框中输入’’或’1’=‘1”之类的内容后提交;用户输入的内容提交给服务器之后,服务器运行上面的ASP代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:SELECT*fromxinxiWHEREid=‘‘or‘1’=‘1如果攻击者知道应用会将表单中输入的内容直接用于验证身份的查询,就会尝试输入某些特殊的SQL字符串篡改查询改变其原来的功能,欺骗系统授予访问权限。系统环境不同,攻击者可能造成的损害也不同,这主要由应用访问数据库的安全权限决定。如果用户的帐户具有管理员或其他比较高级的权限,攻击者就可能对数据库的表执行各种他想要做的操作,包括添加、删除或更新数据,甚至可能直接删除表。SQL注入的原理,就是从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取你想到得到的资料。二、测试假设已经知道这个网站中有要求输入信息这一项,那么现在试着在浏览器地址栏中输入下面的URL”/example.asp?ID=12’”,此时类比上面的介绍得到strSQL字串的值为:select*frominfo_articlewhereID=12MicrosoftOLEDBProviderforODBCDrivers错误‘80040e14’[Microsoft][ODBCSQLServerDriver][SQLServer]字符串‘‘之前有未闭合的引号。出现这种错误就已经说明这个网站百分百可以进行注入攻击了。有些时候服务器显示”处理URL时服务器上出错”是因为IIS设置中关闭了向客户端发送详细出错信息,这时不一定不能注入,但相对来讲困难极大,只能碰运气了。有些时候服务器显示的内容还是ID=12的内容,没有任何出错信息,这可能是开发者过滤掉了单引号,可以使用下面的方法进行尝试:”example.asp?ID=12and1=2”错误‘80020219’发生意外。注意:出现下面的错误信息时肯定无法完成注入:MicrosoftVBScript运行时错误错误‘800a000d’类型不匹配:‘cint’MicrosoftVBScript运行时错误错误‘800a000d’类型不匹配:‘clng’MicrosoftVBScript运行时错误错误‘800a000d’类型不匹配:‘cdbl’MicrosoftVBScript运行时错误错误‘800a000d’类型不匹配:‘c’非法的参数值。请输入正确的参数值。ADODB.Parametererror‘800a0d5d’Applicationusesavalueofthewrongtypeforthecurrentoperation.三、如何防范要防止ASP应用被SQL注入式攻击闯入并不是一件特别困难的事情,只要在利用表单输入的内容构造SQL命令之前,把所有输入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。1、对于动态构造SQL查询的场合,可以使用下面的技术:(1)替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。再来看前面的例子,”SELECT*fromxinxiWHEREid=‘‘‘or‘‘1’’=‘‘1’”,显然会得到与”SELECT*fromxinxiWHEREid=‘‘or‘1’=‘1’(2)删除用户输入内容中的所有连字符,防止攻击者构造出类如”SELECT*fromxinxiWHEREid=‘mas’——ANDpassword=‘‘“之类的查询,因为这类查询的后半部分已经被注释掉,不再有效,攻击者只要知道一个合法的用户登录名称,根本不需要知道用户的密码就可以顺利获得访问权限。(3)对于用来执行查询的数据库帐户,限制其权限。用不同的用户帐户执行查询、插入、更新、删除操作。由于隔离了不同帐户可执行的操作,因而也就防止了原本用于执行SELECT命令的地方却被用于执行INSERT、UPDATE或DELETE命令。2、用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。3、限制表单或查询字符串输入的长度。如果用户的登录名字最多只有10个字符,那么不要认可表单中输入的10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。4、检查用户输入的合法性,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行——之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。在客户端,攻击者完全有可能获得网页的源代码,修改验证合法性的脚本(或者直接删除脚本),然后将非法内容通过修改后的表单提交给服务器。因此,要保证验证操作确实已经执行,唯一的办法就是在服务器端也执行验证。你可以使用许多内建的验证对象,例如RegularExpressionValidator,它们能够自动生成验证用的客户端脚本,当然你也可以插入服务器端的方法调用。如果找不到现成的验证对象,你可以通过CustomValidator自己创建一个。5、将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了”消毒”处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。System.Web.Security.FormsAuthentication类有一个HashPasswordForStoringInConfigFile,非常适合于对输入数据进行消毒处理。6、检查提取数据的查询所返回的记录数量。如果程序只要求返回一个记录,但实际返回的记录却超过一行,那就当作出错处理。SQLServer的注入攻击绝非仅限上面介绍的这些,可以用自己的方法构成很多巧妙的SQL语句得到想要的信息。安装SQLServer后可以查阅”SQLServer联机从书”,这里能够找到SQLServer所有的语句、函数、系统存储过程和安全性方面的文档,是非常好的参考资料。网络安全问题已经成为当今一项很棘手的问题,各种病毒与恶意攻击层出不穷,为了尽可能的减少损失,网页制作者应该不断接触新的知识,尽可能的完善系统以及软件功能,以防止来自各方面的侵害。

参考文献:[1]、李伟红主编.SQLServer2021实用教程.中国水利水电出版社.2021[2]、柴巧叶主编.ASP数据库编程.地质出版社.2021[3]、徐人凤,曾建华编.SQLServer2021数据库及应用.高等教育出版社.2021[4]、许卫林主编.VBScript+asp动态网页制作.中国电力出版社.2021

社会实践报告系别:班级:学号:姓名:作为祖国未来的事业的继承人,我们这些大学生应该及早树立自己的历史责任感,提高自己的社会适应能力。假期的社会实践就是很好的锻炼自己的机会。当下,挣钱早已不是打工的唯一目的,更多的人将其视为参加社会实践、提高自身能力的机会。许多学校也积极鼓励大学生多接触社会、了解社会,一方面可以把学到的理论知识应用到实践中去,提高各方面的能力;另一方面可以积累工作经验对日后的就业大有裨益。进行社会实践,最理想的就是找到与本专业对口单位进行实习,从而提高自己的实战水平,同时可以将课本知识在实践中得到运用,从而更好的指导自己今后的学习。但是作为一名尚未毕业的大学生,由于本身具备的专业知识还十分的有限,所以我选择了打散工作为第一次社会实践的方式。目的在于熟悉社会。就职业本身而言,并无高低贵贱之分,存在即为合理。通过短短几天的打工经历可以让长期处于校园的我们对社会有一种更直观的认识。实践过程:自从走进了大学,就业问题就似乎总是围绕在我们的身边,成了说不完的话题。在现今社会,招聘会上的大字报都总写着“有经验者优先”,可还在校园里面的我们这班学子社会经验又会拥有多少呢?为了拓展自身的知识面,扩大与社会的接触面,增加个人在社会竞争中的经验,锻炼和提高自己的能力,以便在以后毕业后能真正真正走入社会,能够适应国内外的经济形势的变化,并且能够在生活和工作中很好地处理各方面的问题,我开始了我这个假期的社会实践-走进天源休闲餐厅。实践,就是把我们在学校所学的理论知识,运用到客观实际中去,使自己所学的理论知识有用武之地。只学不实践,那么所学的就等于零。理论应该与实践相结合。另一方面,实践可为以后找工作打基础。通过这段时间的实习,学到一些在学校里学不到的东西。因为环境的不同,接触的人与事不同,从中所学的东西自然就不一样了。要学会从实践中学习,从学习中实践。而且在中国的经济飞速发展,又加入了世贸,国内外经济日趋变化,每天都不断有新的东西涌现,在拥有了越来越多的机会的同时,也有了更多的挑战,前天才刚学到的知识可能在今天就已经被淘汰掉了,中国的经济越和外面接轨,对于人才的要求就会越来越高,我们不只要学好学校里所学到的知识,还要不断从生活中,实践中学其他知识,不断地从各方面武装自已,才能在竞争中突出自已,表现自已。在餐厅里,别人一眼就能把我人出是一名正在读书的学生,我问他们为什么,他们总说从我的脸上就能看出来,也许没有经历过社会的人都有我这种不知名遭遇吧!我并没有因为我在他们面前没有经验而退后,我相信我也能做的像他们一样好.我的工作是在那做传菜生,每天9点钟-下午2点再从下午的4点-晚上8:30分上班,虽然时间长了点但,热情而年轻的我并没有丝毫的感到过累,我觉得这是一种激励,明白了人生,感悟了生活,接触了社会,了解了未来.在餐厅里虽然我是以传菜为主,但我不时还要做一些工作以外的事情,有时要做一些清洁的工作,在学校里也许有老师分配说今天做些什么,明天做些什么,但在这里,不一定有人会告诉你这些,你必须自觉地去做,而且要尽自已的努力做到最好,一件工作的效率就会得到别人不同的评价。在学校,只有学习的氛围,毕竟学校是学习的场所,每一个学生都在为取得更高的成绩而努力。而这里是工作的场所,每个人都会为了获得更多的报酬而努力,无论是学习还是工作,都存在着竞争,在竞争中就要不断学习别人先进的地方,也要不断学习别人怎样做人,以提高自已的能力!记得老师曾经说过大学是一个小社会,但我总觉得校园里总少不了那份纯真,那份真诚,尽管是大学高校,学生还终归保持着学生的身份。而走进企业,接触各种各样的客户、同事、上司等等,关系复杂,但我得去面对我从未面对过的一切。记得在我校举行的招聘会上所反映出来的其中一个问题是,学生的实际操作能力与在校理论学习有一定的差距。在这次实践中,这一点我感受很深。在学校,理论的学习很多,而且是多方面的,几乎是面面俱到;而在实际工作中,可能会遇到书本上没学到的,又可能是书本上的知识一点都用不上的情况。或许工作中运用到的只是很简单的问题,只要套公式似的就能完成一项任务。有时候我会埋怨,实际操作这么简单,但为什么书本上的知识让人学得这么吃力呢?这是社会与学校脱轨了吗?也许老师是正确的,虽然大学生生活不像踏入社会,但是总算是社会的一个部分,这是不可否认的事实。但是有时也要感谢老师孜孜不倦地教导,有些问题有了有课堂上地认真消化,有平时作业作补充,我比一部人具有更高的起点,有了更多的知识层面去应付各种工作上的问题,作为一名大学生,应该懂得与社会上各方面的人交往,处理社会上所发生的各方面的事情,这就意味着大学生要注意到社会实践,社会实践必不可少。毕竟,很快我就不再是一名大学生,而是社会中的一分子,要与社会交流,为社会做贡献。只懂得纸上谈兵是远远不及的,以后的人生旅途是漫长的,为了锻炼自己成为一名合格的、对社会有用的人才.很多在学校读书的人都说宁愿出去工作,不愿在校读书;而已在社会的人都宁愿回校读书。我们上学,学习先进的科学知识,为的都是将来走进社会,献出自己的一份力量,我们应该在今天努力掌握专业知识,明天才能更好地为社会服务。实践心得:虽然这次的实践只有短短的几天,而且从事的是比较简单的服务工作,但是通过与各种各样的人接触,还是让我学会了很多道理。首先是明白了守时的重要性。工作和上学是两种完全不同的概念,上学是不迟到很多时候是因为惧怕老师的责怪,而当你走上了工作岗位,这里更多的是由于自己内心的一种责任。这种责任是我学会客服自己的惰性,准时走上自己的岗位。这对我以后的学习生活也是一种鞭策,时刻牢记自己的责任,并努力加强自己的时间观念。其次让我真实的体会到了合作的重要性。虽然我工作的只是小小的一家餐厅,但是从点单到制作到

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论