网络脚本攻击与防御67.ppt

  1. 1、本文档共67页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络脚本攻击与防御67

第五章 脚本攻击与防御 1 SQL注入技术 什么是SQL注入技术? SQL注入即是指攻击者通过在应用程序中预先定义好的查询语句结尾加上额外的SQL语句元素,欺骗数据库服务器执行非授权的任意查询。 分析一个经典的SQL注入漏洞 dim rs admin1=request(admin) password1=request(password) set rs=server.CreateObject(ADODB.RecordSet) rs.open select * from admin where admin= admin1 and password= password1 ,conn,1 if rs.eof and rs.bof then response.writeSCRIPT language=JavaScriptalert(用户名或密码不正确!); response.writejavascript:history.go(-1)/SCRIPT response.end else session(admin)=rs(admin) session(password)=rs(password) session(aleave)=rs(aleave) response.redirect admin.asp end if rs.close set rs=nothing 分析 在用户名和密码那里都填入 ‘OR‘ ’=’ , SQL语句被构造成 select * from admin where admin=‘ OR‘ =‘ and password=‘ OR‘ =‘ ‘ 意思是当admin为空或者空等于空,password为空或者空等于空的时候整个查询语句就为真。 如何来修补漏洞? 过滤掉其中的特殊字符。 这里我们就过滤掉其中的单引号“”,即是把程序的头两行改为: admin1=replace(trim(request(admin)),,) password1=replace(trim(request(password)),,) 判断数据库的类型 服务器的IIS错误提示没关闭 提交http://localhost/test/onews.asp?id=37’ : 1、如果是Access数据库,那么应该返回: Microsoft JET Database Engine 错误 80040e14 字符串的语法错误 在查询表达式 id=37 中。 / onews.asp,行8 Eg:/article.asp?id=10 2、如果是SQLServer数据库,那么应该返回: Microsoft OLE DB Provider for ODBC Drivers 错误 80040e14 [Microsoft][ODBC SQL Server Driver][SQL Server]字符串 之前有未闭合的引号。 / onews.asp,行8 服务器的IIS错误提示关闭了 根据Access和SQLServer自己的系统表来区分。Access是在系统表[msysobjects]中,但在Web环境下读该表会提示“没有权限”,SQLServer是在表[sysobjects]中,在Web环境下可正常读取。 提交: http://localhost/test/onews.asp?id=37 and (select count(*) from sysobjects)0 如果是Access数据库,因为不存在sysobjects表,所以返回结果应该和正常页面有很大区别; 如果是SQLServer,则应该返回一个查询成功的正常页面。 1.1 Access数据库的注入 把IE菜单=工具=Internet选项=高级=显示友好 HTTP 错误信息前面的勾去掉,这样可以显示出现的错误信息。 分析一次完整的SQL注入。 % owen=request(id) Set rsnews=Server.CreateObject(ADODB.RecordSet) sql=update news set hits=hits+1 where id=cstr(request(id)) conn.execute sql sql=select * from news where id=owen rsnews.Open sql,conn,1,1 title=rsnews(title) if rsnews.eof and rsnews.bof then response.Write(数据库出错) else % http://localhost/test/onews.asp?id=37 http://localhost/test/onews.asp?id

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档