二進制漏洞與利用學習

二進制漏洞與利用學習
一、主要術語

  • Binary:由編譯類語言生成的可執行程序
  • Vulnerability:Binary中包含的可被利用的Bug
  • Exploit:藉助Vulnerability來劫持Binary控制流的、經過特殊構造的數據
  • 0day:可被exploit的位置Vulnerability
  • Pwn:發現Vulnerability以及開發exploit的工作

二、目的:

  • 獲取shell
  • 獲取計算機上的敏感信息
  • 上串並安裝Malware
  • 對計算機實施破壞

三、根本原因:
(1)通道問題:

  • 計算機中數據和控制通道隔離性差
  • 存在從數據通道信息轉移到控制通道的可能

(2)邏輯問題

  • 對邊界條件的檢查不完善
  • 對內存管理不善
  • 邏輯不嚴謹或太複雜

四、分類:

  • Stack-Based
  • Heap-Based
  • Integer Issue
  • Pointer Issue
  • Format Strig Vulnerability
  • Race Condition

五、基礎知識(Knowledge Base)

  • ELF:linux中可執行文件
  • PE:windows下可執行文件
    ELF文件格式

  • PLT:程序局部表

  • GOT:全局偏移表
  • X86指令大小不固定,不對齊,ARM指令大小爲4B,且對齊(Aligned)

六、防護機制:
1.NX/W^X
(1)解釋:數據頁不可執行,代碼頁不可寫
(2)Bypass:

- ret2lib:令控制流跳轉到庫代碼中執行
- ROP(Return Oriented Programming):從內存中尋找Gadget(每個Gadget都以return結尾,返回調用該函數的代碼所在的rip後的地址)並將其組成具有一定功能的代碼 ,可以用RoPgadget尋找GadGet

2.ASLR:
(1)解釋: 內核、堆棧、動態庫的加載地址具有隨機性
開啓PIE的情況下,主程序的加載基地址也隨機
(2)Bypass:

- 爆破

                32位環境,linux libc的加載基址爲0Xf7xxx000

-  信息泄露:

                獲取GOT表(含大量函數指針)的內容
                獲取main函數返回地址

3.Stack Guard
Canaries/Cookies:在棧中的局部變量和返回地址間插入一個難以預測的值(Canary),當函數返回時,將檢查Canary是否被破壞
4.StackShield:
將返回地址拷貝到影子棧中,返回時比較棧上的返址與影子棧中的返址
5.SSP
編譯時對變量重排序,將函數指針放在低低址,緩衝區放在高地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章