某60区块链安全之JOP实战一学习记录

区块链安全

文章目录

  • 区块链安全
  • Jump Oriented Programming实战一
  • 实验目的
  • 实验环境
  • 实验工具
  • 实验原理
  • 实验内容
  • Jump Oriented Programming实战一 实验步骤
  • 分析合约源代码漏洞


Jump Oriented Programming实战一

实验目的

学会使用python3的web3模块
学会分析以太坊智能合约中中Jump Oriented Programming(JOP)问题
深刻理解EVM字节码
找到合约漏洞进行分析并形成利用

实验环境

Ubuntu18.04操作机

实验工具

python3

实验原理

JOP 的思想和 ROP 是相似的:串联起一个个小的代码片段(gadget),达成一定的目的。
涉及到 JOP 的是如下三个字节码:0x56 JUMP 0x57 JUMPI 0x5B JUMPDEST,在 EVM 中的无条件跳转 JUMP 和条件跳转 JUMPI 的目的地都必须是 JUMPDEST,这点和 ROP 可以任选返回地址不同。
通常需要用到 JOP 的合约在编写时都夹杂着内联汇编的后门,本实验通过jop控制程序控制流,实现特定目的。

实验内容

合约中内置了简单的JOP问题,找到合约漏洞并形成利用,触发合约的SendFlag(address addr)事件即可
使用python3的web3模块远程利用漏洞并获取flag
实验地址为nc ip 10015

Jump Oriented Programming实战一 实验步骤

获取合约地址和合约源代码
nc ip 10015连接到题目,输入1,获取部署合约的game account及token
在这里插入图片描述

打开http://ip,输入上述分配的game account,点击Request获取eth

在这里插入图片描述
nc ip 10015连接到题目,输入2,获取部署合约的地址及new token
在这里插入图片描述

nc ip 10015连接到题目,输入4,获取合约源代码,或者在题目附件找到合约源代码
在这里插入图片描述

分析合约源代码漏洞

pragma solidity ^0.4.23;

