pwn 程式保護

2021-10-09 09:17:05 字數 999 閱讀 1956

relro:    partial relro

stack: no canary found

nx: nx enabled

pie: no pie (0x8048000)

nx:堆疊不可執行

stack: canary 保護

pie:  記憶體位址隨機化機制,關閉後程式的plt表與got表不會發生變化,上次執行時是什麼樣子,這次位址還是什麼樣子

linux平台下除了pie還有位址空間分布隨機化(aslr)的機制。簡單來說即使可執行檔案開啟了 pie 保護,還需要系統開啟 aslr 才會真正打亂基址,否則程式執行時依舊會在載入乙個固定的基址上(不過和 no pie 時基址不同)。我們可以通過修改/proc/sys/kernel/randomize_va_space來控制 aslr 啟動與否,具體的選項有

aslr的是作業系統的功能選項,作用於executable(elf)裝入記憶體執行時,因而只能隨機化stack、heap、libraries的基址;而pie(position independent executables)是編譯器(gcc,..)功能選項(-fpie),作用於excutable編譯過程,可將其理解為特殊的pic(so專用,position independent code),加了pie選項編譯出來的elf用file命令檢視會顯示其為so,其隨機化了elf裝載記憶體的基址(**段、plt、got、data等共同的基址)。

relro

relocation read-only (relro) 可以使程式某些部分成為唯讀的。它分為兩種,partial relro 和 full relro,即 部分relro 和 完全relro。

partial relro 是 gcc 的預設設定,non-plt got is read-only 非plt的 got是唯讀的,也就是與plt對應的got表仍然可寫

full relro 使整個 got 唯讀,從而無法被覆蓋,但這樣會大大增加程式的啟動時間,因為程式在啟動之前需要解析所有的符號。

pwn 幾種保護方式

arch amd64 64 little relro會有partial relro和full relro,如果開啟full relro,意味著我們無法修改got表 relro full relro 重定向 stack no canary found 棧檢查 nx nx enabled 不可執行 pi...

pwn題編譯時的保護選項

nx z execstack z noexecstack 關閉 開啟 不讓執行棧上的資料,於是jmp esp就不能用了 canary fno stack protector fstack protector fstack protector all 關閉 開啟 全開啟 棧裡插入cookie資訊 as...

PWN 基礎篇 保護函式和溢位例項

二 神奇的小知識 三 例項教學 棧溢位保護是一種緩衝區溢攻擊緩解手段,當函式存在緩衝區溢位攻擊漏洞時,攻擊者可以覆蓋棧上的返回位址來讓shellcode能夠得到執行,當啟動棧保護後,函式開始執行的時候會顯往棧裡插入cookie的資訊,當函式真正返回的時候會驗證cookie資訊是否合法,如何不合法就停...