ctf(pwn)栈溢出介绍
生活随笔
收集整理的這篇文章主要介紹了
ctf(pwn)栈溢出介绍
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
棧溢出指的是程序向棧中某個變量中寫入的字節數超過了這個變量本身所申請的字節數,因而導致
與其相鄰的棧中的變量的值被改變。這種問題是一種特定的緩沖區溢出漏洞,類似的還有堆溢出,bss
段溢出等溢出方式。棧溢出漏洞輕則可以使程序崩潰,重則可以使攻擊者控制程序執行流程。此外,我們也不難發現,發生棧溢出的基本前提是
一般來說,我們會有如下的覆蓋需求
之所以我們想要覆蓋某個地址,是因為我們想通過覆蓋地址的方法來直接或者間接地控制程序執行流
程。
若想更進一步層次的了解請參考例題: 攻防世界(Pwn) forgot—棧溢出;(方法一)
做題過程:
一. 尋找危險函數
通過尋找危險函數,我們快速確定程序是否可能有棧溢出,以及有的話,棧溢出的位置在哪里。常見的危險函數如下
輸入gets,直接讀取一行,忽略'\x00'scanfvscanf輸出sprintf字符串strcpy,字符串復制,遇到'\x00'停止strcat,字符串拼接,遇到'\x00'停止bcopy二.確定填充長度 ?
這一部分主要是計算我們所要操作的地址與我們所要覆蓋的地址的距離。常見的操作方法就是打開 IDA,根據其給定的地址計算偏移。一般變量會有以下幾種索引模式
相對于棧基地址的的索引,可以直接通過查看 EBP 相對偏移獲得 相對應棧頂指針的索引,一般需要進行調試,之后還是會轉換到第一種類型。 直接地址索引,就相當于直接給定了地址。一般來說,我們會有如下的覆蓋需求
之所以我們想要覆蓋某個地址,是因為我們想通過覆蓋地址的方法來直接或者間接地控制程序執行流程。
三 構造 payload, 編寫 EXP
總結
以上是生活随笔為你收集整理的ctf(pwn)栈溢出介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop环境搭建(二)CentOS7
- 下一篇: 攻防世界(Pwn)dice_game,