B站PWN教程筆記-12

完結撒花。

今天還是以做題為主。

fmtstr+uaf

格式化字符串+USER AFTER FREE

首先補充一個背景知識,指針也是有數據類型的,不同數據類型的指針+xx,所加的字節數也不一樣,其實是指針指的項目的下一項。如int a[20],a是指針,a+1就是往后4字節。

根據這個地址的思想,可以把func(args)等效為==(0xaaaa)(args)

------------------------------------------

首先checksec,看到了有可讀可寫可執行的地方,先留個心眼。

開始做題。做題可以自己擺弄擺弄程序,或者輸入一些自己覺得可能會出漏洞的地方,說不準就會出現問題,這里就是發生了double free。雖然還不太理解,但感覺不太正常。

漏洞出現在這里,還沒有確認退出就已經free了chunk o。如果我們輸入n,程序會重新來一次,但是o對應的指針已經指向了free chunk,在UAF這個選項,有一個malloc,恰好滿足UAF漏洞,這個o是寫入函數地址的chunk,我們可以實現任意函數執行了,或者其他操作(因為這里沒看到明顯的后門函數)

這里要注意這個o指向的位置,其實還是那個chunk,不要弄混淆。

大概思路就清晰了。首先這個題沒有棧溢出,我們考慮用堆。先通過UAF,搞一個shellcode到棧上。然后想辦法執行它。

難題出現,UAF能寫入的最多是24字節,但是pwntool生成的肯定不止。所以我們可以在之前的shellcode database里面搞一個shellcode出來。難題解決。

接下來是泄露棧的地址,如下,我們只需要知道了prev rbp的內容即可知道v7-v9地址。這樣就可以把shellcode注入到指定位置。

小技巧:可以在特定位置搞一個標記字符,如下所示,在recv和send會更加方便。

?這個標記字符還有一種情況,就是格式化字符不足一個字長,他就可以起到補滿一個字長。不然全亂了,因為它找參數是step為一個字長來找。

下面就是UAF示意圖。

變為

最后不要忘記程序執行是在1,2,3選項分別執行不同對應的o里面的代碼,還要發送一個讓shellcode被執行才可以!

hacknote(經典UAF)

堆題經典模板:可以創建堆,可以釋放,可以查看堆列表。

而且,好消息是,因為題目模板化,exp同樣也是模板化,一會便知。

···········································································

先來看看add函數。首先映入眼簾的就是它設置了一個限制。最多只能存在5個note,然后搞了個指針數組,來存儲note的地址。

看一下添加的邏輯:很簡單其實。

就是add的時候,遍歷這個象征著note的ptr數組,如果是空的,就malloc一個。但是這個malloc的是8,如下所示:會出來兩個實際上。

所以最終的結構實際上如下所示,每個數組指向了第一個chunk,而后第二個chunk還有一個大小看自己的chunk。

上面的chunk可是同樣有函數地址的,需要注意。

還是一樣的漏洞,看free,沒有free指針:

?

其實可以覺得是UAF了

然后開始做題。這里要用函數的思想,每一次進入子函數,都是那些代碼,輸入什么,輸出什么,而我們要不斷調用子函數,因此可以用函數在腳本里面封裝下:

我們可以先new兩次。上面的chunk類似于控制信息,下面的就是(垃圾)數據。

我們再free。這樣的話上面的chunk進入一個bin(估計是fast bin),下面的進入一個bin。

這里就已經初具雛形了,UAF。弄完后是下面這樣

我們再執行add。會重新malloc。看這個,我們malloc一個8size。fast bin是類似于棧,后進先出。首先2申請一個控制chunk,就是1原來所對應的。再申請一個8size的chunk,就是0所對應的控制chunk。

這里不要忘記UAF的關鍵,就是沒有free原來的指針,導致那個指針和新malloc的指針指向同一個地方,可以篡改老指針指的地方,借用老指針做一些壞事。

在這里面,0認為的控制信息,就是2認為的數據區域

這里題目還給一個so文件,肯定是需要泄露地址。

