嗨嗨嗨嗨

这次aliyunCTF的Blockchain,考了三个知识点

如果您感兴趣,可以去aliyunCTF尝试一下,比赛结束后7天内,题目环境不会关闭哦

题目

Sources

Public的function只有isSolvedb

isSolved 是本题目标,当 x == 2 && y == 4 时,解题成功。

Untitled

漏洞1 MerkleTree验证叶子时,未检查叶子高度

速览 b function

    function b(
        bytes32[] calldata leafs,
        bytes32[][] calldata proofs,
        uint256[] calldata indexs
    ) public {
        require(leafs.length == proofs.length, "Greeter: length not equal");
        require(leafs.length == indexs.length, "Greeter: length not equal");

        for (uint256 i = 0; i < leafs.length; i++) {
            require(
                verify(proofs[i], leafs[i], indexs[i]),
                "Greeter: proof invalid"
            );
            require(used_leafs[leafs[i]] == false, "Greeter: leaf has be used");
            used_leafs[leafs[i]] = true;
            this.a(i, y);
            y++;
        }
    }

可知, 我们要传入4片leafs叶子 && 4根proofs树枝。

4片叶子不能有重复,且只有验证都通过,才能让 y == 4

题目已经给出了3片叶子

0x81376b9868b292a46a1c486d344e427a3088657fda629b5f4a647822d329cd6a
0x28cac318a86c8a0a6a9156c2dba2c8c2363677ba0514ef616592d81557e679b6
0x804cd8981ad63027eb1d4a7e3ac449d0685f3660d6d8b1288eb12d345ca2331d

还不够,还需要another one.

看一下叶子的verify函数

Powered by Fruition