99.网络安全渗透测试—[常规漏洞挖掘与利用篇15]—[伪随机码漏洞与测试]

我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!

一、伪随机码漏洞与测试

1、伪随机码漏洞

(1)伪随机码的特性:

       伪随机码结构可以预先确定,重复产生和复制,具有某种随机序列的随机特性的序列号。

(2)伪随机码的作用:

       在WEB开发中伪随机码主要用于确定范围,例如6位数的范围是000000-999999,在这个范围内随机生成一个值。在php里就有这样的函数rand()函数是产生随机数的一个随机函数,例如生成000000-999999内的随机数,可以这样设置rand(000000,999999)。

(3)伪随机码的应用:

       在WEB安全里,用到这样的伪随机数的情形,一般都是手机获取验证码。如果这个验证码使用这种模式,我们就可以枚举所有数值进行对比,即可绕过验证。

2、伪随机码测试:6位手机验证码

(1)源码:range.php
<?php
	include 'data/config.inc.php';
	
	
	if($_GET['c']=='tel'){
	        $code = rand(000000,999999);
	        $tel = addslashes($_POST['tel']);
	        #$re = mysql_query("INSERT INTO `range` VALUES ('null', '{$email}', '{$code}')");
	        $result = mysql_query("select * from `moon_range` where tel = '{$tel}'");
	        $row =mysql_fetch_array($result);
	        if ($row['tel']==$tel){
	                $re = mysql_query("update `moon_range` set code = ${code} where id  = {$row['id']}");
	                //每提交一次手机号后,就会更新一次随机的验证码到服务器的数据库中
	                //注意,有的时候更加的水,可能会在提交了手机号后,直接把验证码通过http响应头返回,可以通过开发者攻击检查哦!!!
	                if($re){
	                        echo "验证码已发送";
	                }else{
	                        echo "操作失败";
	                }
	        }
	}
	
	if($_GET['c']=='check'){
	        $code = intval($_POST['code']);
	
	        $c = mysql_query("select * from `moon_range` where code = '{$code}'");
	        //如果查询的在数据库中存储的随机验证码跟我们提交的验证码一致,则返回true
	
	        $row =mysql_fetch_array($c);
	        if($row){
	                echo "code 正确.";
	        }else{
	                echo "code 错误";
	        }
	}
?>

<meta charset="UTF-8">
<h5>伪随机漏洞</h5>
<p>只能测试  13688888888</p>
<form method="post" action='?c=tel'>
	请输入你的手机号码<input type='text' name='tel' value='13688888888'/>
	<input type="submit" value="找回密码" name="re_password"/>
</form>

<form method="post"  action='?c=check'>
	验证码<input type='text' name='code'/>
	<input type="submit" value="提交"/>
</form>
(2)靶机链接:
http://www.webtester.com/range.php
(3)用burpsuite穷举伪随机数:穷举手机验证码

第一步: 访问靶机链接,发现了如下所示的修改密码页面,注意此处只能使用13688888888这一个手机号来测试

如下图所示,我们访问靶机链接http://www.webtester.com/range.php
在这里插入图片描述
第二步: 我们点击找回密码,就会提交手机哈给range.php脚本,也就会在服务器的数据库中存储一个6位的随机码

如下图所示,我们点击了找回密码,会显示验证码已发送。根据之前的源码分析,由于点击找回密码,会提交手机号,从而就会把一个6位的伪随机码存储到数据库中。
在这里插入图片描述
如下图所示,我们在靶机的数据库中确实发现了一个6位的随机数960732,这里需要注意的是,我们通过之前的源码会发现,每点击一次找回密码,也就是提交一次手机号后,就会重置一次验证码!!!
在这里插入图片描述

第三步: 随便填入一个验证码后点击提交,抓包拦截,穷举6位手机验证码

如下图所示,我们开启了BP代理,然后输入了12346,点击提交:

在这里插入图片描述
如下所示,我们成功拦截到了提交的post数据包:

在这里插入图片描述
如下图所示,我们把拦截到的包发送到Intruder模块进行爆破6位验证码:
在这里插入图片描述

如下图所示,我们设置攻击者模式为Sniper,给验证码code设置为枚举变量:
在这里插入图片描述
如下图所示,我们设置payload为数字型,因为我们刚刚已经知道了数字是960732,为了节省时间,所以我们从960000开始爆破:
在这里插入图片描述
如下图所示,我们成功爆破出了6位手机验证码960732
在这里插入图片描述

(4)防御方法:
  • 设置失败次数,超过次数后销毁数值。
  • 设置提交的间隔时间。
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qwsn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值