以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads

MEM:全國大學生信息安全競賽—區塊鏈題目分析

Author:

Time:1900/1/1 0:00:00

作者:Pinging

一、前言

前幾天全國大學生信息安全競賽初賽如期進行,在這次比賽中也看到了區塊鏈題目的身影。所以我將題目拿來進行分析,并為后續的比賽賽題提供一些分析思路。

由于本次比賽我并沒有參加,所以我并沒有Flag等相關信息,但是我拿到了比賽中的相關文件以及合約地址并在此基礎上進行的詳細分析,希望能幫助到進行研究的同學。

二、題目分析

拿到題目后,我們只得到了兩個內容,一個是合約的地址,一個是broken

eventSendFlag(uint256flagnum,stringb64email);functionpayforflag(stringb64email)public{require(balanceOf>=10000);emitSendFlag(1,b64email);}

首先我們看這個合約文件。合約開始定義了兩個mapping變量——balanceOf與gift,之后為構造函數,以及發送flag的事件。當我們調用payforflag函數并傳入使用base64加密的郵件地址之后,需要滿足當前賬戶的余額比10000多。

由這第一手信息我們可以進行一些簡單的猜想。這道題目需要領自己的余額大于10000,只有這樣才能購買flag。這也是很常見的題目類型。而這個題目十分設計的還是十分巧妙的,我們接著向下看。

昆明:全國首個區塊鏈中心落地發展:金色財經報道,據昆明市人民政府網站消息,昆明現代產業基礎扎實,全國首個區塊鏈中心落地發展。[2021/10/25 20:54:31]

根據上面的合約代碼,我們并不能得到更多的有用信息。然而此時我們就需要利用合約地址來進一步分析。

此處合約地址為:0x455541c3e9179a6cd8C418142855d894e11A288c。

我們訪問公鏈信息看看是否能夠訪問到有價值的信息:

發現出題人并沒有公開源代碼,只有ABI碼,此時我們只能根據此來進行合約逆向來尋找更有用的解題思路。

https://ethervm

varvar0=msg

