B站pwn教程筆記-3

棧知識、部分保護措施

GDB顯示的棧地址有時候并不是可靠的地址,gdb也是用特殊的進程映像來拿地址的。且gdb默認關閉棧地址隨機化。但是,偏移量是沒有錯誤的。目前還沒學到咋解決

第一個棧幀是main函數棧幀,之前的一些系統函數什么的沒有棧幀。

執行了leave之后的情況:會pop ebp,所以esp+1,然后ebp恢復原來樣子了。然后會執行retn,那就是將返回地址相當于pop給eip寄存器。

canary(金絲雀)保護措施,在?ebp下面會有一個值,創建棧幀的時候就有了。如果銷毀棧幀時檢測到這個值被修改了,那么他就會崩潰退出。可以在gcc編譯的時候打開

2個16進制數字代表1個字節

64位一個ebp是8字節,32位是4

ret2shellcode題目講解

1.動調拿到溢出字節數

需要注意,如果棧存放的是指針,這工具會把指針的數據打印出來。所以esp實際上存的是指針,不是我們想要溢出的字符串。

2.寫exp?

payload一定要有shellcode(arm后的),但是返回地址需要考慮一下,最好不在棧上做執行,因為有太多保護措施。觀察軟件main函數會對一個全局變量賦值,那就在bss段進行執行吧。

ljust(填充前方字節流長度到幾,填充數據),這是個函數,可以這樣寫:

arm(shellcraft.sh()).ljust(目標長度,b'A')。

有時候需要recv完畢再send不然會IO錯誤。

返回導向編程

ret2syscall

本質上是操作空間內核里面的代碼。

在舉例中,my_puts是用戶函數,其中調用了函數write。eax是傳入系統調用號。在動態鏈接庫的作用下,write對應的匯編代碼進行實現功能,調用更加底層的系統函數/接口之類。

ldd命令可以查看一個可執行程序的所有動態鏈接庫,如ldd a.out

需要關注libc.so.6,記錄著c語言標準動態鏈接庫的軟連接。(記錄軟連接在更新動態鏈接庫的時候更加便捷)就在lib文件夾里面?。有時候會出現本地打不通,遠程打通,或者反過來,可能原因之一就是動態鏈接庫版本不同了,這種的排錯還是比較困難的。

動態鏈接庫也是elf文件,有位置無關代碼編寫技術?,這個技術被PIE借鑒了。

動態鏈接庫會載入在shared那個區域。ret2libc的目的就是把程序從text跳轉到shared libraries。

execve就是上面libc.so包裝在system里面的一個系統調用。?

int 0x80就是一個中斷號,代表系統調用。再讀取eax里面存的調用號。

但是程序沒有這樣連續的片段,其實將間斷的片段(gadget)組合起來也可以達到這樣的效果,就是ROP。

執行過程?

詳見視頻P3的2:27:10左右。需要注意ret的效果和EIP的作用,以及pop了esp會移動的。

利用ret控制eip,用pop eax可以直接把想要的值覆蓋在棧上。

做題

2:47:28左右

運氣好部分寄存器值已經是對的,可以不用pop什么了

用drawio工具,看棧的變化,進一步理解ROP過程以編寫payload

只是了解:popad?按?ediesiebpesp(原棧指針,不過該值不存回?esp?)、ebxedxecxeax?順序彈出。

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

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

相關文章

Qt在Linux嵌入式開發過程中復雜界面滑動時卡頓掉幀問題分析及解決方案

Qt在Linux嵌入式設備開發過程中,由于配置較低,加上沒有GPU,我們有時候會遇到有些組件比較多的復雜界面,在滑動時會出現掉幀或卡頓的問題。要講明白這個問題還得從CPU和GPU的分工說起。 一、硬件層面核心問題根源剖析 CPU&#x…

Spring Boot 項目中,JDK 動態代理和 CGLIB 動態代理的使用

在 Spring Boot 項目中,JDK 動態代理和 CGLIB 動態代理都是實現 AOP (面向切面編程) 的重要技術。 它們的主要區別在于代理對象的生成方式和適用范圍。 下面詳細介紹它們的使用場景: 1. JDK 動態代理 (JDK Dynamic Proxy) 原理: JDK 動態代理…

OpenCV計算攝影學(2)圖像去噪函數denoise_TVL1()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 原始-對偶算法是用于解決特定類型變分問題(即,尋找一個函數以最小化某個泛函)的算法。特別地,圖像…

在 Windows 下的 Docker 中安裝 R語言

以下是在 Windows 系統的 Docker 中安裝 R 語言的詳細教程,包括 Docker 的安裝、配置以及如何在容器中運行 R 語言的步驟。 步驟 1:安裝 Docker 下載 Docker Desktop 訪問 Docker 官方網站:Docker Desktop: The #1 Containerization Tool for…

【數據挖掘在量化交易中的應用:特征發現與特征提取】

好的,我將撰寫一篇關于金融領域數據挖掘的技術博客,重點闡述特征發現和特征提取,特別是在量化交易中的應用。我會提供具體的實操步驟,并結合Python和TensorFlow進行代碼示例。 完成后,我會通知您進行查看。 數據挖掘…

如何在視頻中提取關鍵幀?

在視頻處理中,提取關鍵幀是一項常見的任務。下面將介紹如何基于FFmpeg和Python,結合OpenCV庫來實現從視頻中提取關鍵幀的功能。 實現思路 使用FFmpeg獲取視頻的關鍵幀時間戳:FFmpeg是一個強大的視頻處理工具,可以通過命令行獲取…

九、數據治理架構流程

