Blockchain 智能合约作为全面授权呼叫回退

Blockchain 智能合约作为全面授权呼叫回退,blockchain,ethereum,solidity,smartcontracts,web3js,Blockchain,Ethereum,Solidity,Smartcontracts,Web3js,我正在大学里为我的讲座练习智能合约中的一些漏洞 我正在实践的合同是: contract Company is CompanyInterface { address public ceo; ... function setCeo(address newCeo){ ceo = newCeo; } ... } contract MainCompany is CompanyInterface { address public ceo;

我正在大学里为我的讲座练习智能合约中的一些漏洞

我正在实践的合同是:

contract Company is CompanyInterface {
    address public ceo;
    ...
    function setCeo(address newCeo){
        ceo = newCeo;
    }
    ...
}

contract MainCompany is CompanyInterface {
    address public ceo;
    address public lib; // address of Company contract
    ...
    function() payable external {
        if(!lib.delegatecall(msg.data)) {
          revert();
        }
    }
    ...
}
在这里,我试图让自己成为这家主要公司的首席执行官。然而,我不知道如何在这里给setCeo打电话。正如我所知,当攻击者调用MainCompany.setCeo(攻击者)时,MainCompany的回退功能应该在MainCompany合同中找不到该功能(setCeo)时触发。然而,这并没有发生

我的方法是创建一个攻击者契约。在该合同中,我创建了一个函数,它执行以下操作:

<addressOfMainCompany>.call.value(1)(bytes4(keccak256("setCeo(address)")), address(0x4b9...));
.call.value(1)(字节4(keccak256(“setCeo(地址)”)),地址(0x4b9…);
但首席执行官还是老样子。在这里更换主要公司ceo的正确方法是什么

谢谢