首页 > 解决方案 > 哈希长度扩展攻击中的填充导致 php 中的反序列化失败

问题描述

if (isset($_COOKIE['people']) && isset($_COOKIE['signature'])) {
    $serialized_people = $_COOKIE['people'];
    $signature = $_COOKIE['signature'];

    if (hash_equals(sign($serialized_people ), $signature) === FALSE) {
        unset($_COOKIE['people']);
    } else {
        $serialized_people = explode('<x>', $serialized_people );
        $users = array_map('unserialize_safe', $serialized_people );
    }
}

嗨,我需要 lil 帮助解决作业。所以对于这个问题,我得到了'people'和'signature'的cookie,我应该找到一种方法来传递这个代码块并到达最后一个else块。

我在网上阅读的解决方案是使用哈希长度扩展攻击,这似乎是这种情况,除了当我填充我的“人”cookie并将其设置在我的浏览器中时——这段代码将运行,它将尝试签署 urldecoded cookie。我的问题是,由于有大量的填充,这%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%基本上会被 urldecode 成一些奇怪的未知序列化字符,这将导致 unserialize_safe 方法失败。

有什么办法过去吗?

标签: phphashctf

解决方案


推荐阅读