かなり長い間、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 を試しましたが、何も機能していないようです。このスタックオーバーフローの投稿を見つけて、 sha256を使用して作成された key/iv のバリエーションを使用し始めましたが、実際には機能していません。
誰が私が何をすべきか手がかりを持っていますか?