日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pwn和逆向的区别_Pwn之简单patch

發布時間:2024/7/5 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pwn和逆向的区别_Pwn之简单patch 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
親愛的,關注我吧

9/27

文章共計1389個詞

圖片xue微有點多

注意流量哦

預計閱讀7分鐘

來和我一起閱讀吧

1

引言

在攻防的時候不僅僅需要break,還需要fix將漏洞patch上。

2

工具?

這里我使用的是keypatch這個ida腳本

下載地址:https://github.com/keystone-engine/keypatch/blob/master/keypatch.py

3

棧溢出的patch

漏洞原理

由于輸入函數的輸入長度超過了局部變量所開辟的空間,因此使得輸入能夠覆蓋到返回地址

patch

簡單了解原理之后,我們可以知道,棧溢出起始就是輸入的長度過大,那么我們將輸入長度修改到局部變量開辟空間的范圍內即可

例子

32為情況下


我們可以看到,buf距離ebp(棧底)距離0x28,但是輸入卻能夠輸入0x100,很明顯的棧溢出漏洞

可以看到這里參數為0x100,因為32位程序是通過棧傳參的。

再裝好keypatch之后,會在Edit選項欄中出現keypatch的選項,接著選中參數0x100,點擊patch

將長度改成小于0x28即可,這里需要注意輸入長度要為16進制。這里輸入輸入3個nop指令是因為這條指令本身Size為5,然后push 0x20為2,因此需要填充三個nop與原本的Size一致。

修改完畢后,保存即可

64位情況下

我們知道64位下是通過寄存器傳參數的,因此我們再找長度的參數時,找到相應的寄存器即可

例如read函數的長度參數是通過rdx(edx)傳入的,找到相應的寄存器按照上面方法修改即可。

4

格式化字符串的patch

漏洞原理

格式化字符串的漏洞是因為,程序中存在著格式化字符串輸出函數,典型的printf,但是printf,只有格式化字符串參數,而沒有后續的參數一,參數二,并且格式化字符串參數由我們所控制,從而導致了任意地址讀寫的漏洞觸發。

例子

題目中存在著典型的格式化字符串漏洞,那么修改漏洞有幾種方法,例如將printf函數修改為puts函數或者添加%s的參數。

方法一

若程序中即存在printf函數,又存在puts函數,那么我們可以將printf函數修改為puts函數

我們找到puts函數的plt表地址,因為puts函數也是帶一個參數,并且puts函數與printf函數的plt表地址長度一致,因此直接修改不會造成程序down掉

修改成puts函數的地址

修改成功后的效果,但是puts函數與printf函數還是有一點點區別的,因為puts函數是自動在輸出的字符串尾部加入一個回車符,在有些比賽的check腳本中是通過比較兩次輸入與輸出是否全等,就會導致這種patch方法不能過關。

方法二

加入一個%s參數

可以看到除了傳遞格式化字符串參數以為,程序還存在mov eax,0,我們可以利用該指令修改,但是想要修改為%s還有一個問題,程序中不存在%s這個字符,就需要我們手動添加進去

我們可以在.eh_frame這個段中填入%s這個字符串,這個段中的信息不會影響程序的正常運行。

記住填入的地址0x400c01

mov edi, offset 0x400c01;mov rsi,offset format;

完成參數修改

修改完成

堆之uaf漏洞

堆中較為常見的漏洞use after free

漏洞原理

由于堆塊釋放后沒有給指針置空,使得被釋放的堆塊能夠被修改或者重復使用,導致漏洞

例子

free完之后沒有將指針置空,很明顯的uaf漏洞,想要修補uaf漏洞,則將free之后的指針置空即可

可以看到在調用完free之后,沒有多少空間可以寫下新的匯編代碼,因此需要與上一個方法一致,跳轉到.eh_frame段上

將call free指令修改為跳轉指令,在.eh_frame段上寫匯編代碼

call 0x900; ? ? ? ? ? #調用free函數mov ? ? eax, [rbp-0xc]; #取出下標值cdqe;lea ? ? rdx, ds:0[rax*8];lea rax, qword ptr [heap];mov r8,0; #段地址不能直接賦予立即數mov [rdx+rax],r8;jmp 0xD56;

patch效果

5

總結

  • 對于棧溢出來說,patch比較簡單,只需要修改輸入長度即可

  • 對于格式化字符串漏洞來說,若有puts函數則將printf函數修改為puts函數,若沒有則在.eh_frame段上創造%s

  • 對于堆的uaf來說,漏洞patch思路很簡單,只需要將指針置空即可,但是需要了解匯編代碼。

6

參考文章

https://xz.aliyun.com/t/5868

7

相關實驗

CTF-PWN練習?

https://www.hetianlab.com/expc.do?ec=ECID172.19.104.182014103116591300001

PWN是CTF競賽中的主要題型之一,主要考查參賽選手的逆向分析、漏洞挖掘以及Exploit編寫能力。通過由淺入深的方式,一步一步講解棧溢出攻擊原理與實踐,同時詳細介紹了Linux下GDB調試器的基本使用方法。

9/27

歡迎投稿至qq:3200599554

有才能的你快來投稿吧!

投稿細則都在里面了,點擊查看哦

重金懸賞 | 合天原創投稿漲稿費啦!

總結

以上是生活随笔為你收集整理的pwn和逆向的区别_Pwn之简单patch的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。