NewStarCTF Blockchain Week3 wp
空闲做了做NewStarCTF,稍微看了一下blockchain题目,发现非常适合我这种入门级的新手,花时间搞搞还是能做出来的(直接秒的大佬请无视QAQ)。本来就一直想找个契机入门blockchain,现在把我的捣鼓路程做一下详细的记录。
第一个题Checkin把做题步骤写得细一点,后面的题目就不啰嗦啦。
Checkin
先nc上去看看嘞。

有四个选项。首先创建一个账户部署题目合约。

但是部署合约需要花费ether,我们需要向生成的账户中转一些ether。怎么转呢?首先你需要打开Remix,以及安装Metamask插件(具体安装使用方法可以自行搜索,网上很多)。然后打开你的Metamask,创建一个账户。

新建的账户是没有eth的(我这里已经领取并用过了)。注意,网络选择Goerli测试网络,然后去题目给出的Goerli水龙头:https://goerlifaucet.com/. 输入你的账户地址即可免费领取0.1个Goerli测试币(每24小时可领一次)。
领完之后过一小会儿刷新一下,0.1ether应该到账了。然后给题目生成的账户里转0.003个ether。

转账成功后去题目中的功能2部署合约。

得到合约地址和该交易的hash(可以去etherscan确认)。
准备工作完成,用功能4看一下合约源码。
1 | pragma solidity 0.8.7; |
内容很简单,我们只需要把合约中的greeting变量通过set函数更改为”HelloNewstarCTF”即可。
接下来打开Remix,根据源码创建一个合约文件并编译,然后在depoly中作以下配置:

注意environment选择Metamask,账户就会同步你的Metamask账户。然后输入题目部署好的合约地址,并点击At Address。然后在下方可以对合约的函数进行调用。

set函数是写内容,需要支付费用。我们填上所需的字符串,然后点击标签进行调用。会弹出Metamask插件进行支付,确认即可(交易明细可以根据交易哈希去etherscan查看)。
然后调用isSolved可以看到返回true了。

去功能3输入你的token即可获取flag。

guess number
nc上去先拿源码:
1 | pragma solidity ^0.4.23; |
这里set_number由于onlyOwner的修饰器,我们无法调用,只能调用guess函数。因此只能去找到number的值。
利用题目描述给出的地址去etherscan查看。点进该合约的第一条交易,进入State选项卡下。

可以看到这里一个存储值发生过变化,这里即是我们需要的number。
然后hex转一下十进制。在Remix中调用给出合约地址中的guess函数,将guess交易的hash提供到系统中即可获得flag。

the chosen one
老样子,有源码先看源码。其它的跟之前一样就不再多说了。
1 | pragma solidity ^0.4.24; |
题目要求调用者地址的末位为0xabcd。我们用题目提示中给出的vanity-eth工具。

跑一会儿即可得到满足需求的地址,包括私钥。然后我们向该地址转一点ether(用于合约调用的费用),并在Metamask上登录并切换到该账户,连接上Remix。
最后先调用chooseone,再调用getflag,提交getflag的交易hash即可。

NewStarCTF Blockchain Week3 wp