PWN動態調試

這篇文章就是來教大家學習怎么動態調試的,然后我還寫了一篇關于動態調試的文章,不是buu上面的題,就是兩道簡單的棧溢出問題,那兩道題挺有特點的。大家可以去看看。

每日3道PWN之課外2道(第2.5天)-CSDN博客

先找一個簡單的jarvisoj_level0調試一下,然后咱再看復雜的pwn1_sctf_2016

聽說又不考pwn了,所以只寫完了jarvisoj_level0,現在我就轉行去學逆向了

so,停工了~~~私密馬賽!

要求環境gdb和pwotool+pwndbg

jarvisoj_level0

先回憶一下

進去后按f5,查看反編譯的代碼

看一下vulnerable_function這個函數

找后門shift+f12

雙擊跟進

記錄地址0x40059A

大概回憶起來了吧,就是read溢出,做題思路我的另一個博客寫過,大家可以去看,

每日3道PWN(第二天)-CSDN博客


動態調試

現在我們進行動態調試

動態分析的正常流程,gdb打開文件

查看變量大小的兩種方法

方法1(常規大main的斷點+老老實實的查看)

b main 設置斷點

阿這,他說我權限不夠,稍等我一下哈,先chmod +x level0一下

然后再來一遍,run一下,我們就能看見main函數的匯編和棧什么的

下面這張不是本題的圖,但是有結構大概解釋

注意:asm的英文就是匯編的意思,registers是寄存器的意思,stack是棧的意思

看見漏洞函數了,為什么知道他是漏洞函數,當然因為前面我都博客里IDA靜態分析過了~

而且這個函數的中文意思就是易受攻擊的函數

我們就一直輸入n,然后知道綠色的箭頭指到漏洞函數vulnerable_function

按s,s就是step,si單步步進,進入該函數里面,看見了吧,漏洞利用點,read函數

tips:fini是退出當前函數,r是重新運行,如果弄錯的,可以試試這兩個

stack 24 命令查看當前棧的前24個棧幀

為什么要stack 24呢

我們的目的,就是查看當前變量buf的大小,前提就是要進入該函數內,就是n一直下一步,直到指向函數之后,輸入s,單步進入函數,才能看見變量buf。所以要stack

然后為什么24,聽我的大佬說,不管輸入幾,目的只要看見ebp或者rbp就算可以了,然后我們就用ebp(或者rbp)的地址減去eax(或者rax)的地址,來計算變量的大小

就像這樣

咱直接看后兩位相減就行,也就是0xb0-0x30=0x80=128

大小0x80,我們去看看對不對

對的。木的問題

vmmp

使用vmmap直接查看該進程的內存空間,不知道有啥用,晚點問問大神

1.查看棧、bss段是否可以執行,棧溢出包括BSS溢出


方法2(斷點的其他方式)沒成功

參考

棧溢出學習_loglevel:'debug-CSDN博客

cyclic這個工具,pwntools自帶的一個東西

常用的作用有兩個:

  1. 尋找偏移量(Offset):當你想要利用棧溢出等漏洞時,通常需要知道目標程序中棧上緩沖區的偏移量,以確定準確的覆蓋位置。使用"cyclic"工具可以生成一種重復的模式,并將其發送給目標程序,然后在程序崩潰時,通過查找崩潰時覆蓋的位置,就能夠計算出偏移量。

  2. 覆蓋返回地址:在進行棧溢出漏洞利用時,通常需要將惡意代碼的地址寫入到返回地址中,從而實現控制程序流程的目的。使用"cyclic"工具可以生成指定長度的重復模式,并將其作為返回地址,使程序跳轉到我們控制的位置。

尋找偏移量,以下是實例代碼:

from pwn import *pattern = cyclic(100)  # 生成長度為100的重復模式,就相當于b'A'*n
print(pattern)# 在漏洞利用中發送模式給目標程序
p = process('./vulnerable_program')
p.sendline(pattern)
p.recv()  //接受數據的意思,就是有時候他會有一個提示的字符串,需要你先進性接收
p.close() //關閉接受的意思# 漏洞觸發后,獲取返回地址所在的偏移量
offset = cyclic_find(packed_address)  # packed_address為返回地址
print(offset)

然后我要講的是gdb中cyclic的使用,目標是0x80=128,可以多一點,進行溢出,也可以剛剛好等于128

