php – 解密.ASPXAUTH Cookie WITH保护=验证

前端之家收集整理的这篇文章主要介绍了php – 解密.ASPXAUTH Cookie WITH保护=验证前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有一段时间,我一直在尝试破译ASP .ASPXAUTH cookie并使用 PHP进行解密.我的理由很大,我需要这样做,别无选择.在PHP到目前为止,我已经成功地设法读取了这个cookie的数据,但是加密时似乎并没有这样做.无论如何,在这里…

首先您需要更改您的服务器Web.config文件(保护需要设置为验证):

<authentication mode="None">
        <forms name=".ASPXAUTH" protection="Validation" cookieless="UseCookies" timeout="10080" enableCrossAppRedirects="true"/>
    </authentication>

然后在同一个域的PHP脚本中,您可以执行以下操作来读取数据,这是一个非常基本的例子,但是是证明:

$authCookie = $_COOKIE['_ASPXAUTH'];
echo 'ASPXAUTH: '.$authCookie.'<br />'."\n";//This outputs your plaintext hex cookie
$packed = pack("H*",$authCookie);
$packed_exp = explode("\0",$packed);//This will separate your data using NULL
$random_bytes = array_shift($packed_exp);//This will shift off the random bytes
echo print_r($packed_exp,TRUE); //This will return your cookies data without the random bytes

这会破坏Cookie,或至少是未加密的数据:

现在我知道我可以获取数据,我从我的Web.config中删除了’protection =“验证”’字符串,我试图使用PHP mcrypt解密它.我尝试过无数次的方法,但这里是一个有希望的例子(失败)…

define('ASP_DECRYPT_KEY','0BC95D748C57F6162519C165E0C5DEB69EA1145676F453AB93DA9645B067DFB8');//This is a decryption key found in my Machine.config file (please note this is forged for example)
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_CBC),MCRYPT_RAND);
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,ASP_DECRYPT_KEY,$authCookie,MCRYPT_MODE_CBC,$iv);//$authCookie is the pack()'d cookie data

然而这失败了.我已经尝试了IV的变化,所有零@ 16个字节.我尝试了不同的Rijndael大小(128对256).我已经尝试过base64_decode()ing,似乎没有任何工作.我发现这个stackoverflow post here,并开始使用使用sha256使用的键/ iv的变体,但这也不是真的有效.

有人有线索我应该做什么?

我不知道如何在.NET AuthCookies中进行加密,但是我可以尝试回答.

假设加密发生在AES CBC-IV模式下,随机生成IV,您需要首先找出IV在哪里.

显示代码片段无法正常工作,因为您将生成随机的IV(将不正确).话虽如此,即使你的IV错误,在CBC模式下,你将只有前16个字节的解密密文“乱码”,其余的将正确解密 – 你可以使用这个作为一个测试来知道你是否正确地休息.在实践中,当使用随机IVs时,它很可能是密文之前的.为了检查这是否正确,可以尝试检查len(ciphertext)= len(明文)16.这意味着最可能的前16个字节是你的IV(因此它应该在尝试解密之前从密文中删除它).

同样在你的代码片段中,似乎你使用的是ascii-string,而它应该是一个字节数组.尝试:

define('ASP_DECRYPT_KEY',hex2bin('0BC95D748C57F6162519C165E0C5DEB69EA1145676F453AB93DA9645B067DFB8'));

此外,这似乎是一个32字节的密钥,所以你需要使用AES-256.我不知道authcookie是怎么样的,但是如果它是base64编码的,那么你还需要先解码它,这显然是很重要的.

希望这可以帮助!

注意:我不建议在重要的生产代码中执行此操作,因为如果您尝试实现即使是您自己的解密程序,也可能出现许多问题.特别是,我猜测应该有一个MAC标签,你必须在尝试解密之前检查一下,但还有许多其他的事情可能会错误地实现你自己的加密.

原文链接:https://www.f2er.com/php/139581.html

猜你在找的PHP相关文章