【12】WEB渗透基础-SQL注入原理简介

   1、SQL注入介绍     

        所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。 比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击

    2、原理

        SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:

  1. ①不当的类型处理;
  2. ②不安全的数据库配置;
  3. ③不合理的查询集处理;
  4. ④不当的错误处理;
  5. ⑤转义字符处理不合适;
  6. ⑥多个提交处理不当。

3、检测条件

  1. 被测网站具有交互功能模块,涉及到参数提交等等 
  2. 例如待测目标URL,假设为http://www.exmaple.com/page.xxx 
  3. 待测目标存在参数输入,假设为name=value

4、检测方法

1、几种常见的判断方法:

       通过web漏洞扫描工具进行对网站爬虫后得到的所有链接进行检测,或者手工判断是否存在注入点,一旦确认存在漏洞,可利用自动化工具sqlmap去尝试注入。

1、数字型。测试方法:

http://host/test.php?id=100 and 1=1        //返回成功
http://host/test.php?id=100 and 1=2        //返回失败

2、字符型。测试方法:

http://host/test.php?name=rainman ‘ and ‘1’=‘1        //返回成功 
http://host/test.php?name=rainman ‘ and ‘1’=‘2        //返回失败
http://host/test.php?name=rainman ‘ and ‘1’=‘2 ))     //使用括号进行语句闭合

3、搜索型。搜索型注入:简单的判断搜索型注入漏洞存在不存在的办法是:

1)先搜索('),如果出错,说明90%存在这个漏洞。
2)然后搜索(%),如果正常返回,说明95%有洞了。 
3)然后再搜索一个关键字,比如(2006)吧,正常返回所有2006相关的信息。
4)再搜索(2006%'and 1=1 and '%'=')和(2006%'and 1=2 and '%'=')

4、绕过验证(常见的为管理登陆)也称万能密码:

(1) 用户名输入: ‘or 1=1 or’  密码:任意
(2) Admin’ -- (或’or 1=1 or’ --)(admin or 1=1 --) (MSSQL)(直接输入用户名,不进行密码验证)
(3) 用户名输入:admin   密码输入:’ or ‘1’=‘1  也可以
(4) 用户名输入:admin' or 'a'='a    密码输入:任意
(5) 用户名输入:’ or 1=1 --
(6) 用户名输入:admin’ or 1=1 --  密码输入:任意
(7) 用户名输入:1'or'1'='1'or'1'='1   密码输入:任意

5、不同的SQL服务器连结字符串的语法不同,比如MS SQL Server使用符号+来连结字符串,而Oracle使用符号||来连结:

http://host/test.jsp?ProdName=Book’       //返回错误
http://host/test.jsp?ProdName=B’+’ook     //返回正常
http://host/test.jsp?ProdName=B’||’ook    //返回正常说明有SQL注入
如果应用程序已经过滤了’和+等特殊字符,我们仍然可以在输入时过把字符转换成URL编码(即字符ASCII码的16进制)来绕过检查。

2、注释:

大多数数据库系统使用“/*”做为注释,Oracle使用“--”做为注释。

3、数据库指纹:

指纹一:观察应用返回的错误信息判断数据库类型。
指纹二:字符串拼接特点

Mysql:’test’ ‘ing’
SQLServer:’test’ + ‘ing’
Oracle:’test’ || ‘ing’
PostgreSQL:’test’ || ‘ing’

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注入。
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值