我正在为我在大学的讲座练习智能合约中的一些漏洞。
我正在练习的合同是;
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();
}
}
...
}
在这里,我试着让自己成为MainCompany的首席执行官。但是,我无法弄清楚如何在这里调用setCeo。据我所知,当攻击者调用MainCompany.setCeo(攻击者)时,如果在MainCompany合同中找不到函数(setCeo),则应触发MainCompany的回退函数。但是,它不会发生。
我的方法是创建攻击者合同。在该合同中,我创建了一个执行以下操作的函数;
<addressOfMainCompany>.call.value(1)(bytes4(keccak256("setCeo(address)")), address(0x4b9...));
但是首席执行官仍然是一样的。在这里更改MainCompany首席执行官的正确方法是什么?
由于