很长一段时间以来,我一直在尝试破译 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="validation"' 字符串,并尝试使用 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
然而这失败了。我已经尝试了所有零 @ 16 字节的 IV 变体。我尝试了不同的 Rijndael 尺寸(128 对 256)。我试过 base64_decode()ing,似乎没有任何效果。我在这里找到了这个 stackoverflow 帖子并开始使用使用 sha256 制作的 key/iv 的变体,但这也不是真的有效。
有人知道我应该怎么做吗?