一、總體結構 《數據治理架構流程圖》(Data Governance Architecture Flowchart) 水平結構:流程圖采用水平組織,顯示從數據源到數據應用的進程。 垂直結構:每個水平部分進一步劃分為垂直列,代表數據治理的…

Docker 搭建 Gitlab 服務器 (完整詳細版)

參考 Docker 搭建 Gitlab 服務器 (完整詳細版)_docker gitlab-CSDN博客 Docker 安裝 (完整詳細版)_docker安裝-CSDN博客 Docker 日常命令大全(完整詳細版)_docker命令-CSDN博客 1、Gitlab鏡像 # 查找Gitlab鏡像 docker search gitlab # 拉取Gitlab鏡像 docker pull gitlab/g…

Spring MVC 框架學習筆記:從入門到精通的實戰指南

目錄 1. Spring MVC 概述 2. Spring MVC 項目搭建 3. Spring MVC 執行流程 4. Spring MVC RequestMapping 注解 5. Spring MVC 獲取請求參數 6. Spring MVC 常見注解 7. Spring MVC 響應處理 8. Spring MVC SSM 整合 9. Spring MVC 作用域傳參 10. Spring MVC 上傳 1…

RK3568開發筆記-AD7616調試筆記

目錄 前言 一、AD7616介紹 高分辨率 高速采樣速率 寬模擬輸入范圍 集成豐富功能 二、原理圖連接 三、設備樹配置 四、內核驅動配置 五、AD芯片測試 總結 前言 在嵌入式數據采集領域,將模擬信號精準轉換為數字信號至關重要。AD7616 作為一款性能卓越的 16 位模數轉換器…

【對話推薦系統】Towards Topic-Guided Conversational Recommender System 論文閱讀

Towards Topic-Guided Conversational Recommender System 論文閱讀 Abstract1 Introduction2 Related Work2.1 Conversation System2.2 Conversational Recommender System2.3 Dataset for Conversational Recommendation 3 Dataset Construction3.1 Collecting Movies for Re…

ASP.NET Core 8.0學習筆記(二十八)——EFCore反向工程

一、什么是反向工程 1.原則:DBFirst 2.反向工程:根據數據庫表來反向生成實體類 3.生成命令:Scaffold-DbContext ‘連接字符串’ 字符串示例: Server.;DatabaseDemo1;Trusted_Connectiontrue; MultipleActiveResultSets true;Tru…

springcloud和dubbo的區別

Spring Cloud和Dubbo作為微服務架構中非常流行的兩個框架,它們在多個方面存在顯著的區別。以下是對兩者區別的詳細分析: 1. 初始定位和生態環境 Spring Cloud:定位為微服務架構下的一站式解決方案,依托于Spring平臺,…

【大模型LLM】DeepSeek LLM Scaling Open-Source Language Models with Longtermism

深度探索LLM:以長期主義擴展開源語言模型 0.論文摘要 開源大語言模型(LLMs)的快速發展確實令人矚目。然而,以往文獻中描述的擴展規律得出了不同的結論,這為LLMs的擴展蒙上了一層陰影。我們深入研究了擴展規律&#…

C#快速調用DeepSeek接口,winform接入DeepSeek查詢資料 C#零門檻接入DeepSeek C#接入DeepSeek源代碼下載

下載地址<------完整源碼 在數字化轉型加速的背景下&#xff0c;企業應用系統對智能服務的需求日益增長。DeepSeek作為先進的人工智能服務平臺&#xff0c;其自然語言處理、圖像識別等核心能力可顯著提升業務系統的智能化水平。傳統開發模式下&#xff0c;C#開發者需要耗費大…

Qt常用控件之多行輸入框QTextEdit

多行輸入框QTextEdit QTextEdit 是一個多行輸入框控件&#xff0c;支持富文本和 markdown 格式&#xff0c;當文本內容超出編輯框的范圍時能自動提供滾動條。 QPlainTextEdit 是只支持富文本格式的多行輸入框&#xff0c;屬性和使用上與 QTextEdit 幾乎沒有區別。 QTextEdit屬…

VC++零基礎入門之系列教程 【附錄E MFC快速參考指南】

附錄E MFC快速參考指南 E.1 創建窗口 使用M F C CWnd wnd; W n d . C r e a t e E x ( E xSt y l e , C l a s s N a m e , Wi n d o w N a m e , S t y l e , x , y, Wi d t h , H e i g h t , P a r e n t , M e n u , P a r a m ) ; 使用A P I HWND hwnd=::CreateWi n d …

【前端】react+ts 輪播圖的實現

一、場景描述 在很多網站的頁面中都有輪播圖&#xff0c;所以我想利用react.js和ts實現一個輪播圖。自動輪播圖已經在前面實現過了&#xff0c;如&#xff1a;https://blog.csdn.net/weixin_43872912/article/details/145622444?sharetypeblogdetail&sharerId145622444&a…

python與C系列語言的差異總結(4)

如果具有傳統編譯型語言的經驗&#xff0c;大家可能會對是否使用字典而猶豫不決&#xff0c;擔心字典的效率比列表或數組低。事實上Python字典的執行速度已經相當快了。Python語言的許多內部特性都依賴于字典&#xff0c;為提高字典的效率已經投入了大量的心血。Python的所有數…

[Web 安全] 反序列化漏洞 - 學習筆記

關注這個專欄的其他相關筆記&#xff1a;[Web 安全] Web 安全攻防 - 學習手冊-CSDN博客 0x01&#xff1a;反序列化漏洞 — 漏洞介紹 反序列化漏洞是一種常見的安全漏洞&#xff0c;主要出現在應用程序將 序列化數據 重新轉換為對象&#xff08;即反序列化&#xff09;的過程中…