Pwn 6 ROP 1 靜態編譯

2022-09-17 05:03:10 字數 3358 閱讀 3541

protection

aslr

位址隨機化

address space layout randomization,程式每次執行時,stack、heap、library的位置都不一樣

$:ldd /bin/lib ldd命令 檢視當前的binary用了哪些library

檢查是否開啟aslr

dep

data execution prevention資料執行保護,又稱為nx

可寫的不能執行,可執行的不可寫

pie

位址無關可執行檔案

stack guard

編譯器對stack overflow的一種保護機制,可以有效的防止緩衝區溢位攻擊

rop(return oriented programming)是一種利用現有的程式片段組合出想要功能的技巧

可以使用rop解除dep限制,然後執行shellcode

可以使用rop繞過aslr限制、stackguard和pie

q:如何檢視有哪些保護 gdb checksee.sh

ropgadget:一小段以ret結尾的coderop chain:串聯在一起的gadget,組合出需要的功能

使用rop的關鍵

rop型別

rop查詢rop

我們要找的**是 ①pop eax ②2  把當前棧底的值給eax,即eax=2

執行它ida分析它 或者objdump –d –m intel ./file

ropgadget –binary ./shellcode > shellcode.txt #將gadget輸出到文字

查詢pop eax ; ret ebx/ecx/edx…

read 函式 eax =3 ebx=0 ecx=一段可寫的區域 edx=讀取的大小

如何尋找可寫的區域?

./file &返回後台執行的id

然後cat /proc/id/maps

第一段是讀-執行段

第二段是讀-寫段 獲得080ee000   不要看下面的heap那些

from pwn import *

r = remote('127.0.0.1',4000)

pop_eax_ret = 0x080b90f6

pop_ebx_ret = 0x080481c9

pop_ecx_ret = 0x080595b3

pop_edx_ret = 0x0806e7da

buf = 0x080ee000 - 100

rop = [#堆疊情況

然後找完eax,ebx,ecx,edx後 尋找int 0x80 ; ret

沒有怎麼辦?

獲得0x0806ef00

read函式讀到80edf9c,雙擊這個位址即可看到輸入的/bin/sh

然後寫執行函式

eax=0x0b  ebx要執行的命令 放在buf裡的/bin/sh ecx/edx賦值為0

如果不放int_0x80_ret,堆疊排列的再好也不會生效

ropgadget –binary ./shellcode > shell.txt

在gadget查詢有用的,如pop eax ; ret | pop ebx ; ret |int 0x80 ; ret (或者ropgadge –binary rop –opcode cd80c3 )

查詢可寫入的緩衝區:方法是 ./rop & 檢視程序id ,然後cat /proc/id號/maps 獲得可寫段 然後倒著-多少

最後在堆疊的排布上要寫int_0x80_ret 否則程式無法執行

pop edx; pop ecx;pop edx;入棧順序為先寫edx,再寫入ecx,最後寫入ebx

buuoj 第六章 CTF之PWN章 ROP

保護。啥沒有。在除錯過程中發現最後會出問題,然後gdb.attach貼上以後開始調。這個地方卡住是因為沒有棧對齊,你可以看到此時rsp是78,但是他要求16位對齊,最後得是0,所以需要在system位址前面加上個ret。具體的看下面的wp expfrom pwn import context.log...

pwn 練習6 攻防世界 level3

這個題做的蠻久的,老樣子,基本操作來一遍 通過ida分析後,沒有system函式,也沒有 bin sh這樣的字眼,但題目給了乙個動態庫,於是我們可以通過另乙個庫,來調出system bin sh 兩個呼叫的動態函式庫相同,所以write函式和system函式之間的位址差值是相同的,所以我們的目的是求...