作者:Pinging
一、前言
前几天全国大学生信息安全竞赛初赛如期进行,在这次比赛中也看到了区块链题目的身影。所以我将题目拿来进行分析,并为后续的比赛赛题提供一些分析思路。
由于本次比赛我并没有参加,所以我并没有Flag等相关信息,但是我拿到了比赛中的相关文件以及合约地址并在此基础上进行的详细分析,希望能帮助到进行研究的同学。
二、题目分析
拿到题目后,我们只得到了两个内容,一个是合约的地址,一个是broken
eventSendFlag(uint256flagnum,stringb64email);functionpayforflag(stringb64email)public{require(balanceOf>=10000);emitSendFlag(1,b64email);}
首先我们看这个合约文件。合约开始定义了两个mapping变量——balanceOf与gift,之后为构造函数,以及发送flag的事件。当我们调用payforflag函数并传入使用base64加密的邮件地址之后,需要满足当前账户的余额比10000多。
由这第一手信息我们可以进行一些简单的猜想。这道题目需要领自己的余额大于10000,只有这样才能购买flag。这也是很常见的题目类型。而这个题目十分设计的还是十分巧妙的,我们接着向下看。
版权链全国运营中心主任宣宏量:NFT技术为版权资产标准化分割提供了解决方案:金色财经现场报道,12月29日,第二届可信数字版权生态论坛在北京举办。版权链全国运营中心主任宣宏量现场进行题为《NFT:版权资产数字化与数字版权资产交易》的演讲指出,
可信NFT存在两个方面,来源可信,要求NFT由权威机构签发;技术可信,要求NFT存储在区块链上。当NFT在版权领域应用的时候,和版权资产数字化息息相关。版权资产即著作财产权利,版权证书是版权资产的价值载体和权属证明,版权证书的三要素是著作权人、作品、著作权权利信息(主体+客体+关系)。因此,版权资产数字化,合法路径只能是版权资产证书数字化,即数字版权证书。NFT版权证书=NFT著作权人+NFT作品+著作权权利信息+NFT确权机构+时间戳。我国著作权法规定,著作人身权利不可交易,著作财产权利可以交易。因此,NFT版权证书分为:NFT著作人身权利证书、NFT著作财产权利证书。版权资产确权登记,获得数字版权证书。数字资产解决了资产的标准化问题,制定数字资产发行计划,完成版权资产标准化分割,为每个标准资产生成一份数字版权证书。通过版权链变更原始版权证书著作财产权利信息,生成新证书。在此过程中,NFT技术为版权资产标准化分割,提供了解决方案。[2021/12/29 8:12:20]
根据上面的合约代码,我们并不能得到更多的有用信息。然而此时我们就需要利用合约地址来进一步分析。
声音 | 全国政协委员谈剑锋:未来区块链的应用与发展将体现在四个方向:12月28日,全国政协委员、上海众人网络安全技术有限公司董事长谈剑锋表示,未来区块链的应用与发展将体现在四个方向:一是区块链是价值网络的基础,会逐渐成为未来互联网发展的重要组成部分;二是随着应用场景日益丰富,应用将推动着区块链技术不断完善,区块链与云的结合将更趋紧密;三是区块链虽在数学上具有完备性,但也存在安全问题,未来还需要从应用、工程和管理等层面加强安全,也需要标准提升可信程度;四是未来区块链技术需逐步适应监管政策要求,才能有效的发展应用。(中国网科技)[2019/12/29]
此处合约地址为:0x455541c3e9179a6cd8C418142855d894e11A288c。
我们访问公链信息看看是否能够访问到有价值的信息:
发现出题人并没有公开源代码,只有ABI码,此时我们只能根据此来进行合约逆向来寻找更有用的解题思路。
https://ethervm
varvar0=msg
var1=0x009c;func_01DC();stop();}elseif(var0==0x66d16cc3){//Dispatchtableentryforprofit()var1=msg
声音 | 委内瑞拉总统马杜罗:每两个月向全国23个州发放Petro:据CryptoNews报道,委内瑞拉总统马杜罗(icolas Maduro)宣布,中央政府将每两个月向该国的23个州,每个州发放价值54.37万美元的国有石油支持的Petro加密货币。马杜罗在电视讲话中表示,他将督促每八周向联邦政府发放100万个Petro代币(约合23640美元),以提高石油代币的使用人数。[2019/10/17]
var1=0x009c;profit();stop();}elseif(var0==0x6bc344bc){//Dispatchtableentryfor0x6bc344bc(unknown)var1=msg
vartemp0=memory;vartemp1=msg
elseif(var0==0x70a08231){//DispatchtableentryforbalanceOf(address)var1=msg
var1=0x013a;var2=msg
elseif(var0==0x7ce7c990){//Dispatchtableentryfortransfer2(address,uint256)var1=msg
var1=0x009c;var2=msg
全国政协委员金李:区块链作为技术和工具并没有好坏之分,但需要防范别有用心:全国政协委员、北京大学光华管理学院副院长金李表示,金融创新本身带来了很多未来发展的弹性,但如果监管上疏忽,放任市场自己野蛮生长,有可能会成为新的金融风险来源。他以区块链为例说,区块链作为技术、工具,并没有好坏之分,但如果被别有用心的人拿去做危害市场稳定、危害金融安全的事情,那就需要高度防范。[2018/3/12]
elseif(var0==0xa9059cbb){//Dispatchtableentryfortransfer(address,uint256)var1=msg
var1=0x009c;var2=msg
elseif(var0==0xcbfc4bce){//Dispatchtableentryfor0xcbfc4bce(unknown)var1=msg
var1=0x013a;var2=msg
else{revert(memory);}}//0x66d16cc3函数空投函数??functionfunc_01DC(){memory=msg
memory=msg
//利润函数:functionprofit(){memory=msg
全国人大财经委委员李礼辉:应制定常态化数字金融审慎监管制度: 全国人大财经委委员、中国银行原行长李礼辉6日在北京表示,金融不再只是二维的平面世界,而是可以折叠的三维空间。金融制度创新应该完善大数据应用的制度环境,建立统一共享的大信用系统,制定常态化数字金融审慎监管制度,最终实现穿透式监管。李礼辉建议,立足于防止发生系统性金融风险,研究制定虚拟货币监管制度,引导数字金融健康发展正确方向。针对虚拟货币匿名交易,联合研发可行的技术方案,有效管控资金在链上地下的流动。[2018/1/7]
memory=msg
memory=msg
functionfunc_0278(vararg0){memory=msg
varvar0=0xb1bc9a9c599feac73a94c3ba415fa0b75cbe44496bfda818a9b4a689efb7adba;varvar1=0x01;vartemp0=arg0;varvar2=temp0;vartemp1=memory;varvar3=temp1;memory=var1;vartemp2=var30x20;varvar4=temp2;vartemp3=var40x20;memory=temp3-var3;memory=memory;varvar5=temp30x20;varvar7=memory;varvar6=var20x20;varvar8=var7;varvar9=var5;varvar10=var6;varvar11=0x00;if(var11>=var8){label_02FD:vartemp4=var7;var5=temp4var5;var6=temp4&0x1f;if(!var6){vartemp5=memory;log(memory,]);return;}else{vartemp6=var6;vartemp7=var5-temp6;memory=~(0x0100**(0x20-temp6)-0x01)&memory;vartemp8=memory;log(memory,]);return;}}else{label_02EE:vartemp9=var11;memory=memory;var11=temp90x20;if(var11>=var8){gotolabel_02FD;}else{gotolabel_02EE;}}}functionbalanceOf(vararg0)returns(vararg0){memory=0x00;memory=arg0;returnstorage)];}functiontransfer2(vararg0,vararg1){if(arg1<=0x02){revert(memory);}memory=msg
memory=msg
memory=msg
functiontransfer(vararg0,vararg1){if(arg1<=0x01){revert(memory);}memory=msg
memory=msg
memory=msg
functionfunc_0417(vararg0)returns(vararg0){memory=0x01;memory=arg0;returnstorage)];}}
之后我们针对此逆向后的代码进行分析。
我们经过分析发现了如下的public函数:
很明显这是代币合约,并且可以进行转账。而此代码中拥有两个转账函数。并且可以查看余额。
我们具体根据代码对函数详细分析:
首先我们分析编号为0x652e9d91的func_01DC()函数。
首先合约将内存切换到0x01位置,此处为:mapping(address=>uint)publicgift;
memory=msg
不知用户是否发现,我们就看到了漏洞点了,这是一个典型的溢出漏洞。
根据作者给出的代码,我们发现其具体余额是使用uint定义的,由于uint的位数是有限的,并且其不支持负数。所以当其负数溢出时就会变成一个很大的正数。
而根据我们的transfer2函数内容,我们知道:require(balance(msg.sender)-arg1>=0);。此句进行判断的时候是将用户余额减去一个arg1来判断是否大于0的。而如果arg1设置一个比较大的数,那么balance(msg.sender)-arg1就会溢出为一个非常大的数,此时就成功绕过了检测并且转账大量的代币。
所以我们可以利用此处的整数溢出来进行题目求解,然而在分析的过程中我又发现了另一个解法。
如果做题人没有发现此处的漏洞点,我们可以利用常规做法来进行求解。
根据给出的flag函数我们知道,我们只需要余额>10000即可,那么我们可以发现,我们的profit函数可以给我们不断的新增钱。
根据我们的分析,我们需要令合约余额==1并且gitf==1,此时即可调用profit()来将余额,调用后余额为2,gift为1。这时候将余额转给第二个账户,余额就又变成1了,就又可以调用profit()函数。这样不断给第二个用户转账,转账10000次即可。
三、漏洞利用技巧
此处我们介绍漏洞利用的技巧。
首先我们需要拥有两个钱包地址。
此时我们令Addr1调用func_01DC()函数领取1个代币以及1个gift。
之后我们调用profit领取一个代币。此时余额为2,gift为1。
由于transfer2需要余额大于2才能调用,所以我们首先令Addr2同样执行上面的两步。此时两个钱包均有余额为2。
这时候Adde1调用transfer给Addr2转账两个代币,此时Addr余额为0,Addr2为4。
之后Addr2就可以调用transfer2给Adde1转账一个非常大的金额。达到溢出效果。此时Addr1与Addr2均拥有了大量的代币。任意地址均可以调用flag函数。
具体的交易日志如下:
此时flag就被调用发送到用户账户上了。
四、总结
本次题目非常巧妙,如果后面的同学想直接查看交易日志是非常难通过一个账户来进行跟踪的。并且本题目没有公布合约,所以考验逆向能力。但是只要逆出来后就是一道比较简单的题目,没有完全逆出来的同学也可以使用常规做法进行不断转账来使余额满足要求。希望本文对大家之后的研究有所帮助。欢迎讨论。
标签:EMOMEMMORMEMOJustCarbon Removalmeme币有哪些B4 Flash MemoryMemopark
去做假设,而不要做预测来自币市小姐姐00:0013:332018年马上就要过去,这一年你们收获了什么.
1900/1/1 0:00:00除了Cosmos外可挖的PoS公链有90多条,但其中很多公链的价值没有得到广泛共识。如果玩家为了40%的回报率投入资金去质押或者做节点商,一年下来币价跌了80%怎么办?得不偿失.
1900/1/1 0:00:00据Coingape消息,2019年5月4日UTC时间12:40,Bitfinex溢价约为320美元,大约是比特币交易所加权平均价格的5%.
1900/1/1 0:00:00由衷敬佩的奇葩项目——Grin来自币市小姐姐00:0012:44最近币圈出现了一个非常“奇葩”的项目,在美国这边的圈子里对这个项目的关注已经持续一段时间了,但可惜的是.
1900/1/1 0:00:00最近如果你还不知道IEO,可能就没法在币圈赚钱。关于概念性问题,可以去其他平台了解。在这个靠套路生存的市场,永远跑得要比别人快.
1900/1/1 0:00:00ThunderCore(TT链)首发火币PrimeLite,百万TT空投活动展开中!为了庆祝ThunderCore(TT链)成为火币PrimeLite第一个合作伙伴,我们将要开展空投活动.
1900/1/1 0:00:00