contract ETH15 {
   

    address private owner;
    bytes4 internal constant SET = bytes4(keccak256('fifth(uint256)'));
    event SendFlag(address addr);

    struct Func {
   
        function() internal f;
    }

    constructor() public payable {
   
        owner = msg.sender;
    }

    modifier onlyOwner {
   
        require(msg.sender == owner);
        _;
    }

    // 0x4b64e492
    function execute(address _target) public payable{
   
        require(_target.delegatecall(abi.encodeWithSelector(this.execute.selector)) == false, 'unsafe execution');

        bytes4 sel; 
        uint val;

        (sel, val) = getRet();
        require(sel == SET);

        Func memory func;
        func.f = gift;
        assembly {
    
            mstore(

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Windows】永久屏蔽系统更新

永久关闭电脑更新服务 操作思路: 第一步 winR 输入 services.msc 回车 进入服务管理窗口第二步 进入窗口后 找到 w 开头的文件夹 并找到Windows Update 双击打开 Windows Update 将启动类型(E) 改为禁用 上方的 “常规” “登录” “恢…

异常处理 springboot

全局异常处理 RestcontrollerAdvice Exceptonhandler package com.it.Exception;import com.it.pojo.Result; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice;/*全局异常处理器…

[HTML]Web前端开发技术7(HTML5、CSS3、JavaScript )CSS的定位机制——喵喵画网页

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

webGL开发虚拟实验室技术方案

开发虚拟实验室涉及到模拟实际实验环境和过程,同时提供用户互动性和学习体验。以下是一个可能的技术方案,用于实现这样的虚拟实验室,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合…

事务管理 springboot

事务是一组操作的集合 它是一个不可分割的工作单位 这些操作 要么同时成功要么同时失败 Spring事务管理 #Spring事务管理日志 logging: level: org.springframework.jdbc.support.JdbcTransactionManager: debug

内网穿透的应用-公网环境下移动端通过群晖管家+cpolar远程管理家中本地局域网内黑群晖设备

白嫖怪狂喜!黑群晖也能使用群晖管家啦! 文章目录 白嫖怪狂喜!黑群晖也能使用群晖管家啦!1.使用环境要求:2.下载安装群晖管家app3.随机地址登陆群晖管家app4.固定地址登陆群晖管家app 自己组装nas的白嫖怪们虽然也可以通…

基于SSM框架的《超市订单管理系统》Web项目开发(第五天)供应商管理,增删改查

基于SSM框架的《超市订单管理系统》Web项目开发(第五天)供应商管理,增删改查 上一次我们实现了多表关联查询,还有分页显示数据的功能。还完善了用户管理这一模块。 因此今天我们需要完成的是供应商管理模块,这一模块…

简单了解传输层协议之TCP和UDP

目录 一、什么是端口号? 二、TCP协议 2.1 TCP报文格式 2.2 三次握手 2.3 四次挥手 2.4 窗口流量控制 三、UDP协议 3.1 UDP报文格式 3.4 传输过程 一、什么是端口号? 我们自己的一台电脑上有时可能会同时运行多个进程软件来进行上网。那么当网络上的服务器响应我们电…

3 开发环境搭建

一、Ubuntu和Windows文件互传 ① 开启Ubuntu的FTP服务: 下载vsftpd:sudo apt-get install vsftpd; 打开vsftpd.conf:sudo nvim /etc/vsftpd.conf; 确保这两行代码没有被注释: 之后重启FTP服务: ② Windows下载FTP客…

LinuxBasicsForHackers笔记 -- 控制文件和目录权限

对于每个文件和目录,我们可以指定文件所有者、特定用户组以及所有其他用户的权限状态。 不同类型的用户 在Linux中,root用户是拥有一切权力的。 root 用户基本上可以在系统上执行任何操作。 系统上的其他用户具有有限的能力和权限,并且几乎…

为什么 SQL 不适合图数据库

背景 “为什么你们的图形产品不支持 SQL 或类似 SQL 的查询语言?” 过去,我们的一些客户经常问这个问题,但随着时间的推移,这个问题变得越来越少。 尽管一度被忽视,但图数据库拥有无缝设计并适应其底层数据结构的查询…

nodejs微信小程序+python+PHP就业求职招聘信息平台的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之文件管理(1)》(22)

《Linux操作系统原理分析之文件管理(1)》(22) 7 文件管理7.1 文件与文件系统7.1.1 文件7.1.3 文件系统及其功能 7.2 文件的组织结构7.2.1 文件的逻辑结构7.2.2 文件的物理结构一、顺序结构(顺序文件或连续文件&#xf…

微信小程序uni.chooseImage()无效解决方案

Bug场景: 微信小程序在上传图片时可以通过 uni.chooseImage()方案进行上传,这里不再赘述具体参数。一直项目都可以正常使用,突然有一天发现无法使用该方法,于是查了一下,发现是用户隐私协议问题。故记录一下解决方案。…

Linux中的网络配置

本章主要介绍网络配置的方法 网络基础知识查看网络信息图形化界面修改通过配置文件修改 1.1 网络基础知识 一台主机需要配置必要的网络信息,才可以连接到互联网。需要的配置网络信息包括IP、 子网掩码、网关和 DNS 1.1.1 IP地址 在计算机中对IP的标记使用的是3…

逻辑回归 使用Numpy实现逻辑回归

使用Numpy实现逻辑回归 sigmoid 函数 g ( z ) 1 ( 1 e − z ) g(z)\frac{1}{(1e^{−z} )} g(z)(1e−z)1​ # sigmoid 函数 def sigmod(z):return 1/(1np.exp(-z))线性计算与梯度下降 J ( θ ) − 1 m [ ∑ i 1 m y ( i ) l o g ⁡ ( h θ ( x ( i ) ) ) ( 1 − y ( i ) …

【计算机网络笔记】物理层——物理介质

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

Linux socket编程(10):UDP详解、聊天室实现及进阶知识

首先来回顾以下TCP的知识,TCP是一种面向连接的、可靠的传输协议,具有以下特点: TCP通过三次握手建立连接,确保通信的可靠性和完整性使用流控制和拥塞控制机制,有效地调整数据传输的速率,防止网络拥塞TCP提…

redis的keys命令和scan命令性能对比

项目场景 Redis的keys *命令在生产环境是慎用的,特别是一些并发量很大的项目,原因是Redis是单线程的,keys *会引发Redis锁,占用reids CPU,如果key数量很大而且并发是比较大的情况,效率是很慢的&#xff0c…