攻防世界(Pwn) forgot---栈溢出;(方法一)
攻防世界(Pwn) forgot—棧溢出;(方法二)
介紹
這道題表面看起來有點復雜,其實很簡單,有兩種方法可以來做這一道題;
方法一(精確打擊)
文件運行流程是: 1.先輸入名字 2. 輸入一串字符串 3.for循環驗證字符串v5的值改變;4.返回v3[–5]函數;
1.溢出點
scanf函數
 2.漏洞利用
 
 最終返回的是 v3[--v5] 的一個函數, v5的值是在for循環之中改變的;v5的初始值是1;
把函數返回的目的地改為 0x80486CC就可以了;
 只 要 修 改 v3[0]-v3[9] 其中一個就可以了,這里選擇修改v3[0],(最簡單,常規的選擇)
v3[--v5] , v5的值是在for循環之中改變的;v5的初始值是1;
當v5的值在for循環一直保持不變,一直是1的話,就返回了 v3[0],把地址改為 0x80486CC
-----------------------------------------------------------------------------------------------------------------------.
 
 v2輸入是溢出點
 v2,v3兩組數據在棧上是相鄰的, v2的長度大于 20h之后就會覆蓋v3的返回值了
-----------------------------------------------------------------------------------------------------------------------.
EXP
from pwn import * io = remote('111.200.241.244', 59837) payload = 'A'*0x20 + p32(0x80486cc) io.sendlineafter(">","hhh") io.sendlineafter(">",payload) io.interactive()Payload解釋:
'A'*0x201.為什么是 0x20?
 
 因為v2的長度是32, 換成16進制是 0x20 溢出
2.為什么是’A’
A的ASCII碼值是41
在下列判斷條件中不滿足任何一個判斷,可以保證v5的值一直是1;
點開其中一個判斷條件來看:
 
 41不在其范圍內
有 什 么 問 題 歡 迎 留 言 🌰
總結
以上是生活随笔為你收集整理的攻防世界(Pwn) forgot---栈溢出;(方法一)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 详细讲解Python中继承内容之 单继承
- 下一篇: 攻防世界(Pwn) forgot---栈
