1
SQL 盲注攻击技术综述
Javaphile
SQL 盲注攻击技术综述
coolswallow of Javaphile (
coolswallow@shaolin.org.cn)
Blind SQL Injection Techniques: A Survey
Abstract: This paper gives a survey of current Blind SQL Injection Techniques. It first introduces the definition
of SQL Injection and its risk, and reviews several solutions proposed to solve the problem and their each
disadvantages. Then, the paper discusses that if detailed error messages are suppressed, how to identify SQL
Injections based on minimal reaction of the server, and how to identify SQL Injection vulnerable parameters, to
generate valid injection syntax and to build the required exploit. At last, an injection of UNION SELECT statements
is described in detail, including how to count the columns and how to identify columns types. Although the
provided examples in the paper refer to Microsoft SQL Server and Oracle only, the same techniques can be applied
to other Databases as well. By the paper, we hope to make it clear that application level vulnerabilities must be
handled by application level solutions, and that relying on suppressed error messages for protection from SQL
Injection is eventually useless.
Key words: SQL Injection; Blind Injection; Database Attack; Web Application Security
摘 要: 本文对目前 SQL 注入攻击中使用的盲注技术进行了综述。本文首先介绍了普通 SQL 注入技术的定义和
危害,回顾了几种已被提出的针对 SQL 注入的防御手段及其各自的缺点,然后讨论了在错误信息被屏蔽或掩饰
的情况下探测 SQL 注入漏洞是否存在所需的服务器最小响应,以及如何确定注入点和确定正确的注入句法并构
造利用代码。最后本文还以 UNION SELECT 语句为例,详细介绍了利用该语句在盲注条件下统计数据表的列数
和判断列的数据类型的方法和步骤。本文中给出的例子都是针对 Microsoft SQL Server 和 Oracle 的,但同样的技
术也可以被应用到其他数据库系统。本文的目的是明确应用程序级别的漏洞只能通过应用程序级别的方案才能解
决,仅仅依靠屏蔽错误信息来回避 SQL 注入攻击是无益的。
关键词: SQL 注入;盲注;数据库攻击;网络应用程序安全
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请求语句