var1=0x009c;func_01DC();stop();}elseif(var0==0x66d16cc3){//Dispatchtableentryforprofit()var1=msg

var1=0x009c;profit();stop();}elseif(var0==0x6bc344bc){//Dispatchtableentryfor0x6bc344bc(unknown)var1=msg

全國工商聯會員部原部長劉紅路:數字經濟是當下經濟發展的重要形態之一:2020年11月15日,由58COIN主辦,華夏產業經濟研究院、金色財經和幣小白協辦的2020區塊鏈產業生態論壇暨58COIN三周年在成都隆重開啟,全國工商聯會員部原部長、經濟學博士、華夏產業經濟研究院常務副院長兼理事長、北京民營科技促進會理事長劉紅路致開幕詞,劉部長指出數字經濟是當下經濟發展的重要形態之一。國家也支持并推動數字經濟發展,推動數字經濟和實體經濟融合,打造具有國際產業經濟能力的集群。數字經濟需要融合實體經濟,以區塊鏈技術為基礎的數字經濟設施也將得到快速發展,未來區塊鏈應用場景將十分廣泛。[2020/11/15 20:51:28]

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

動態 | 北京青年報:區塊鏈不等于虛擬貨幣 全國整頓開啟:北京青年報今日刊文《區塊鏈不等于虛擬貨幣 全國整頓開啟》,文章表示,隨著區塊鏈技術成為社會關注熱點,被監管部門嚴厲打擊的虛擬貨幣出現死灰復燃勢頭。針對這一新情況,最近兩天,多地監管部門宣布,新一輪清理整頓已經在全國展開。有接近國家互聯網金融風險專項整治小組辦公室(下稱整治辦)人士表示,區塊鏈的內涵很豐富,并不等于虛擬貨幣。目前所有打著區塊鏈旗號關于虛擬貨幣的推廣宣傳活動都是違法違規的。監管部門對于虛擬貨幣炒作和虛擬貨幣交易場所的打擊態度沒有絲毫改變。[2019/11/24]

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

聲音 | 全國政協副主席陳元:借助區塊鏈等實現亞信成員國資源信息共享:金色財經報道,近日在2019亞信金融峰會上,十二屆全國政協副主席、中國開發性金融促進會會長陳元表示,亞信成員國開展務實合作,對促進地區共同繁榮和全球經濟復蘇具有十分重要的意義。為此,他提出:打造包括金融智庫在內的亞信成員國務實合作平臺;堅持規劃先行與融資并重,以融資推動規劃成果落地轉化;構建可靠的亞信信用體系,借助區塊鏈等金融科技力量實現亞信成員國資源信息共享等建議。[2019/11/23]

memory=msg

//利潤函數:functionprofit(){memory=msg

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

動態 | 全國港口第一張區塊鏈電子發票在招商港口蛇口集裝箱碼頭(SCT)上線:據航運交易公布微博, 4月26日上午,招商港口在蛇口集裝箱碼頭(SCT)舉行全國港口第一張區塊鏈電子發票上線儀式。10點50分,SCT副總經理姚勝蘭宣布儀式啟動。10點58分,貨主代表劦福公司總經理曾杰辦理提貨辦單手續并完成微信支付后,全國港口第一張區塊鏈電子發票順利生成。[2019/4/28]

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就被調用發送到用戶賬戶上了。

四、總結

本次題目非常巧妙,如果后面的同學想直接查看交易日志是非常難通過一個賬戶來進行跟蹤的。并且本題目沒有公布合約,所以考驗逆向能力。但是只要逆出來后就是一道比較簡單的題目,沒有完全逆出來的同學也可以使用常規做法進行不斷轉賬來使余額滿足要求。希望本文對大家之后的研究有所幫助。歡迎討論。

Tags:EMOMORMEMOMEMMY Ceremonial EventAMOR幣MEMO幣evmos幣的memo是什么

比特幣價格今日行情
NAN:關于分發4月份GAS、ONG、VTHO、NPXS的公告

親愛的用戶: Binance目前已完成2019年4月份GAS、ONG、VTHO、NPXS的發放,您可以登錄Binance平臺,在用戶中心的分發記錄欄目,查詢自己的分發數量.

1900/1/1 0:00:00
加密貨幣:萊特幣創始人Charlie Lee:萊特幣能到1000美元

據CCN5月1日報道,萊特幣的創始人CharlieLee在最近的一個博客節目中談到了萊特幣的價格、以及比特幣的相關問題,他曾預測萊特幣的價格能達到1000美元.

1900/1/1 0:00:00
比特幣:ONG、ONT 恢復充、提幣服務

親愛的Bit-Z用戶: ONG、ONT節點升級完畢,已恢復充、提幣服務。由此給您帶來不便,敬請諒解.

1900/1/1 0:00:00
以太坊:CFTC內部人士:監管機構愿意批準以太坊期貨

據coindesk.com報道,一位美國商品期貨交易委員會的高級官員表示,該委員會愿意批準一項以太期貨合約,如果一切都符合要求的話.

1900/1/1 0:00:00
BTC:先行指標BTC日值做持平整理 對幣價有何影響?

BTC網絡動量研究BTC價格與每天通過區塊鏈進行交易的BTC價值之間的關系,我們發現BTC日值作為一個領先指標,可以洞察市場周期處于哪個階段,從而預測價格可能走向何方.

1900/1/1 0:00:00
BNS:巴菲特反對比特幣 我反對巴菲特

一早上我爸就給我發了一篇關于巴菲特否定比特幣的文章,并附帶一句微信消息:你的偶像巴菲特說了,比特幣就是騙人的,你不要在干這行了,干點正經事。我遲疑了一會兒,回了一句:他早就不是我的偶像了.

1900/1/1 0:00:00
ads