作者:Pinging
一、前言
前幾天全國大學生信息安全競賽初賽如期進行,在這次比賽中也看到了區塊鏈題目的身影。所以我將題目拿來進行分析,并為后續的比賽賽題提供一些分析思路。
由于本次比賽我并沒有參加,所以我并沒有Flag等相關信息,但是我拿到了比賽中的相關文件以及合約地址并在此基礎上進行的詳細分析,希望能幫助到進行研究的同學。
二、題目分析
拿到題目后,我們只得到了兩個內容,一個是合約的地址,一個是broken
eventSendFlag(uint256flagnum,stringb64email);functionpayforflag(stringb64email)public{require(balanceOf>=10000);emitSendFlag(1,b64email);}
首先我們看這個合約文件。合約開始定義了兩個mapping變量——balanceOf與gift,之后為構造函數,以及發送flag的事件。當我們調用payforflag函數并傳入使用base64加密的郵件地址之后,需要滿足當前賬戶的余額比10000多。
由這第一手信息我們可以進行一些簡單的猜想。這道題目需要領自己的余額大于10000,只有這樣才能購買flag。這也是很常見的題目類型。而這個題目十分設計的還是十分巧妙的,我們接著向下看。
廈門發放全國首筆數字人民幣住房公積金貸款44萬元:5月27日消息,近日,廈門市住房公積金中心發放了首筆數字人民幣住房公積金貸款 44 萬元,實現了從住房公積金中心數字人民幣賬戶發放貸款至賣房人的數字人民幣收款賬戶,是全國住房公積金行業在數字人民幣住房公積金貸款應用場景上的首創性突破。
下一步,廈門市住房公積金中心將強化金融科技開發應用,深入研究數字人民幣在住房公積金各業務領域的場景運用,在住房公積金公共服務中推廣數字人民幣結算,打造高質量發展的 \" 數字公積金 \"。(新浪樂居)[2022/5/27 3:45:39]
根據上面的合約代碼,我們并不能得到更多的有用信息。然而此時我們就需要利用合約地址來進一步分析。
此處合約地址為:0x455541c3e9179a6cd8C418142855d894e11A288c。
我們訪問公鏈信息看看是否能夠訪問到有價值的信息:
發現出題人并沒有公開源代碼,只有ABI碼,此時我們只能根據此來進行合約逆向來尋找更有用的解題思路。
https://ethervm
varvar0=msg
var1=0x009c;func_01DC();stop();}elseif(var0==0x66d16cc3){//Dispatchtableentryforprofit()var1=msg
第十一屆全國人大常委、財經委副主任賀鏗:區塊鏈技術是數字經濟發展的關鍵引擎:4月11日消息,由起源時代主辦的全球區塊鏈應用高峰論壇暨2021行業成果匯報會于4月11日在湖南長沙舉行。第十一屆全國人大常委、財經委副主任,第十二屆九三學社中央委員會副主席賀鏗發表開幕致辭,他就“十四五”以來區塊鏈技術發展規劃做了回顧與總結,表示區塊鏈平臺可以在數字經濟中構建可信的協作網絡,讓未來數字世界更安全、更高效。
在嘉賓分享環節,中央財經大學經濟學博士,清華繼續教育學院特聘講師,原火幣數字資產研究中心首席研究員郭大治發表《區塊鏈落地應用與產業鏈發展》演講時表示,結合區塊鏈的技術要點及目前的政策環境,通過建立行業規則防范風險、出臺相關領域針對區塊鏈產業具體細則如稅收等是目前各國強調的兩個主要方向,而“多種數據技術的組合運用”“產業鏈重構導致新型業態的出現”“金融行業的應用”將成為區塊鏈產業鏈的未來趨勢。[2021/4/11 20:08:34]
var1=0x009c;profit();stop();}elseif(var0==0x6bc344bc){//Dispatchtableentryfor0x6bc344bc(unknown)var1=msg
vartemp0=memory;vartemp1=msg
動態 | 全國首次《區塊鏈技術能力測試(初級)》推出:2019年12月21日,30名考生在上海師范大學徐匯校區參與了全國首次《區塊鏈技術能力測試(初級)》。考生組成中有來自于同濟大學、華東理工大學、上海師范大學等高校學生,也有一半是已就業人員,其中不乏有工作二十來年的金融業從業者等。參與考試通過后獲得中國電子學會頒發的專業技術能力證書,以具備進入區塊鏈領域的初級專業技術知識。《區塊鏈技術能力測試(初級)》的前期準備中,包括高校教材《區塊鏈技術原理與實踐》(機械工業出版社,2020年1月)的統籌編寫,相關培訓教師的組織,《區塊鏈技術能力測試(初級)》考試大綱的專家評審,一直到相關試題庫的推出。考試知識模塊由6個部分組成,分別是:區塊鏈系統知識、區塊鏈網絡通信、區塊鏈安全機制(含加密算法)、共識機制、智能合約、區塊鏈應用操作。測試命題根據考試大綱各部分的認知程度“知道”,“理解”,“掌握”命題 ,最終呈現以是非題、選擇題以及實驗操作題設置。考試時間全場120分鐘,全程為閉卷考試。(人民網)[2019/12/25]
elseif(var0==0x70a08231){//DispatchtableentryforbalanceOf(address)var1=msg
var1=0x013a;var2=msg
動態 | 全國第一張醫保電子憑證誕生 未來將加入區塊鏈技術:據新浪財經消息,11月24日,全國醫保電子憑證首發式在山東省濟南市舉行。在發布式現場,濟南誕生了全國第一張醫保電子憑證。醫保電子憑證由國家醫保信息平臺統一生成,標準全國統一,跨區域互認。未來還將加入5G和區塊鏈等技術,繼續推進醫保治理體系和治理能力現代化。[2019/11/24]
elseif(var0==0x7ce7c990){//Dispatchtableentryfortransfer2(address,uint256)var1=msg
var1=0x009c;var2=msg
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
動態 | 全國多地推出區塊鏈產業基金 總規模將近400億:隨著區塊鏈技術的不斷拓展,各地政府紛紛推出區塊鏈產業基金招引區塊鏈企業。目前至少8個省市地區推出了產業基金,包括深圳區塊鏈創投基金、北京區塊鏈生態投資資金、杭州雄岸全球區塊鏈創新資金等,總規模將近400億元。[2018/10/30]
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
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:MEMMORMEMOEMOPlatform of meme coinsprimordialplanetcoinMEMO幣DOGEMOON價格
從以信任為基礎的經濟到自主經濟的過渡,將是人類歷史上最大的財富轉移之一。背景閱讀:同樣是KyleSamani撰寫的《加密資產是個100萬億美元的市場!》作者:KyleSamani,Multico.
1900/1/1 0:00:00撰文:realthinkbit本文想討論的是加密網絡作為工具,當它作用于現代公司治理時,其可能的作用是什么?對于這個問題,其實區塊鏈行業展開過很多想象和討論,比如通證經濟,比如STO.
1900/1/1 0:00:00萊特幣創始人李啟威與摩根溪數字合伙人安東尼·龐福米諾在一個播客中出現,李啟威回答了一些關于LTC投資組合和加密行業現狀的棘手問題.
1900/1/1 0:00:00今日BTC沖高回落,目前在5800美元上方整理,主流幣多數微漲。BTC在幣安現報5848美元,24漲幅4.76%.
1900/1/1 0:00:00大家應該對前幾天馬斯克突然發了一條只有一個詞的推特和微博,讓幣圈的人圍觀的甚是熱鬧,因為那個詞是幣圈外的人不知道,但是幣圈的人肯定知道的詞:Ethereum,以太坊.
1900/1/1 0:00:00親愛的社區用戶: 為優化幣幣交易體驗,我們計劃對交易對最小精度進行調整,FCoin將于2019年05月05日16:00(GMT8)調整交易對價格精度。調整期間幣幣交易及各項操作不受影響.
1900/1/1 0:00:00