某60区块链安全之重入漏洞实战记录

区块链安全

文章目录

  • 区块链安全
  • 重入漏洞实战
    • 实验目的
    • 实验环境
    • 实验工具
    • 实验原理
    • 实验内容


重入漏洞实战

实验目的

学会使用python3的web3模块
学会以太坊重入漏洞分析及利用

实验环境

Ubuntu18.04操作机

实验工具

python3

实验原理

以太坊智能合约的特点之一是能够调用和使用其他外部合约的代码。这些合约通常会操作以太币,经常将以太发送到各种外部用户地址。这种调用外部合约或向外部地址发送以太币的操作,需要合约提交外部调用。这些外部调用可能被攻击者劫持,比如,通过一个回退函数,强迫合约执行进一步的代码,包括对自身的调用。这样代码可以重复进入合约,这就是“重入” 的来源。著名的 DAO 黑客攻击事件中就是利用了这种类型的漏洞。
合约可以有一个未命名的函数。这个函数不能有参数也不能有返回值。 如果在一个到合约的调用中,没有其他函数与给定的函数标识符匹配(或没有提供调用数据),那么这个函数(fallback 函数)会被执行。除此之外,每当合约收到以太币(没有任何数据),这个函数就会执行。此外,为了接收以太币,fallback函数必须标记为payable。 如果不存在这样的函数,则合约不能通过常规交易接收以太币。
合约使用 call 函数调用发送以太币时,默认提供所有剩余的 gas。这也给了恶意合约发起重入攻击的条件。
题目环境是测试链,所以需要本地与题目进行交互,可使用python3中的web3模块,通过web3模块的rpc功能与题目交互,从而编写自动化利用脚本。

实验内容

找到合约重入漏洞并形成利用
使用python3的web3模块远程利用漏洞并获取flag
实验地址为nc ip 10002

nc ip 10002连接到题目,输入1,获取部署合约的game account及token
在这里插入图片描述

打开http://ip,输入上述分配的game account,点击Request获取eth
在这里插入图片描述

查看源码
在这里插入图片描述
漏洞主要在于 withdraw() 函数,合约在进行提币时,使用 require 依次判断提币账户是否拥有相应的资产,随后使用 msg.sender.call.value(amount) 来发送 Ether ,处理完成后相应修改用户资产数据

在提币的过程中,存在一个递归 withdraw 的问题(因为 -=_amount 在转账之后),攻击者可以部署一个包含恶意递归调用的合约将公共钱包合约里的 Ether 全部提出

其中,转账使用的是 address.call.value()() 函数,传递了所有可用 gas 供调用,是可以成功执行递归的前提条件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

python3 exp.py

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/196972.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

若依前后端分离版,快速上手

哈喽~大家好,这篇来看看若依前后端分离版,快速上手(肝了挺久的)。 🥇个人主页:个人主页​​​​​ 🥈 系列专栏:【Springboot和Vue全栈开发】…

Spring Boot - filter 的顺序

定义过滤器的执行顺序 1、第一个过滤器 import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; impor…

⑩③【MySQL】详解SQL优化

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ SQL优化 ⑩③【MySQL】了解并掌握SQL优化1. 插…

【C++】类与对象(上)

目录 1. 面向过程和面向对象初步认识 2. 类的引入 3. 类的定义 4. 类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化 7. 类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 7.3 结构体内存对齐规则 8. this指针 8.1 this指…

大数据毕业设计选题推荐-机房信息大数据平台-Hadoop-Spark-Hive

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

OpenGL 坐标投影与反投影(Qt)

文章目录 一、简介1.1投影1.2反投影二、应用代码三、实现效果参考资料一、简介 在学习OpenGL一段时间之后,我们都会了解坐标的转换过程,如下图所示: 1.1投影 正如图中所述,OpenGL将一个3D坐标投影到一个2D空间主要有以下几个步骤,这也是我们比较熟知的几个步骤: 现实局部…

Java拼图游戏

