今年春秋杯春秋杯出了一到特别的杂项题 还是个从来没接触过的ETH合约的CTF题 通过查找大量文章找到了ETH合约的调用方法 这里详细写出解题过程以便后人学习ETH合约的调用
GameContract题目分析
strange>GameContact
访问题目网站 要求使用ETH钱包地址注册 使用浏览器扩展metamask注册之(这也是为了方便后续对合约函数的调用)
准备好 Rinkeby 测试网络的 ETH 用作手续费转入所注册后给的 ETH 地址中
看到如此大的价格波动 肯定是利用价格波动赚差价了
到这里还不知道GETFLAG的条件 这是一个ETH合约题 所以我们转向ETH合约去看看合约代码写了什么
It's an ETH contract, so we turn to the ETH contract to see what the contract code says.
使用测试网络区块链浏览器查看交易列表 发现了合约地址
区块链浏览器自带的反编译工具 反编译合约代码
审计源码发现一个疑似getflag的函数 (这里面还有一个坑 getflag函数名没有公开 询问主办方才给了函数名 在最后放出了合约的部分源码)
需要使用 10*10^6 个币(1000W)兑换flag 初始有1W币
10*10~6 currency (1000W) required to convert flag with 1W initial
之后就进行股票交易操作来满足题目要求了
After that, stock trading was done to meet the subject's requirements.
通过利用股票价格波动进行频繁买卖操作最终得到了1000W币
A thousand W was eventually obtained through frequent trading operations using stock price fluctuations
合约的调用
下面是对合约函数的调用操作 (看到排行榜有个大佬几亿个币却不会兑换flag太可惜了)
这里用到的工具是 http://remix.ethereum.org/
The tools used here are 这是一个ETH合约开发调试工具 这里用来调用现有的链上合约
打开网站右键新建一个文件 命名为*.sol 例如test.sol
pragma solidity >=0.7.0< 0.9.0;
contract TEST {
functionpayForFlagpublic{ }}
这里只用写出要调用的函数里面不需要写功能 比较像c语言的函数声明 但还有很大的区别 写完一定要ctrl+s保存并编译
}
这个是带传参和返回值的写法
写完函数声明点击左侧Deploy & run transactions
Write function declaration clicks on leftDeploy & run transports
环境选择 Injected Web3
此时metamask扩展会弹出授权窗口 输入密码 授权要操作的ETH账号(这里是股票平台注册时填写的ETH地址所属的钱包账号 )
最后一步展开点击操作按钮 在浏览器钱包弹出的窗口授权 即可调用合约
通过钱包查看交易地址 在区块链浏览器查看交易状态 Status为Success即为调用成功
Checking the transaction address through the wallet, checking the status of the transaction on the block chain browser.
在注册邮箱收取flag
- End -
【技术分享】使用ETW监控冒个进程创建和启动服务以及加载驱动程序
【技术分享】前尘—数据连接池下的至暗之处
【技术分享】从0到1——Hook内核系统调用
戳“阅读原文”查看更多内容返回搜狐,查看更多
strang 责任编辑:
注册有任何问题请添加 微信:MVIP619 拉你进入群
打开微信扫一扫
添加客服
进入交流群
发表评论