所以先用2,給0的控制塊第二個(相當于參數)寫入puts的got表地址。這是泄露這一步要干的事情。

我們用程序顯示chunk內容的那個子函數,來搞泄露。

泄露完之后,再填充為:

?

即可。

注意,這里參數是||sh,為啥有個杠杠?因為程序設計問題。程序設計的system參數實際上是*0,也就是這一段。實際的執行語句見下面:

第一個是system的真實地址,肯定會執行失敗。||這個特殊的符號(意思是或),會在第一個執行失敗,執行第二個sh。那為什么泄漏的時候,不用考慮這個。因為泄露的時候的puts,是出題人寫的my_puts,不是plt表的puts。已經考慮這里的情況了。

這還只是初級堆利用,以一張完整的本題利用圖作為收尾吧!愿頂峰相見!

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

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

相關文章

零基礎設計模式——總結與進階 - 3. 學習資源與下一步

第五部分:總結與進階 - 3. 學習資源與下一步 到這里,你已經完成了設計模式主要內容的學習。但這僅僅是一個開始,設計模式的精髓在于實踐和持續學習。本節將為你提供一些優質的學習資源和后續學習的建議,幫助你在這條道路上走得更…

多模態大語言模型arxiv論文略讀(125)

Uni-Med: A Unified Medical Generalist Foundation Model For Multi-Task Learning Via Connector-MoE ?? 論文標題:Uni-Med: A Unified Medical Generalist Foundation Model For Multi-Task Learning Via Connector-MoE ?? 論文作者:Xun Zhu, Yi…

【學習筆記】NLP 基礎概念

1.1 什么是 NLP 定義: 自然語言處理(NLP)**是一種讓計算機理解、解釋和生成人類語言的技術。它是人工智能領域中極為活躍且重要的研究方向,旨在模擬人類對語言的認知和使用過程 特點: 多學科交叉:結合計…

RNN為什么不適合大語言模型

在自然語言處理(NLP)領域中,循環神經網絡(RNN)及衍生架構(如LSTM)采用序列依序計算的模式,這種模式之所以“限制了計算機并行計算能力”,核心原因在于其時序依賴的特性&a…

微信小程序一款不錯的文字動畫

