http://example.com/LogIn?key={guid}
很不幸,我发送的guid
都是随机生成的(使用Guid.NewGuid()
生成测试数据),因此所有客户都收到了无效的链接...
根据服务器返回的404状态码,我已经确定了我发出的一些guid。我读到过Windows中的guid生成器很薄弱,因此你可以从已有的一个guid预测下一个。有人知道怎么做吗?如果我能做到这一点,就可以使我发送的guid有效,使链接再次正常工作。
http://example.com/LogIn?key={guid}
很不幸,我发送的guid
都是随机生成的(使用Guid.NewGuid()
生成测试数据),因此所有客户都收到了无效的链接...
根据服务器返回的404状态码,我已经确定了我发出的一些guid。我读到过Windows中的guid生成器很薄弱,因此你可以从已有的一个guid预测下一个。有人知道怎么做吗?如果我能做到这一点,就可以使我发送的guid有效,使链接再次正常工作。
RNGCryptoServiceProvider
(.NET)或类似工具,因为这才是它的本意。即使您了解.NET GUID使用CSPRNG,其他GUID算法也不一定如此。如果您使用GUID,则表示它们在任何地方都是安全的,但实际上它们绝对不是。 - undefined首先,您需要了解它们是否符合RFC4122标准,并获取版本信息。
UUIDv1由以下部分组成:
您只需遍历可能的时间戳即可。请注意,有很多100纳秒间隔!
一些软件生成UUIDv1(Grafana仪表板ID、Airbnb列表等),但有些软件依赖于随机UUID,UUIDv4。
正如Nikolay «denish» Denishchenko(Kaspersky)不久前演示的那样,鉴于对生成UUID的进程的调试访问权限,人们可以窃取当前的RC4上下文,并在其他地方复制最多500,000个UUID。这已经在Microsoft Windows XP上演示过(嗨,Will Dean),它使用有趣的8 * RC4机制,仅在实际熵种子每500,000个UUID时才播种。
在Windows 10上(它不是完全基于Windows版本,而是.NET框架或rpcrt4.dll版本),它不再是RC4,而是AES,可能以CTR模式使用。可能存在相同的熵复用。
有关更多信息,请访问我在这里的工作https://uuid.pirate-server.com/blog/
有几种不同类型的GUID。类型1使用主机ID(通常是MAC地址)、序列号和当前日期和时间。类型4完全是随机的。如果它是类型1 UUID,你可能可以找出一组相对受限的可能UUID,但即使如此,你也无法生成单个UUID序列,因此你将无法将特定的UUID固定到特定的用户。
即使您能够预测下一个GUID,这也是不可靠的,但很可能在您可支配的资源范围内完全不可能。
在这里,您最好的选择是将任何不匹配的GUID添加手动重定向到通用页面,该页面可以解释出了什么问题或者只是通过编程找出他们应该到达的位置并将其发送到那里。
GUID 的一部分是当前日期/时间。如果您连续收到两个 GUID,则可以确定它们被创建的速度,并因此有很强的信心预测序列。