Length Extension Attack

在做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



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值