效果圖 .js Page({data: {list:[],animation:[text-left,text-right,text-top,text-bottom],text:[[春眠不覺曉,處處聞啼鳥。,夜來風雨聲,花落知多少。 ],[床前明月光,疑是地上霜。,舉頭望明月,低頭思故鄉。],[千山鳥飛絕&#…

循環神經網絡(RNN):序列數據處理的強大工具

在人工智能和機器學習的廣闊領域中,處理和理解序列數據一直是一個重要且具有挑戰性的任務。循環神經網絡(Recurrent Neural Network,RNN)作為一類專門設計用于處理序列數據的神經網絡,在諸多領域展現出了強大的能力。從…

手機SIM卡通話中隨時插入錄音語音片段(Windows方案)

手機SIM卡通話中隨時插入錄音語音片段(Windows方案) --本地AI電話機器人 上一篇:手機SIM卡通話中隨時插入錄音語音片段(Android方案)??????? 下一篇:???????編寫中 一、前言 書接上文《手…

阿里云通義大模型:AI浪潮中的領航者

通義大模型初印象 在當今 AI 領域蓬勃發展的浪潮中,阿里云通義大模型宛如一顆璀璨的明星,迅速崛起并占據了重要的地位。隨著人工智能技術的不斷突破,大模型已成為推動各行業數字化轉型和創新發展的核心驅動力。通義大模型憑借其強大的技術實…

【算法篇】逐步理解動態規劃模型7(兩個數組dp問題)

目錄 兩個數組dp問題 1.最長公共子序列 2.不同的子序列 3.通配符匹配 本文旨在通過對力扣上三道題進行講解來讓大家對使用動態規劃解決兩個數組的dp問題有一定思路,培養大家對狀態定義,以及狀態方程書寫的思維。 順序: 題目鏈接-》算法思…

什么是 HTTP Range 請求(范圍請求)

HTTP Range 請求,即范圍請求,是一種 HTTP 請求方法,允許客戶端請求資源的部分數據。這種請求在處理大型文件(如視頻、音頻、或大文件下載)時特別有用,因為它可以有效地進行斷點續傳和按需加載數據&#xff…

java集合(十) ---- LinkedList 類

目錄 十、LinkedList 類 10.1 位置 10.2 特點 10.3 與 ArrayList 的區別 10.4 構造方法 10.5 常用方法 十、LinkedList 類 10.1 位置 LinkedList 類位于 java.util 包下 10.2 特點 是 List 接口的實現類是 Deque 接口的實現類底層使用雙向循環鏈表結構 10.3 與 Arra…

kafka消費的模式及消息積壓處理方案

目錄 1、kafka消費的流程 2、kafka的消費模式 2.1、點對點模式 2.2、發布-訂閱模式 3、consumer消息積壓 3.1、處理方案 3.2、積壓量 4、消息過期失效 5、kafka注意事項 Kafka消費積壓(Consumer Lag)是指消費者處理消息的速度跟不上生產者發送消息的速度,導致消息在…

RAG實踐:Routing機制與Query Construction策略

Routing機制與Query Construction策略 前言RoutingLogical RoutingChatOpenAIStructuredRouting DatasourceConclusion Semantic RoutingEmbedding & LLMPromptRounting PromptConclusion Query ConstructionGrab Youtube video informationStructuredPrompt GithubReferen…

基于python的web系統界面登錄

#讓我們的電腦可以支持服務訪問 #需要一個web框架 #pip install Flask from flask import Flask, render_template,request from random import randint app Flask(__name__) app.route(/index) def index():uname request.args.get("uname")return f"主頁&am…

MATLAB Simulink 終極入門指南:從零設計智能控制系統

為什么工程師都愛Simulink? 想象一下:不寫一行代碼就能設計機器人控制器、飛行算法甚至核反應堆! MATLAB Simulink正是這樣的可視化神器。全球70%的汽車ECU、航天器控制系統用它開發。本文將帶你從零設計一個智能溫控系統,融入創新性的模糊PID控制,并生成可部署的C代碼!…

vue3 javascript 復雜數值計算操作技巧

在Vue 3中處理復雜數值計算,你可以采用多種策略來確保代碼的可讀性、可維護性和性能。以下是一些實用的技巧和最佳實踐: 1. 使用計算屬性(Computed Properties) Vue 3的computed屬性非常適合處理復雜的數值計算。它們是基于響應…

26.【.NET8 實戰--孢子記賬--從單體到微服務--轉向微服務】--單體轉微服務--角色權限管理

在現代企業級應用中,角色權限管理是保障系統安全和提升用戶體驗的核心基礎功能。一個高效的角色權限系統不僅能夠有效防止越權訪問,還能簡化系統的維護和擴展。本文將系統性介紹角色權限管理的核心實現思路,包括架構設計、性能優化、安全機制…

[VSCode] VSCode 設置 python 的編譯器

VSCode 設置 python 的編譯器 快捷鍵:CTRL SHIFT P 彈出 VSCode 的命令框輸入 Python : select Interpretor選擇自己需要的 python 環境;如 python 3.8 或者 python 3.10 版本

基于PEMFC質子交換膜燃料電池系統的simulink建模與仿真

目錄 1.課題概述 2.系統仿真結果 3.核心程序 4.系統仿真參數 5.系統原理簡介 6.參考文獻 7.完整工程文件 1.課題概述 本課題是一個燃料電池(大概率是質子交換膜燃料電池,PEMFC )的數學模型仿真框圖,用于模擬燃料電池的電特…

git-build-package 工具代碼詳細解讀

git-build-package(gbp)是一個用于從 Git 倉庫管理 Debian 軟件包的工具,其代碼架構和實現原理體現了對 Git 版本控制系統和 Debian 打包流程的深度整合。以下是對其代碼的詳細解讀: 代碼架構設計 gbp 的代碼架構設計圍繞其核心…