根据开发人员如何生成随机数或字符串,创建的值可能会越来越随机。最大和最大的错误是使用常数或当前时间手动播种随机发生器; 这将允许攻击者能够预测已生成和将要生成的值。
在本节中,我们将看到一些可以说服随机并不总是随机的示例。
Example 1
第一个例子就是为了说明随机是如何随机的。问题来自使用种子随机生成器。开发人员使用该值为0随机生成器播种。
如果您只是重播脚本,您应该能够找到为管理员生成的密码admin。
Example 2
此示例显示了随机生成器的不良播种的另一个示例。随机发生器以当前时间播种。
要以admin密码的方式工作,您需要强制种子。为此,您可以从当前时间开始并减少它,同时重放用于生成值的算法,直到您获得密码。
获得密码后,您就会知道使用了什么种子(或者更准确地说是随机生成器初始化的时间)。然后,您可以获取admin密码。
Example 3
这个例子非常简单,与第一个类似。您只需重播代码即可获取admin密码。密码长度是随机的这一事实对您可以猜测的事实没有影响。
Example 4
在这个例子中,你不知道在生成密码之前使用随机生成器的次数(因为它是一个调用而rand(1000)不是s.rand(1000)。你仍然可以生成以前的密码。要得到它,你只需要粗暴强制此值,直到您获得密码。