基于ASP源代码剖析SQL注入漏洞

来源 :网络与信息 | 被引量 : 0次 | 上传用户:zifeng20060819
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  引言
  
  随着Internet技术的迅猛发展,为了能更充分地使用互联网这个世界上最大的交流平台,许多单位或个人争相建立了自己的网站。为了与广大用户更好地进行交流,大多数网站又采用了动态网站编程技术。在众多的网站开发技术中,由于Microsoft的ASP的简单易用,所以成为众多网站程序员的首选。但是,一些程序员在编程时不够注意安全方面,所以经常出现因一个变量未过滤,造成网站被“注入”,导致整台服务器沦陷的事实。
  下面我基于ASP源代码对注入漏洞发生的原理做进一步的阐述。
  
  1 剖析SQL注入漏洞(SQL Injection)
  
  1.1什么是SQL注入
  由于某些程序员在编程时,没有对用户输入数据的合法性进行判断,使攻击者可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入,又叫SQL注射。由于SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,目前普通的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。
  SQL注入漏洞从提交数据的方式可以分为三类:Get、Post和Cookies,其中出现最普及的当属Get方式的注入。从变量类型又可以分为数字型注入和字符型注入。
  
  1.2 Get方式注入原理
  下面是一段存在Get注入的代码:
  
  <!--#include file="conn.asp"-->
  <%id= request.querystring("id")
  set rs=Server.CreateObject("ADODB.RecordSet")
  sql="select * from class where classid="&id
  rs.open sql,conn,1,1
  rs.close
  set rs=nothing
  %>
  
  通过代码,我们看到id参数从URL传进来后,没有经过任何过滤,就进行数据查询,从而产生了经典的SQL注入漏洞。比如攻击者可以提交如下数据:
  
  id=1 and exists(select * from admin)
  
  那么数据库查询语句(上面的sql 变量)就变成:
  
  sql="select * from class where classid=1 and exists(select * from admin)"
  
  我们知道classid=1为真(假设数据库表中有此数据),由于“and”表示“与”的关系,那么:
  
  classid=1 and exists(select * from admin) 的真伪只取决于exists(select * from admin)
  
  简单地说就取决于admin表是否存在。如果网页返回的正常,则admin表存在,反之则不存在。那么攻击者就达到了猜测管理员表名的目的。
  
  1.3Post方式注入原理
  Post注入是通常针对采用Post提交的表单进行的注入,很多情况下都是字符型的变量,而且它没有Get方式注入那样容易察觉,下面是一段存在Post注入的表单:
  
  <tr>
  <td width="102" height="25" align="right">邮箱地址:</td>
  <td width="198" height="25"><input name="email" type="text" id="email">
  <input name="login" type="hidden" value="yes"></td>
  </tr>
  <tr>
  <td height="25" align="right">访问密码:</td>
  <td height="25"><input name="password" type="password" id="password"></td>
  </tr>
  这是一个普通用户的登录界面,提交进行数据库处理的代码如下:
  
  <%if request.form("login")="yes" then
  set rs=server.createobject("adodb.recordset")
  sql="select * from book where xx='"&request.form("email")&"' and
   password='"&request.form("password")&"' order by id desc"
  rs.open sql,conn,1,1
  if not rs.eof then
   session("login")="yes"
   session("email")=request.form("email")
   session("password")=request.form("password")
   end if
  rs.close
  set rs=nothing
  end if
  %>
  
  仍然可以看到,变量"email"没有经过过滤直接用request.form("email")取值后就进行数据库查询,当攻击者在"email"对应的登录框中提交:
  
  'or exists(select * from admin) or '1'='1
  
  那么数据库查询语句sql就变成:
  
  select * from book where xx=' 'or exists(select pwd from admin) or '1'='1' and password='"&request.form("password")&"'order by id desc
  
  在SQL中and 的优先级是比or高的,而xx=' '显然为假,exists(select pwd from admin)真伪待定,'1'='1'为真,因为我们没有输入密码,所以password='"&request.form("password")为假。那么在where后面的语句的真实性如下:
  假 or 待定 or (真 and 假) 等价于 假 or 待定 or 假,所以where后面语句的真伪再次取决于攻击者输入的查询语句,如果admin表中pwd字段存在就登录成功,反之则失败。攻击者就可以在不用知道管理员密码的情况下猜测管理员密码。
  
  1.4Cookies方式注入原理
  Cookies注入的方式是最近流行的一种注入方式,下面是一段典型的存在Cookies注入的代码,其中check_sql.asp是一段网上流传的通用防注入的代码3.0版,通过它可以有效防止Post和Get方式的注入漏洞,但是却忽略了Request.Cookies的注入方式。
  
  <!--#include file="check_sql.asp"-->
  <% id= request ("id")
  set rs=Server.CreateObject("ADODB.RecordSet")
  sql="select * from class where classid="&id
  rs.open sql,conn,1,1
  rs.close
  set rs=nothing
  %>
  
  攻击者可以直接在浏览器的地址栏去掉URL,然后输入:
  
  javascript:alert(document.cookie="id="+escape(and exists(select * from admin))
  
  来修改cookies值,然后再去掉修改cookie的语句,再加上原来的不传递任何参数的URL,这样修改了的cookies就会提交给id= request ("id"),又由于id= request ("id")没有具体指明是Request.QueryString或Request.Form,这样就给了攻击者利用的方式。我们知道 ASP中Request对象在省略具体的集合名称而直接使用"id=request("id")"来获取数据时,总是按Request.QueryString,Request.Form,Request.cookies,Request.servervariables集合的顺序来搜索的,而cookies是可以在客户端进行修改,这样一来,攻击者就可以使用诱使服务器接收Request.cookies方式提交变量的值,从而利用绕过通用防注入程序进行注入攻击。
  判断方式和Get方式一样。如网页返回的正常,则admin表存在,反之则不存在。那么攻击者就达到猜管理员表名的目的了。
  
  2 SQL注入漏洞的防范
  
  通过以上分析我们看到,对于以上三种注入方式,参与数据库查询的变量不外乎就是数字型和字符型,所以分别针对数字型和字符型来做防范。
  
  2.1针对数字型的变量
  针对数字型的变量,我们可以判断其是否真是数字型变量,如上面的Get注入方式(Get方式也有字符型的变量,原理一样)。参考代码如下:
  
  If not isNumeric(Parameter) then
  Response.write "<script>alert(/参数只能为数字/)</scirpt>"
  
  2.2针对字符型的变量
  针对字符型的变量,因为攻击者是试图通过闭合单引号来达到目的,所以我们只要可以过滤单引号就可以防止注入,如上面的Post注入方式(Post方式也有数字型的变量,原理一样)。 参考代码如下:
  
   Parameter=replace(Parameter,"'","")
  
  3 结束语
  
  其实SQL注入造成的危害远没有猜个列名或表名那么简单。对于Access数据库,可以直接用Union查询找出管理员密码;对于SQL Server,利用方法更多,如果注入点是SA权限,一般可用xp_cmdshell直接执行系统命令,如果注入点是DB_Owner权限,也可列目录备份得到Webshell。
   由于当前的注入工具泛滥,而针对网站的攻击很多都是从注入开始的,但是我们也不必谈注入“色变”。只要了解了SQL注入产生的根本原因,就能找到应对之策。其实PHP和JSP也存在注入,原理大致和ASP一样,只是不同环境在利用方式上略有不同罢了。我们只要掌握原理,就可以触类旁通,编写出更加安全的代码,为祖国网络安全尽一份力量。
其他文献
1 引言    在Web 2.0出现以前,跨站脚本(XSS)攻击不是那么引人注目,但是在Web 2.0出现以后,配合流行的AJAX技术,XSS的危害性达到了十分严重的地步。比如,世界上第一个跨站脚本蠕虫发生在MySpace网站,20小时内就传染了一百万个用户,最后导致该网站瘫痪。因此我认为,XSS是在脚本环境下的溢出漏洞,其危害性绝不亚于传统的缓冲区溢出漏洞。    2 XSS攻击的定义    跨
期刊
摘要:骑士游历问题是经典的NP问题。在骑士游历问题常规算法的基础上,提出一个新的算法——预见算法,用Java实现该算法,提高程序的运行效率。  关键词:骑士游历;预见;Java算法    1 骑士游历问题  在国际象棋的棋盘(8行×8列)上放置一个马,按照“马走日字”的规则,马要遍历棋盘,即到达棋盘上的每一格,并且每格只到达一次。若给定起始位置(x0,y0),编程探索出一条路径,沿着这条路径马能遍
期刊
1引言    打造远程安全接入平台,一直是网络远程访问的迫切需求。当前,众多的安全协议(如PPTP、L2TP、IPSec和MPLS)各具特色并侧重于不同的方面,但能同时结合简易、安全两项特性的则非SSL莫属,SSL VPN是平衡访问自由度和安全性的出色解决方案。    2SSL     安全套接层(Secure Sockets Layer,SSL)是Netscape于1994年提出的基于Web应用
期刊
摘要:本文主要论述PC机与单片机之间实现异步串行通讯需要解决的问题以及如何利用C#提供的串行通讯SerialPort类来实现PC机与51单片机的通讯。  关键词: SerialPort;串行通讯;波特率    1 引言    PC机具有强大的监控和管理功能,而单片机则具有快速及灵活的控制特点,通过PC机的RS-232串行接口与外部设备进行通讯,是许多测控系统中常用的一种通信解决方案。  在Micr
期刊
在企业信息化建设的过程中,纵观企业现有的管理软件和业务处理软件,由于历史的原因(如分阶段建设、分业务或部门建设、采用不同的平台和解决方案等)造成企业内的不同系统无法有效地进行交互和数据共享,这就为企业整体信息化建设和信息交换及信息系统集成造成严重的问题。因此,如何在企业现有系统的前提下、尽量地降低成本并有效地实现多异构系统间的数据交换和信息融合,是许多IT集成研究人员必须克服的问题。本文介绍一种基
期刊
紧急救助四川都江堰市的聚源中学    5月13日,四川都江堰市的聚源中学,一名被掩埋在废墟里女生被抢救出来。该中学一栋六层高的教学楼除了两边楼梯间以外,全部垮塌,由于地震时学生正在上课,四层楼的24个班级的学生大多被埋在废墟下面。  在四川省北川县北川中学,一名被压在瓦砾堆中的学生在接受救治。四川汶川地震发生后,北川县北川中学六至七层高的主教学楼塌陷,当时正值上课时间,21个教室里师生约1000人
期刊
Google Earth是一款虚拟地球软件,是Google公司提供的卫星图片浏览软件,共享使用了公共领域的图片、受许可的航空照相图片和卫星图片,数据涵盖全球。Google Earth一经推出,就迅速在互联网引起波澜,受到众多网民追宠。然而,其自从面世以来就因涉及很多军事秘密而遭到多方质疑。由此,引发了人们对“Google Earth”应用的深入思考。笔者认为,广大网友应当正确认识“Google E
期刊
网络为企业提供了新的机遇,但是同时它也给安全、性能和可管理性等领域带来了新的风险。一个长期困扰网络管理者的实际情况就是,如何针对局域网内的不同用户作出不同的反应,毕竟总裁和员工的权限是有差别的。本文将使用两款优秀的网络管理软件实现对网络的全方位管理。但篇幅有限,一些必要的技术如DHCP、OUTLOOK等就不一一尽述了。    1 ISA简介    ISA Server 2000是Microsoft
期刊
1 Web环境下数据库系统安全的重要性  1.1 保护敏感信息和数据资产  大多数企业、组织以及政府部门的电子数据都保存在各种数据库系统中,他们用这些数据库系统保存一些涉及个人隐私的资料,敏感的金融数据,包括交易记录、商业事务和账号数据,战略上的或者专业的信息等。数据库服务器还可能保存着一些有关员工身份的详细资料,如身份证号、银行账号、信用卡号码和一些商业伙伴的资料等。从某种意义上讲,数据库系统的
期刊
1 引言    我们薛家配件厂是道岔、机车、车辆、电机、变压器等铁路配件的生产厂,现有2400多种产品,产品销往7个铁路局及地方铁路的300多个单位,年销售收入达1.5亿元。  随着经济体制改革的不断深化,为了适应铁路事业的飞速发展,我厂的生产经营机制和管理模式也做出了相应的调整,变过去“一成不变的以产定销的计划经济”为“瞬息万变的以销定产的市场经济”体制,变过去的人工操作管理模式为现代化的、信息
期刊