SQL注入-Day14

一、注入分类

1、依据注入点类型分类

  • 数字类型的注入
  • 字符串类型的注入(单引号、双引号、加括号等)
  • 搜索型注入

2、依据提交方式分类

  • GET注入
  • POST注入
  • COOKIE注入
  • HTTP头注入(XFF注入、UA注入、REFERER注入)

3、依据获取信息的方式分类

  • 基于布尔的盲注
  • 基于时间的盲注
  • 基于报错的注入
  • 联合查询注入
  • 堆查询注入 (可同时执行多条语句)

二、注入判断

1、工具扫描

常见的网站漏洞扫描工具:AWVS、AppScan、OWASP-ZAP、Nessus 等

2、手动测试

a. 添加单引号、双引号 '' 、单括号 ) 、双括号 )) ,进行组合测试,看是否报错,如果报错,就可能SQL注入漏洞。

b.对于数字型:

语句:and 1=1 ;and 1=2 (经典)

结果:在URL后面加 and 1=1 、 and 1=2 看页面是否显示一样,显示不一样的话,肯定存在SQL注入漏洞了。

分析:and 的意思是“和”如果没有过滤我们的语句,and 1=1就会被代入SQL查询语句进行查询,
如果and前后的两条语句都是真的话就不会出错,但如果前后语句有一个为假的话,程序就会暴错。也就表明程序有注入漏洞。

c.对于字符型:

语句:' and '1'=1;' and  '1=2(经典)

结果:分别返回不同的页面,说明存在注入漏洞。

分析:加入' and '1'=1返回正确页面,加入' and  '1=2返回错误页面,说明有注入漏洞。

d.Timing Attack测试:

也就是时间盲注。有时候通过简单的条件语句比如 and 1=2 是无法看出异常的。

注:Mysql 中,等号两边如果类型不一致,会发生强制类型转换。当数字与字符串进行比较时,
首先先将字符串转换成数字,然后再进行比较。类似于 PHP 里面的 弱类型比较 ==。

 三、盲注

盲注:就是在服务器没有错误回显时完成的注入攻击。服务器没有错误回显,对于攻击者来说缺少了非常重要的信息,所以攻击者必须找到一个方法来验证注入的SQL语句是否得到了执行。

例:这是sqli的Less-5,我自己对源码稍微改动了一下,使得页面会显示执行的sql语句

通过输入 http://127.0.0.1/sqli/Less-1/?id=1   我们得到了下面的页面

然后输入 http://127.0.0.1/sqli/Less-5/?id=-1   我们得到下面的页面

当我们输入  http://127.0.0.1/sqli/Less-5/?id=1'  我们得到下面的页面

由此可以看出代码把 id 当成了字符来处理,而且后面还有一个限制显示的行数  limit 0,1 。当我们输入的语句正确时,就显示You are in....   当我们输入的语句错误时,就不显示任何数据。当我们的语句有语法错误时,就报出 SQL 语句错误。

于是,我们可以推断出页面的源代码

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";    //sql查询语句
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
	if($row){                    //如果查询到数据
      	  echo 'You are in...........';
  	}else{                      //如果没查询到数据
	     print_r(mysql_error());  	
	}

于是我们可以通过构造一些判断语句,通过页面是否显示来证实我们的猜想。盲注一般用到的一些函数:ascii() 、substr() 、length(),exists()、concat()

1、布尔盲注

1.1 什么是布尔盲注

例:?id=1' and '1   、   ?id=1' and 'a  (这里没有使用注释符号进行后面的单引号闭合,使用的是手工单引号闭合)或者   ?id=1' and 1=1#    、   ?id=1' and 1=2#    

两者的页面截然不同,一个正常回显,一个没有回显的话,就可判断是布尔盲注。

1.2 布尔盲注利用前提

页面没有显示位,没有输出SQL语句执行错误信息,只能通过页面返回正常不正常来判断是否存在注入。

2、时间盲注

在MySQL中,有一个Benchmark() 函数,它是用于测试性能的。 Benchmark(count,expr) ,这个函数执行的结果,是将表达式 expr 执行 count 次 。

因此,利用benchmark函数,可以让同一个函数执行若干次,使得结果返回的时间比平时要长,通过时间长短的变化,可以判断注入语句是否执行成功。这是一种边信道攻击,这个技巧在盲注中被称为Timing Attack,也就是时间盲注。

MySQL

benchmark(100000000,md(5))

sleep(3)

PostgreSQL

PG_sleep(5)

Generate_series(1,1000000)

SQLServerwaitfor delay  '0:0:5'

易出现SQL注入的功能:凡是和数据库有交互的地方都容易出现SQL注入,SQL注入经常出现在登陆页面、涉及获取HTTP头(user-agent / client-ip等)的功能点及订单处理等地方。例如登陆页面,除常见的万能密码,post 数据注入外也有可能发生在HTTP头中的 client-ip 和 x-forward-for 等字段处。这些字段是用来记录登陆的 i p的,有可能会被存储进数据库中从而与数据库发生交互导致sql注入。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值