這里生成128位垃圾數據,一會直接拿來復制粘貼

這次也再學習以下打斷點的其他方式

先去IDA中查找漏洞利用函數的地址,我們打地址的斷點

先找到漏洞利用的read函數

然后右鍵選擇copy to assembly(復制到程序集的意思,咱也不知道程序集是啥意思,但作用把每一行源代碼就是編譯成成匯編碼,并進行注釋說明)

call的匯編碼意思是函數的意思,后面還有read字樣

那就是他了,記一下地址0x4005bf

gdb打斷點去

tip:對了,斷點就是讓程序運行道某給位置后停止,然后一步一步進行,是為了讓程序員調試用的

打斷點b *地址,別忘了*

然后我們在n的時候,就直接讓我們輸入東西了

找到棧,找道地址0x7fffffffdf30

然后用cyclic

或者當時直接這樣查看

跟著博主沒成功,私密馬賽,學藝不精

pwn1_sctf_2016(未整理)

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

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

相關文章

C#暫停和恢復(Thread.Suspend()和Thread.Resume() vs AutoResetEvent()和EventWaitHandle())

目錄 一、Thread.Suspend()和Thread.Resume() 二、AutoResetEvent()和EventWaitHandle() 1.AutoResetEvent() 2.EventWaitHandle() 3.示例及生成效果 一、Thread.Suspend()和Thread.Resume() 自 .NET 2.0 以后(含),Thread.Suspend() 和…

性能監控體系:InfluxDB Grafana Prometheus

InfluxDB 簡介 什么是 InfluxDB ? InfluxDB 是一個由 InfluxData 開發的,開源的時序型數據庫。它由 Go 語言寫成,著力于高性能地查詢與存儲時序型數據。 InfluxDB 被廣泛應用于存儲系統的監控數據、IoT 行業的實時數據等場景。 可配合 Te…

SSD基礎架構與NAND IO并發問題探討

在我們的日常生活中,我們經常會遇到一些“快如閃電”的事物:比如那場突如其來的雨、那個突然出現在你眼前的前任、還有就是今天我們要聊的——固態硬盤(SSD)。 如果你是一個技術宅,或者對速度有著近乎偏執的追求&…

電阻知識總結與詳細選型指南

目錄 1. 基礎知識 1.1 電阻的定義和符號 1.2 電阻的公式 1.3 電阻的串聯與并聯 2. 參數選型 2.1 電阻值 2.2 功率 2.3 精度 2.4 溫度系數 2.5 電壓系數 2.6 包裝類型 2.7 耐壓 2.8 特殊應用需求 2.9 環保要求 3. 產品應用 3.1 電流限制和保護 3.2 電壓分壓和電…

【Qt開發流程】之容器類1:介紹及常用容器類和使用Java風格迭代器進行遍歷

概述 Qt庫提供了一組通用的基于模板的容器類。這些類可用于存儲指定類型的項。例如&#xff0c;如果需要一個可調整大小的QString數組&#xff0c;可以使用QVector<QString>。 這些容器類被設計成比STL容器更輕、更安全、更易于使用。如果不熟悉STL&#xff0c;或者更喜…

低多邊形3D建模石頭材質紋理貼圖

在線工具推薦&#xff1a; 3D數字孿生場景編輯器 - GLTF/GLB材質紋理編輯器 - 3D模型在線轉換 - Three.js AI自動紋理開發包 - YOLO 虛幻合成數據生成器 - 三維模型預覽圖生成器 - 3D模型語義搜索引擎 當談到游戲角色的3D模型風格時&#xff0c;有幾種不同的風格&#xf…

云計算在計算機領域的應用與發展

云計算在計算機領域的應用與發展 一、引言 隨著科技的不斷發展&#xff0c;計算機領域已經成為當今社會最為活躍和創新的領域之一。云計算作為一種新興的計算模式&#xff0c;已經在計算機領域中得到了廣泛的應用&#xff0c;并且正在不斷地推動著計算機領域的發展。本文將探…

Ultimate VFX

Ultimate VFX 構建套件:

【利用二手車數據進行可視化分析】

利用二手車數據進行可視化分析 查看原始數據去除重復數據需求分析1.統計全國總共有多少量二手車&#xff0c;用KPI圖進行展示2.統計安徽總共有多少量二手車&#xff0c;用KPI圖進行展示3.統計合肥總共有多少量二手車&#xff0c;用KPI圖進行展示4.取最貴的10輛二手車信息&#…

