CTF中智能合约部署交互基础
0x01 前言
- Solidity在以太坊中是編寫智能合約最受歡迎的語言,一般的CTF競賽中的智能合約方向的題目都是以solidity語言編寫的智能合約。
- 為什么寫這一篇文章,主要是因為在接觸智能合約類題目的時候,題目是以提前編寫好的代碼邏輯存在缺陷或者合約本身存在的問題為考點的,其實題目對于新手而言,難點主要在于solidity語法的陌生,以及完全無法著手智能合約,無法與之交互。所以在接下來的文章中,著重介紹如何進行智能合約的交互。
0x02 Solidity語言&CTF中基礎Solidity合約分析
- 在線編譯器 http://remix.ethereum.org/
- Solidity它的語法與Javascript相似,是一種面向對象的語言。文件后綴名為.sol
- 基礎代碼結構
分析如下
- 明確solidity語言的版本號
- 定義一個合約,內部有不同的方法和屬性
- 更新我們的 balances映射,這是一個余額變量,該變量里面存儲了所有擁有代幣的地址的余額
- 這是一個構造函數,其中tx.origin是Solidity的一個全局變量,它遍歷整個調用棧并返回最初發送調用(或事務)的帳戶的地址,實現給賬戶余額賦初始值為0
- 發送flag的合約,郵件發送腳本需部署在服務器
其中郵箱發送腳本編寫建議參考博客https://www.cnblogs.com/KRDecad3/p/10798383.html
- 獲取賬戶當前余額
- 為賬戶增加余額
一般CTF中智能合約題目,都是當發送調用(或事務)的帳戶的地址滿足一定條件時,然后允許發送flag到指定郵箱。這邊就是進行一個簡單的為賬戶余額+1的方法,實現交互,傳入f為1即可為余額+1。
- 判斷余額是否大于0,若大于0則調用FLAG方法發送flag
- 更多solidity語法推薦博客https://www.jianshu.com/p/70aecda3212e
0x03 使用Remix IDE進行合約部署和交互
- 在線編譯器?http://remix.ethereum.org/
合約部署
- 新建.sol文件
- 編譯.sol文件
編譯成功后會顯示綠色的勾表示編譯成功,如果編譯失敗可以看編譯詳細,查看錯誤原因
- 部署合約
Environment 選擇Injected Web3
Account如果沒有的話需要安裝MetaMask錢包插件
如果已安裝并且登陸的話,在選擇Injected Web3時會自動請求連接到你的MetaMask錢包里的賬號。
點擊Deploy部署合約
- 部署成功
在MetaMask錢包里面可以看到歷史紀錄中合約部署成功
合約地址可以在Remix IDE中的Deployed Contracts找到我們成功部署的合約,點擊Copy就可以復制合約地址,地址為0x3eCC14397D0413e29b83653691d8614519eA3394。
查詢合約地址詳細信息的網址為 https://ropsten.etherscan.io/
可以通過該網址查到我們已部署的合約地址產生的記錄,當前為部署合約時產生的記錄。
合約交互
- 要和一個已有合約進行交互,必須至少在合約的.sol文件的聲明函數原型,然后成功編譯。當然一般題目都會給.sol文件,只需要直接編譯即可
- 加載合約
在At Address中填入目的合約的地址,點擊At Address加載合約
- 進行交互
點擊getbalance可以看到當前余額為0
調用AddBalance傳入1后,等待合約交互成功,然后getbalance發現我們的余額已經實現+1了。
最后將我們的郵箱的base64編碼后的值輸入,調用合約中CaptureTheFlag方法,等待合約交互成功。
通過查合約地址記錄,成功調用到發送flag的合約方法了。到郵箱中查最新的郵件即可。
總結
以上是生活随笔為你收集整理的CTF中智能合约部署交互基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker配置CTF中的靶机环境
- 下一篇: docker部署tomcat+mysql