我有一些字符串和它们的一些哈希值,但我不知道使用哪个哈希函数。有什么想法吗?
String hash
NN34W f8b46bcdc3b3c92
EM3M3 d8015ca876fd051
HXDKD a740e97464e5dfe
AKREJ aa7aa2dadfcbe53
3bNMK 0f11440639191d9
编辑:
感谢您的回答,这是验证码的哈希值。
如果查看验证码图片的URL,最后是HASH值。这个
在服务器上,通过 HTTP POST 发送TEXT: (P92M4) 和 HASH (72fec89a2e0ade2) 以及其他值。
我喜欢知道如何计算文本P92M4的哈希值,并用哈希值进行控制,该值在服务器上发送。
因为我喜欢为我的学校项目制作自己的验证码系统,所以我首先分析情况和弱点。
最佳答案
据我了解您的情况,POST 请求会将“文本”和“哈希”发送到 CAPTCHA 服务器。然后,它使用他们用来散列您的文本的任何散列函数,检查它是否与散列匹配,并决定您是否成功。据推测,服务器会向您发送图像以及哈希值,然后您输入文本。
因此,如果您找到了哈希函数,您就已经完全破坏了这个验证码系统:您需要做的就是使用哈希函数对任何字符串进行哈希处理,然后在发送 POST 请求时忽略哈希值他们发送给您,只需向他们发送您的计算文本和哈希对。因此,您可以非常轻松地自动成功通过验证码挑战。
为了说明“反转”散列可能有多困难,请考虑他们很可能使用的以下散列:
- 将 TEXT 拆分为交替字母:因此 ABCDE 变为 ACE 和 BD
- 使用盐“fj49w0utw4a”和“r8h3wlsd”对两半进行md5
- md5("fj49w0utw4a"."ACE") 为 115c05f0e5300f958ba01caa64b989f
- md5("r8h3wlsd"."BD") 为 74eecae86ef46382eb95443a1b1fa8f5
- 取第一个字符串的每 3 个字符和第二个字符串的每 4 个字符,并交替使用它们,直到有 15 个字符
- 115c05f0e5300f958ba01caa64b989f 变为 55e09b1ab9
- 74eecae86ef46382eb95443a1b1fa8f5 变为 e8425af5
- “ABCDE”的最终哈希值:5e58e402 95ba1fa
您确实无法对其进行逆向工程。
更新
请注意,上述验证码(并在该网站上实现)非常不安全,因为它们只需要知道一个有效的文本/哈希组合
为了进行演示,请使用 Firebug 或等效工具并导航到表单的验证码区域。我们将编辑一些隐藏值。
- 将
form[captcha_url]
值从https://pokec.azet.sk/sluzby/system/captcha/[somehash]
更改为https://pokec.azet.sk/sluzby/system/captcha/ee2be1f239e5d17
- 将
form[captcha_hash]
值从[somehash]
更改为ee2be1f239e5d17
- 无论图片内容如何,请输入“P22KD”作为验证码
有多种方法可以缓解此漏洞。正如 Tangrs 所建议的,您可以将哈希值存储在 session 变量中,这样客户端就无法对其进行操作。不太优雅但也很有效的方法是将提交的验证码存储在数据库中,并且不允许重复的验证码,就像问题中的链接上实现的那样。这很好,直到您开始用完未使用的验证码并最终发生冲突。
关于hash - 这可能是哪个哈希函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3190736/