web,Apache簡述

一.HTTP請求訪問的完整過程 1.建立連接 2.接收請求 3.處理請求 4.訪問資源 服務器獲取請求報文中請求的資源web服務器&#xff0c;即存放了web資源的服務器&#xff0c;負責向請求者提供對方請求的靜態資源&#xff0c;或動態運行后生成的資源 靜態資源&#xff1a;不需要…

C語言 內聯函數 + 遞歸函數

函數分類 內聯函數 1&#xff09;內聯函數在編譯時將函數的代碼直接插入到調用它的地方&#xff0c;而不是通過函數調用的方式執行&#xff0c;從而減少了函數調用的開銷&#xff0c;提高了代碼的執行速度 2&#xff09;使用 inline 關鍵字來聲明 3&#xff09;將函數聲明為內聯…

小目標檢測模型設計的一點思考

1. 小目標的特性 目標之間的交疊概率比較低&#xff0c;即使有交疊&#xff0c;其IoU多數情況下也是比較小的 AI-TOD Tiny Person Dateset 小目標自身的紋理顯著度有強弱區別&#xff0c;但是總體來說紋理特征都較弱&#xff0c;很多時候需要借助一定的圖像上下文來幫助確認 …

Java解決島嶼周長問題

Java解決島嶼周長問題 01 題目 給定一個 row x col 的二維網格地圖 grid &#xff0c;其中&#xff1a;grid[i][j] 1 表示陸地&#xff0c; grid[i][j] 0 表示水域。 網格中的格子 水平和垂直 方向相連&#xff08;對角線方向不相連&#xff09;。整個網格被水完全包圍&am…

ssm校園論壇管理系統項目分享

校園論壇管理系統是基于java編程語言&#xff0c;mysql數據庫&#xff0c;ssm框架和idea工具開發&#xff0c;本系統主要分為學生用戶&#xff0c;管理員兩個角色&#xff0c;其中用戶可以注冊登陸系統&#xff0c;在線發帖&#xff0c;查看欄目帖子&#xff0c;回復帖子&#…

某音上很火的圣誕樹分享

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站。 效果截圖&#xff08;這里不給動態了&#xff0c;某音到處都是了&#xff09;&#xff1a; 源代碼&#xff1a; <script src"…

Spring Boot 3 集成 MyBatis詳解

MyBatis是一款開源的持久層框架&#xff0c;它極大地簡化了與數據庫的交互流程。與類似Hibernate的ORM框架不同&#xff0c;MyBatis更具靈活性&#xff0c;允許開發者直接使用SQL語句與數據庫進行交互。Spring Boot和MyBatis分別是兩個功能強大的框架&#xff0c;它們的協同使用…

Linux shell編程學習筆記34:eval 命令

0 前言 在JavaScript語言中&#xff0c;有一個很特別的函數eval&#xff0c;eval函數可以將字符串當做 JavaScript 代碼執行&#xff0c;返回表達式或值。 在Linux Shell 中也提供了內建命令eval&#xff0c;它是否具有JavaScript語言中eval函數的功能呢&#xff1f; 1 eval命…

GPIO的使用--USART串口通信--傳感器控制數據

目錄 一、串口通信 1、概念 2、原理圖 3、使用步驟 &#xff08;1&#xff09;尋找串口位置 &#xff08;2&#xff09;確定引腳編號 &#xff08;3&#xff09;編寫代碼 4、實驗結果 實驗代碼 main.c usart.c usart.h 一、串口通信 1、概念 串行接口是一種可以將…

DiffiT

本文首發于AIWalker&#xff0c;歡迎關注。 https://arxiv.org/abs/2312.02139 https://github.com/NVlabs/DiffiT 擴散模型以其強大的表達能力和高樣本質量在許多領域得到了新的應用。對于樣本生成&#xff0c;這些模型依賴于通過迭代去噪生成圖像的去噪神經網絡。然而&#x…

SAP UI5 walkthrough step8 Translatable Texts

在這個章節&#xff0c;我們會將一些文本常量獨立出一個資源文件 這樣的話&#xff0c;可以方便這些文本常量被翻譯成任意的語言 這種國際化的操作&#xff0c;我們一般命名為i18n 新建一個文件i18n.properties webapp/i18n/i18n.properties (New) showHelloButtonTextSay …