【2022Paradigm.ctf】random writeup

这篇具有很好参考价值的文章主要介绍了【2022Paradigm.ctf】random writeup。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

介绍

区块链智能合约相关题目,挺有意思,简单分享。

题目

题目内包含两个链接:
https://github.com/paradigmxyz/paradigm-ctf-infrastructure
对应后端服务搭建相关,只看eth-challenge-base目录即可。
random.zip,合约代码内容,也是题目关键,合约代码贴在后面。

实现&分析

nc连接返回三个选项

1 - launch new instance
2 - kill instance
3 - get flag

1:表示启动一个实例,就是具体实现见后端代码,我理解就是部署了智能合约,会返回以下几个参数:
uuid:唯一标示,实例校验使用。
rpc endpoint: 理解为智能合约节点地址,通过该地址可以访问智能合约。
private key: 钱包地址私钥
setup contract: 智能合约的地址。
2:删掉当前实例。
3:返回flag。

返回flag的前提

moectf2023,区块链,HackerGame,区块链,ctf,智能合约
前面校验不细讲,关键是这里。
查看具体代码是:

def is_solved_checker(web3: Web3, addr: str) -> bool:
    result = web3.eth.call(
        {
            "to": addr,
            "data": web3.sha3(text="isSolved()")[:4],
        }
    )
    return int(result.hex(), 16) == 1

调用合约Setup.isSolved返回true。

思路

两个合约代码如下:

contract Setup {

    Random public random;

    constructor() {
        random = new Random();
    }

    function isSolved() public view returns (bool) {
        return random.solved();
    }
}
contract Random {

    bool public solved = false;

    function _getRandomNumber() internal pure returns (uint256) {   // chosen by fair dice roll.
        return 4;                                                   // guaranteed to be random.
    }
    
    function solve(uint256 guess) public {
        require(guess == _getRandomNumber());
        solved = true;
    }
}

从代码看,基本就是调用Random.solve(4),即解决问题。

因此实现先获取返回的合约地址拿到当前的Setup实例(个人理解,不一定对)

contract2 = web3.eth.contract(address=contract, abi=config["abi"])

接着获取其中的random对象,也就是Random实例的合约地址,

randomAddress = contract2.functions.random().call()

然后调用random.solve(4)。

contract1 = web3.eth.contract(address=randomAddress, abi=config1["abi"])
result = contract1.functions.solve(4).transact()

这里调用不能像上面一样调用call,是因为带有参数需要调用transact,正常交易还需要往里面填入gas才能发起(个人理解)。

writeup


from socket import *
from web3 import Web3
from eth_utils import *
from eth_typing import *

uuid = "XXXX"
url = "http://34.66.135.107:8545/" + uuid
pkey = "xxxx"
contract = "xxxx"
ticket = "xxxx"
header = {'Content-type':'application/json'}

config = {
    "abi":
[
	{
		"inputs": [],
		"stateMutability": "nonpayable",
		"type": "constructor"
	},
	{
		"inputs": [],
		"name": "isSolved",
		"outputs": [
			{
				"internalType": "bool",
				"name": "",
				"type": "bool"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "random",
		"outputs": [
			{
				"internalType": "contract Random",
				"name": "",
				"type": "address"
			}
		],
		"stateMutability": "view",
		"type": "function"
	}
]
}
config1 = {"abi":[
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "guess",
				"type": "uint256"
			}
		],
		"name": "solve",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "solved",
		"outputs": [
			{
				"internalType": "bool",
				"name": "",
				"type": "bool"
			}
		],
		"stateMutability": "view",
		"type": "function"
	}]
}

web3 = Web3(Web3.HTTPProvider(url))
contract2 = web3.eth.contract(address=contract, abi=config["abi"])
result = contract2.functions.isSolved().call()
print(result)
randomAddress = contract2.functions.random().call()
print(randomAddress)

contract1 = web3.eth.contract(address=randomAddress, abi=config1["abi"])
# result = contract1.functions.solve(4).call()
result = contract1.functions.solve(4).transact()
print(result)
result = contract1.functions.solved().call()
print(result)

总结

一直没有时间学习智能合约这块,通过比赛反而带动学习兴趣,也找到一些学习的方向。文章来源地址https://www.toymoban.com/news/detail-734835.html

