如何正確地使用加密與認(rèn)證技術(shù)(3)
0x03 如何攻擊未經(jīng)認(rèn)證的加密
比方說,在登錄到這個(gè)應(yīng)用程序之后,你會(huì)發(fā)現(xiàn)你收到一個(gè)會(huì)話cookie,看起來就像
kHv9PAlStPZaZJHIYXzyCnuAhWdRRK7H0cNVUCwzCZ4M8fxH79xIIIbznxmiOxGQ7td8LwTzHFgwBmbqWuB+sQ==
讓我們改變一個(gè)字節(jié)的第一塊(初始化向量),并反復(fù)發(fā)送我們的新的cookie,直到出現(xiàn)一些變化。應(yīng)該采取共4096次HTTP請(qǐng)求,以嘗試變量IV所有可能的單字節(jié)變化。在上面的例子中,經(jīng)過2405次請(qǐng)求后,我們得到一個(gè)看起來像這樣的字符串:
kHv9PAlStPZaZZHIYXzyCnuAhWdRRK7H0cNVUCwzCZ4M8fxH79xIIIbznxmiOxGQ7td8LwTzHFgwBmbqWuB+sQ==
相比之下,在base64編碼的cookie中只有一個(gè)字符不同(kHv9PAlStPZaZ J vs kHv9PAlStPZaZ Z):
- kHv9PAlStPZaZJHIYXzyCnuAhWdRRK7H0cNVUCwzCZ4M8fxH79xIIIbznxmiOxGQ7td8LwTzHFgwBmbqWuB+sQ==
+ kHv9PAlStPZaZZHIYXzyCnuAhWdRRK7H0cNVUCwzCZ4M8fxH79xIIIbznxmiOxGQ7td8LwTzHFgwBmbqWuB+sQ==
我們存儲(chǔ)在這個(gè)cookie里的原始數(shù)據(jù),是看起來像這樣的數(shù)組:
array(2) {
["admin"]=>
int(0)
["user"]=>
"aaaaaaaaaaaaa"
}
但在僅僅改變初始化向量的一個(gè)字節(jié)之后,我們就能夠改寫我們的閱讀信息:
array(2) {
["admin"]=>
int(1)
["user"]=>
"aaaaaaaaaaaaa"
}
根據(jù)底層應(yīng)用程序的設(shè)置方法,你或許可以翻轉(zhuǎn)一位進(jìn)而提升成為一名管理員。即使你的cookie是加密的。 如果你想再現(xiàn)我們的結(jié)果,我們的加密密鑰是十六進(jìn)制下的:000102030405060708090a0b0c0d0e0f