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

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

文章目录

    • 一、伪随机码漏洞与测试
      • 1、伪随机码漏洞
        • (1)伪随机码的特性:
        • (2)伪随机码的作用:
        • (3)伪随机码的应用:
      • 2、伪随机码测试:`6位手机验证码`
        • (1)源码:range.php
        • (2)靶机链接:
        • (3)用burpsuite穷举伪随机数:`穷举手机验证码`
        • (4)防御方法:

一、伪随机码漏洞与测试

1、伪随机码漏洞

(1)伪随机码的特性:

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

(2)伪随机码的作用:

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

(3)伪随机码的应用:

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

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

(1)源码:range.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
99.网络安全渗透测试—[常规漏洞挖掘与利用篇15]—[伪随机码漏洞与测试]_第1张图片
第二步: 我们点击找回密码,就会提交手机哈给range.php脚本,也就会在服务器的数据库中存储一个6位的随机码

如下图所示,我们点击了找回密码,会显示验证码已发送。根据之前的源码分析,由于点击找回密码,会提交手机号,从而就会把一个6位的伪随机码存储到数据库中。
99.网络安全渗透测试—[常规漏洞挖掘与利用篇15]—[伪随机码漏洞与测试]_第2张图片
如下图所示,我们在靶机的数据库中确实发现了一个6位的随机数960732,这里需要注意的是,我们通过之前的源码会发现,每点击一次找回密码,也就是提交一次手机号后,就会重置一次验证码!!!
99.网络安全渗透测试—[常规漏洞挖掘与利用篇15]—[伪随机码漏洞与测试]_第3张图片

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

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

99.网络安全渗透测试—[常规漏洞挖掘与利用篇15]—[伪随机码漏洞与测试]_第4张图片
如下所示,我们成功拦截到了提交的post数据包:

99.网络安全渗透测试—[常规漏洞挖掘与利用篇15]—[伪随机码漏洞与测试]_第5张图片
如下图所示,我们把拦截到的包发送到Intruder模块进行爆破6位验证码:
99.网络安全渗透测试—[常规漏洞挖掘与利用篇15]—[伪随机码漏洞与测试]_第6张图片

如下图所示,我们设置攻击者模式为Sniper,给验证码code设置为枚举变量:
99.网络安全渗透测试—[常规漏洞挖掘与利用篇15]—[伪随机码漏洞与测试]_第7张图片
如下图所示,我们设置payload为数字型,因为我们刚刚已经知道了数字是960732,为了节省时间,所以我们从960000开始爆破:
99.网络安全渗透测试—[常规漏洞挖掘与利用篇15]—[伪随机码漏洞与测试]_第8张图片
如下图所示,我们成功爆破出了6位手机验证码960732
99.网络安全渗透测试—[常规漏洞挖掘与利用篇15]—[伪随机码漏洞与测试]_第9张图片

(4)防御方法:

  • 设置失败次数,超过次数后销毁数值。
  • 设置提交的间隔时间。

你可能感兴趣的:(#,伪随机码漏洞与测试,手机验证码枚举漏洞测试实战,伪随机码枚举漏洞测试实战,BurpSuite穷举验证码,手机验证码枚举防护方法)