1、SQL注入介绍
SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。 比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。
2、原理
建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:
- ①不当的类型处理;
- ②不安全的数据库配置;
- ③不合理的查询集处理;
- ④不当的错误处理;
- ⑤转义字符处理不合适;
- ⑥多个提交处理不当。
3、检测条件
- 被测网站具有交互功能模块,涉及到参数提交等等
- 例如待测目标URL,假设为
http://www.exmaple.com/page.xxx
- 待测目标存在参数输入,假设为name=value
4、检测方法
1、几种常见的判断方法:
通过web漏洞扫描工具进行对网站爬虫后得到的所有链接进行检测,或者手工判断是否存在注入点,一旦确认存在漏洞,可利用自动化工具sqlmap去尝试注入。
1、数字型。测试方法:
2、字符型。测试方法:
3、搜索型。搜索型注入:简单的判断搜索型注入漏洞存在不存在的办法是:
4、绕过验证(常见的为管理登陆)也称万能密码:
5、不同的SQL服务器连结字符串的语法不同,比如MS SQL Server使用符号+来连结字符串,而Oracle使用符号||来连结:
2、注释:
大多数数据库系统使用“/*”做为注释,Oracle使用“--”做为注释。
3、数据库指纹:
指纹一:观察应用返回的错误信息判断数据库类型。
指纹二:字符串拼接特点
4、漏洞利用技术
1、联合查询SQL注入技术:UNION联合多个SQL语句。
2、SQL中逻辑判断使用技术:应用在盲注中,例如判断用户名第一个字符是不是“a”。
3、基于错误的注入技术:在SQL注入语句中加入执行函数语句。
4、外连攻击技术:在SQL注入语句中加入外连其他服务器的执行函数,使得连接到其他服务器。
5、延时攻击:注入语句中加入睡眠时间,以此根据响应时间判断猜测正确与否。
5、注释块
注释块(’/* sql */’)包含一个感叹号标记时(‘/*! sql */’),MySQL可以对其进行解析,而其他数据库系统将其作为普通注释块。
6、SQL盲注
字符串长度:length(str)
基于时间的盲注:sleep()
不用引号实现字符串:CHR(104) || CHR(101) || CHR(108) || CHR(108) //返回字符串的ASCII码值
和以上相反:ASCII(‘r’) || ASCII(’o’) || ASCII(‘t’)
7、非关系型数据库(NoSQL)
NoSQL注入攻击可以在过程语言中执行,而不是在声明式的SQL语言,所以潜在的影响要大于传统的SQL注入。