作者:John Cantrell
今天(2019年4月16日中午),发现关键#1的第一个主要线索将在几个城市发布。在这些位置找到了带有'orbital'字样的QR码,如下所示:(https://imgur.com/a/6rNmz7T)。如果您使用手机阅读二维码,您将被引导至此网址:https://satoshistreasure.xyz/k1,在此URL处,系统会提示您输入密码来解密第一个分片。一个明显的第一个猜测是从QR码尝试“轨道”这个词。这并不令人惊讶!这会显示一个祝贺页面,并显示第一个关键分片:ST-0001-a36e904f9431ff6b18079881a20af2b3403b86b4a6bace5f3a6a47e945b95cce937c415bedaad6c86bb86b59f0b1d137442537a8。
现在,我们应该等到4月17日才能从其他城市获得关键#2和#3的线索,但这并不能阻止我利用我们拥有的所有新信息。几年前所有那段时间“玩”notpron(http://notpron.org/notpron/)都会帮助我。
我注意到的第一件事是k1在URL和快速检查,看看是否k2,k3以及k4存在的。我很高兴地看到,无论是k2与k3已经存在,但k4(和任何更高)似乎没有尚未存在。
我注意到的下一件事就是它k2和k3两个完全相同的设置k1,它要求我输入密码来“解密页面”。我认为这是一个奇怪的措辞,因为我期望验证发生在服务器端。我检查了页面源代码,发现显示碎片的实际恭喜页面包含在源代码中(虽然通过密码加密)。
提交密码时运行的源代码如下所示:
略(……)
让我为你打破这个:
document.getElementById('staticrypt-form').addEventListener('submit', function(e) {});
此行正在设置提交解密表单时的事件侦听器。这意味着当提交表单时,将运行函数(e){}内定义的任何代码。
e.preventDefault();
此行并不重要,但只是阻止浏览器在提交表单时执行默认操作。如果未包含此页面,则页面可能会刷新,并且不会继续运行下面的代码。
var passphrase = document.getElementById('staticrypt-password').value;
此行将您在密码框中键入的值读入名为passphrase的变量中。在我们的例子中,这将保持字符串“轨道”(假设这是你输入的)。
encryptedMsg = '13ea059e2490f645da28f5f1529ca...'
我截断了这个,因为它是一个非常长的字符串,但你可以看到上面的完整字符串。这是存储完整加密的密码和congrat页面的HTML。
encryptedHMAC = encryptedMsg.substring(0, 64);
这告诉我们上面的encryptedMsg的前64个字符代表加密的密码短语。这将用于检查我们的密码是否正确。
encryptedHTML = encryptedMsg.substring(64);
这告诉我们加密消息的其余部分是包含分片的congrats页面的实际HTML!
decryptedHMAC=CryptoJS.HmacSHA256(encryptedHTML, CryptoJS.SHA256(passphrase).toString()).toString();
在这里,我们看到我所谓的“加密密码短语”实际上是使用sha256(密码短语)加密的html的HMACSHA256摘要。基本上,如果我们的密码是正确的,那么解密的HMAC将等于encryptedHMAC。
if (decryptedHMAC !== encryptedHMAC) {
alert('Bad passphrase!');
return;
}
在这里,我们可以查看您提供的密码是否能够生成encryptedHMAC。如果密码不正确,那么该页面将显示错误“Bad passphrase!”
var plainHTML = CryptoJS.AES.decrypt(encryptedHTML, passphrase).toString(CryptoJS.enc.Utf8);
document.write(plainHTML);
document.close();
如果密码是正确的,那么它使用它来解密encryptedHTML,然后用新的HTML覆盖页面,这样你就可以看到恭喜页面!
在我看到这个源代码之后,我意识到因为检查密码是否正确是在本地完成的,我可以使用字典攻击来强制执行此操作。我还假设k2和k3的密码短语是英语单词。
我快速搜索可下载的字典英文单词列表并打开一个新的ruby脚本。几分钟后,我有了这个脚本:……
当我在几秒钟内运行这个scrypt它输出:
Passphrase for K3 is blackhole
Passphrase for K2 is cosmos
Passphrase for K1 is orbital
我感到震惊!那很简单 :) 。
我检查了每个密码k2和k3解密的网页,以确保它们是正确的。
希望这有助于您了解我如何在几分钟内获得三个关键分片。
请关注作者在twitter @ johncantrell97 。