运行出的游戏界面如下: 按住A不松开,显示完整图片;松开A显示随机打乱的图片。 User类 package domain;/*** ClassName: User* Author: Kox* Data: 2023/2/2* Sketch:*/ public class User {private String username;private String password…

UE 调整材质UV贴图长宽比例

首先,为什么要先减去0.5呢,因为缩放的贴图中心在0,0原点,以这个点缩放效果是这样: 它缩放的图案不会在正中间,因为是以0,0点进行缩放的 以这个图的箭头去缩放图片的,所以不能使得缩放后的图片放在正中心 那…

物联网AI MicroPython学习之语法UART通用异步通信

学物联网,来万物简单IoT物联网!! UART 介绍 模块功能: UART通过串行异步收发通信 接口说明 UART - 构建UART对象 函数原型:UART(id, baudrate,bits, parity,stop, tx, rx)参数说明: 参数类…

一文总结MySQL的指令是如何工作的

当你输入一条MySQL指令时候有没有想过会发生什么? 建立连接 首先你得先连到数据库上才行,这又分为长连接和短链接,短链接就是你查询一次就断开连接,长连接是你可以多次查询直到主动断开连接(也可能被杀死进程&#x…

设计模式—结构型模式之外观模式(门面模式)

设计模式—结构型模式之外观模式(门面模式) 外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。 例子 我们的电脑会有很多 组件&am…

AJAX入门Day01笔记

Day01_Ajax入门 知识点自测 如下对象取值的方式哪个正确? let obj {name: 黑马 }A: obj.a B: obj()a 答案 A选项正确 哪个赋值会让浏览器解析成标签显示? let ul document.querySelector(#ul) let str <span>我是span标签</span>A: ul.innerText str B: ul…

java 访问sqlserver 和 此驱动程序不支持jre1.8错误

sqlserver数据如下&#xff1b; TestSQL.java&#xff1b; import java.sql.*;public class TestSQL {public static void main(String[] args) throws ClassNotFoundException, SQLException {String driverName "com.microsoft.sqlserver.jdbc.SQLServerDriver";…

【机器学习算法】机器学习:支持向量机(SVM)

转载自&#xff1a; 【精选】机器学习&#xff1a;支持向量机&#xff08;SVM&#xff09;-CSDN博客 1.概述 1.1&#xff0c;概念 支持向量机&#xff08;SVM&#xff09;是一类按监督学习方式对数据进行二元分类的广义线性分类器&#xff0c;其决策边界是对学习样本求解的最…

Android 弹出自定义对话框

Android在任意Activity界面弹出一个自定义的对话框&#xff0c;效果如下图所示: 准备一张小图片&#xff0c;右上角的小X图标64*64&#xff0c;close_icon.png&#xff0c;随便找个小图片代替&#xff1b; 第一步&#xff1a;样式添加&#xff0c;注意&#xff1a;默认在value…

与博主交流

我是一个性格比较随和且有些内敛的人&#xff0c;喜欢与人交流技术。 如果你有一些问题想与我交流&#xff0c;请联系我。 交流说明&#xff1a;请直接描述你的需求。

Kubernetes1.28.X 集群安装

1、环境准备 准备2台虚拟机&#xff0c;安装集群一律使用内网ip通信&#xff0c;相关配置文件一律配置内网ip。 ip别名用途192.168.0.193kubernetes-master.openlab.cn主节点&#xff0c;harbor仓库192.168.0.194kubernetes-work.openlab.cnwork节点 hostnamectl set-hostna…

2023年咸阳市《网络建设与运维》赛题解析------四、安全配置

安全配置 说明:IP地址按照题目给定的顺序用“ip/mask”表示,IPv4 any地址用0.0.0.0/0,IPv6 any地址用::/0,禁止用地址条目,否则按零分处理。 1.FW1配置IPv4 nat,实现集团产品1段IPv4访问Internet IPv4,转换ip/mask为200.200.200.16/28,保证每一个源IP产生的所有会话将…

组合模式 rust和java的实现

文章目录 组合模式介绍实现javarsut 组合模式 组合模式&#xff08;Composite Pattern&#xff09;&#xff0c;又叫部分整体模式&#xff0c;是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象&#xff0c;用来表示部分以及整体层次。这种类型的设计…

【vue实战项目】通用管理系统:首页

前言 本文为博主的vue实战小项目系列中的第三篇&#xff0c;很适合后端或者才入门的小伙伴看&#xff0c;一个前端项目从0到1的保姆级教学。前面的内容&#xff1a; 【vue实战项目】通用管理系统&#xff1a;登录页-CSDN博客 【vue实战项目】通用管理系统&#xff1a;封装to…