到了这里,关于【2022Paradigm.ctf】random writeup的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【USMA】N1CTF2022-praymoon

    本题主要利用 USMA 解题,当然还有其他做法,暂时不表 启动脚本就不看了,该开的保护都开了。看下文件系统初始化脚本: 可以看到,这里设置了  echo 1 /proc/sys/vm/unprivileged_userfaultfd,这是因为该题目的内核版本为 5.18.10,而 userfaultfd 在 5.11 就限制了普通用户的使用,这也

    2024年02月08日
    浏览(35)
  • [区块链安全-CTF Protocol]区块链智能合约安全实战(已完结)

    这次是尝试CTF-PROTOCOL的题目,望与诸君共勉。后面应该会参考DeFiHackLabs推出对一些列攻击的POC手写和解析,同时还要参加Hackathon。大家一起努力! 题目分析: HiddenKittyCat 合约中,核心部分为: 可以知道kitty存储的位置是由 keccak256(abi.encodePacked(block.timestamp, blockhash(block.number

    2024年02月15日
    浏览(39)
  • 2022CTF培训(九)MIPS PWN环境搭建&MIPS PWN入门

    附件下载链接 在 ARM PWN 环境搭建 的基础上,首先安装具备MIPS交叉编译gcc与MIPS程序动态链接库: 然后就可以正常运行 将 mipsel 添加到 qqemu-binfmt,这样 linux 可以根据文件头找相应的程序运行: 栈溢出 分析汇编可知,返回值存储在 $sp + 0x3C 处,而 buf 起始位置在 $sp + 0x18 处,

    2024年02月11日
    浏览(47)
  • 中国顶级CTF竞赛网络安全大赛--2022网鼎杯re2解题思路

    PEID查不出来,用了die,显示是UPX3.96的壳,用了脱壳机,脱不了,只能手动脱壳,拖入x64dbg,F9运行到程序领空,很明显的特征,push: 无脑使用ESP定律大法,对ESP下硬件访问断点: F9运行,在pop处停下: F4运行到下面第一个jmp,F8,进去又是一个jmp,继续F8,到达OEP: 使用x

    2023年04月22日
    浏览(43)
  • 2023蓝帽杯初赛ctf部分题目

    LovePHP 打开网站环境,发现显示出源码  来可以看到php版本是7.4.33 简单分析了下,主要是道反序列化的题其中发现get传入的参数里有_号是非法字符,如果直接传值传入my_secret.flag,会被php处理掉 绕过 _ 的方法     对于 __ 可以使用 [, 空格, + , . 。都会被处理为 _;  这是因

    2024年02月10日
    浏览(36)
  • 吾爱2023新年红包题第六题 (CTF)

    直接开整: 直接顺着方法找就行; if (84.0d = d d = 99.0d) : 这个太可怕了,播放细狗mp3; if (100.0d = d d = 101.0d) 当分贝在这个区间 z = true 才能往下走 if (z) z=true 弹窗 “快去找flag吧”, 并调用 write_img(); 写aes.png图片 搞开看看目录下是啥玩意: 图片? img文本 base64? 这些 native 方法

    2024年02月04日
    浏览(38)
  • 2023蓝帽杯半决赛电子取证+CTF部分题解

    非预期 先将data.xlsx中到的每一列都按照大小排序 之后将加粗的字体的背景颜色改为黑色

    2024年02月07日
    浏览(39)
  • 2023年2月国内外CTF比赛时间汇总来了!

    从事网络安全行业工作,怎么能不参加一次CTF比赛了! 小编作为一个CTF比赛老鸟,以每次都能做出签到题为荣!图片 下面给大家分享一下2月份CTF比赛时间,比赛按时间先后排序,国内国外的都有哦! 文章末尾有ctf部落群 12月13日,在“首届全球数字贸易博览会·数字安全主

    2023年04月12日
    浏览(76)
  • GDOU-CTF-2023新生赛Pwn题解与反思

    因为昨天学校那边要进行天梯模拟赛,所以被拉过去了。 16点30分结束,就跑回来宿舍开始写。 第一题和第二题一下子getshell,不用30分钟,可能我没想那么多,对比网上的WP,自己和他们有点不太一样,比较暴力。 大概17点10的时候,写第三题,可能自己第一次遇到随机数问

    2023年04月17日
    浏览(57)
  • *CTF 2023 web jwt2struts 题解wp

    根据题目名字猜测,这题考察jwt和Struts2 包里面果然有一个cookie 验证了,是jwt eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwiZXhwIjoyMDA2MjI1MjgxfQ.F7vOtdqg48M1DYK4tVZywTipIYDqKfsBSju7ekLSecU 我们的目标应该是把 user 改成 admin 首先,直接修改试试,结果是不行的。 再尝试一下爆破: 也是不行

    2024年02月14日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包