SQL盲注攻击的简单介绍

发表于:2014-4-16 11:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:yansj_scu    来源:51Testing软件测试网采编

  1 简介
  1.1 普通SQL注入技术概述
  目前没有对SQL注入技术的标准定义,微软中国技术中心从2个方面进行了描述[1]:
  (1) 脚本注入式的攻击
  (2) 恶意用户输入用来影响被执行的SQL脚本
  根据Chris Anley的定义[2], 当一个攻击者通过在查询语句中插入一系列的SQL语句来将数据写入到应用程序中,这种方法就可以定义成SQL注入。Stephen Kost[3]给出了这种攻击形式的另一个特征,“从一个数据库获得未经授权的访问和直接检索”,SQL注入攻击就其本质而言,它利用的工具是SQL的语法,针对的是应用程序开发者编程过程中的漏洞,“当攻击者能够操作数据,往应用程序中插入一些SQL语句时,SQL注入攻击就发生了”。实际上,SQL注入是存在于常见的多连接的应用程序中一种漏洞,攻击者通过在应用程序中预先定义好的查询语句结尾加上额外的SQL语句元素,欺骗数据库服务器执行非授权的任意查询。这类应用程序一般是网络应用程序(Web Application),它允许用户输入查询条件,并将查询条件嵌入SQL请求语句中,发送到与该应用程序相关联的数据库服务器中去执行。通过构造一些畸形的输入,攻击者能够操作这种请求语句去获取预先未知的结果。
  在风险方面,SQL注入攻击是位居前列的,与缓冲区溢出等漏洞基本相当。而且如果要实施缓冲区溢出攻击,攻击者必须首先能绕过站点的防火墙;而对于SQL注入攻击,由于防火墙为了使用户能访问网络应用程序,必须允许从Internet到Web服务器的正向连接,因此一旦网络应用程序有注入漏洞,攻击者就可以直接访问数据库进而甚至能够获得数据库所在的服务器的访问权,因此在某些情况下,SQL注入攻击的风险要高于所有其他漏洞。
  SQL注入攻击利用的是SQL语法,这使得这种攻击具有广泛性。理论上说,对于所有基于SQL语言标准的数据库软件包括SQL Server,OracleMySQL, DB2,Informix等以及与之连接的网络应用程序包括Active/Java Server Pages, Cold Fusion Management, PHP或Perl等都是有效的。当然各种软件有自身的特点,实际的攻击代码可能不尽相同。SQL注入攻击的原理相对简单,且各类基于数据库系统的应用程序被广泛使用,介绍注入漏洞和利用方法的公开出版物也大量问世,造成近年SQL注入攻击的数量一直增长,注入攻击的形式也有被滥用的趋势。
  关于针对MS SQL Server的普通SQL注入技术的详细介绍,可以参考Chris Anley所撰的“SQL Server应用程序中的高级SQL注入”[2]一文和其后续“更多的高级SQL注入”[4],Cesar Cerrundo所撰的“利用SQL注入操纵Microsoft SQL Server” [5]一文,以及SPI实验室的Kevin Spett撰写的白皮书“SQL注入 你的网络应用程序是否会受攻击?” [6];而针对Oracle的普通SQL注入技术介绍,可以参考Stephen Kost的“针对Oracle开发人员的SQL注入攻击简介”[3]一文。
  1.2 SQL注入攻击的防御手段
  由于越来越多的攻击利用了SQL注入技术,也随之产生了很多试图解决注入漏洞的方案。目前被提出的方案有:
  (1) 在服务端正式处理之前对提交数据的合法性进行检查;
  (2) 封装客户端提交信息;
  (3) 替换或删除敏感字符/字符串;
  (4) 屏蔽出错信息。
  方案(1)被公认是最根本的解决方案,在确认客户端的输入合法之前,服务端拒绝进行关键性的处理操作,不过这需要开发者能够以一种安全的方式来构建网络应用程序,虽然已有大量针对在网络应用程序开发中如何安全地访问数据库的文档出版,但仍然有很多开发者缺乏足够的安全意识,造成开发出的产品中依旧存在注入漏洞;方案(2)的做法需要RDBMS的支持,目前只有Oracle采用该技术;方案(3)则是一种不完全的解决措施,例如,当客户端的输入为“…ccmdmcmdd…”时,在对敏感字符串“cmd”替换删除以后,剩下的字符正好是“…cmd…”;方案(4)是目前最常被采用的方法,很多安全文档都认为SQL注入攻击需要通过错误信息收集信息,有些甚至声称某些特殊的任务若缺乏详细的错误信息则不能完成,这使很多安全专家形成一种观念,即注入攻击在缺乏详细错误的情况下不能实施。
  而实际上,屏蔽错误信息是在服务端处理完毕之后进行补救,攻击其实已经发生,只是企图阻止攻击者知道攻击的结果而已。本文所介绍SQL盲注技术就是一些攻击者使用的新技术,其在错误信息被屏蔽的情况下使攻击者仍能获得所需的信息,并继续实施注入攻击。
  1.3 本文的结构组织
  为了理解盲注攻击,我们首先将介绍确定SQL注入漏洞所需的服务器的最小响应;其次,我们将构造一个合乎语法的SQL请求,并可以将之替换成任何有效的SQL请求;最后,我们将讨论在没有详细错误信息的情况下如何利用UNION SELECT语句。本文所讨论的盲注攻击的条件是我们在攻击前对网络应用程序、数据库类型、表结构等等信息都一无所知,这些信息都需要在注入的过程中通过探测获得。
31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号