Web writeup

Web安全 - 随机数安全

2017-08-03  本文已影响0人  语落心生

接下来,讲的内容可能会涉及到JS,没有Js基础的萌新,建议前往w3cschool学习一下基本语法,有些函数标准较旧的,可以前往火狐的MDN开发者网络学习

随机数说明:
随机数在计算机应用中使用的比较广泛,最为熟知的便是在密码学中的应用。本文主要是讲解随机数使用导致的一些Web安全风。
我们先简单了解一下随机数

  • 分类
    随机数分为真随机数伪随机数,我们程序使用的基本都是伪随机数
    伪随机又分为强伪随机数和弱伪随机数。
    真随机数,通过物理实验得出,比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等
    伪随机数,通过一定算法和种子得出。软件实现的是伪随机数
    强伪随机数,难以预测的随机数
    弱伪随机数,易于预测的随机数

应用场景(ps:随机数的应用场景比较广泛,以下是随机数常见的应用场景):

场景:验证码生成出口
这题似乎看起来像是输入Result值,但萌新千万不要被误导了哦~
仔细实验的朋友会发现,最多只能输入一个值,这是因为input输入框的标签
值maxlength被限制为1,这就尴尬了。既然要求我们输入随机数,同时限制给定的长度。

dom.jpg

Next,F12切换到sources视图,我们找到找到动态生成验证码的JS文件(ps:没有JS基础的萌新,建议需要补一下,下面所讲解的知识使用的是JS的一个名为jquery的库。同时在个人看来作为当今时下实用性较强的一门脚本语言应当至少掌握基本语法,出口W3cschool~)

codeJS.jpg
Js色彩预演~与本章节无关,有兴趣的萌新可以看下当做Js语法了解

我们发现Js当中有诸如0x1000000 << 0.toString(16)这样的位运算
For example,让我们先来举个左移运算符的例子
<< (左移)
该操作符会将第一个操作数向左移动指定的位数。向左被移出的位被丢弃,右侧用 0 补充。

9 (base 10): 00000000000000000000000000001001 (base 2)
9 << 2 (base 10): 00000000000000000000000000100100 (base 2) = 36 (base 10)
0x1000000<<0(base 10):1000000000000000000000000(base 2) = 16777216

Syntax
number.toString(radix)
Parameter   Values
radix   可选的。用于表示数值的基数。必须是2到36之间的整数。
     2 - 数字将显示为2进制值
     8 - 数字将显示为8进制值
     16 -数字将显示为16进制值

色彩十六进制编码:
我们将进入Adobe Color CC挑选一种喜欢的颜色,以我最喜爱的亮蓝色(256BFF)为例:颜色编码#256BFF

解析CodeJs编写思路:颜色编写部分

$(function() {  
    var code = 9999; 
    function codes(){
        
        var ranColor = '#' + ('00000' + (Math.random() * 0x1000000 << 0).toString(16)).slice(-6);
         //随机生成颜色
        // alert(ranColor)
        var ranColor2 = '#' + ('00000' + (Math.random() * 0x1000000 << 0).toString(16)).slice(-6); 
        var num1 = Math.floor(Math.random() * 100);  
        var num2 = Math.floor(Math.random() * 100);  
        code = num1 + num2;  
        
        $("#code").html(num1 + "+" + num2 + "=?");  
        if ($("#code").hasClass("nocode")) {  
            $("#code").removeClass("nocode");  
            $("#code").addClass("code"); 
           
        }  
        $("#code").css('background',ranColor);
         $("#code").css('color',ranColor2);

    }
    codes()
    $("#code").on('click',codes)

接!下!来 let'us 进入正题
解析CodeJS编写思路,提交验证码部分漏洞生成原因:

   $("#check").click(function(){ 
       if ($(".input").val() == code && code != 9999) {  
           alert("flag{CTF-bugku-0032}");  
       } else {  
           alert("输入有误!");  
       }  
   });  
});  

上一篇 下一篇

猜你喜欢

热点阅读