**說,要想在安全這個行業走得遠,首先要看興趣。其實我有些懷疑自己的興趣,不過幹一行愛一行。
接下來就開始我們linux環境下的準備工作啦~~
敲重點!!兩個踩過的大坑
1、務必使用64位機器,pwntools不支援32位python
2、32位機器只能編譯生成32位程式,64位機器可以生成32位和64位程式,因此不要擔心在64位系統中如何分析32位程式
需要用到的工具:
1、 gcc編譯器
2、 gdb 動態偵錯程式、peda外掛程式
3、 objdump 檢視二進位制檔案資訊的工具
4、 pwntools 編寫exp利器
5、 ropgadget在二進位制檔案中搜尋gadget
6、 x64系統中安裝32位程式執行和編譯環境,編譯時新增-m32選項生成32位程式
需要具備的基礎知識:
1、 基礎彙編知識,如esp、ebp、eip等暫存器,mov、add、call、ret等指令
2、 執行時c語言在記憶體中的分配,重點為棧(儲存函式的引數、區域性變數等)
3、 函式呼叫與返回過程
4、 二進位制程式保護機制,nx/dep、sp、aslr、pie等
5、 動態鏈結中got表、plt表與延遲繫結技術
6、 x64環境下考慮與32位的不同,暫存器以及函式呼叫
在時間允許的情況下,該部分知識我也會單獨整理的~
實驗思路:(未開啟pie,程式裝載位置確定)
1、 ret2shellcode:關閉全部保護機制,通過往棧中注入**實現棧溢位攻擊
2、 ret2libc:開啟nx/dep機制,使得注入的**不能執行,尋找libc中函式執行
3、 rop:開啟aslr,libc庫裝載位置隨機,考慮洩露libc中某個函式如wirte(),根據相對位址來計算
4、 在不獲取目標機器libc.so的情況下使用記憶體洩露進行rop攻擊
(234是在越來越強的保護機制下尋找system()函式和字串/bin/sh位址,構造system()函式棧,從而在不注入**的情況下執行system(「/bin/sh」)函式開啟shell)
實驗以蒸公尺的例子做演示,加入更詳細的步驟以及解釋。
棧溢位攻擊實施基本思路:
1、 找到函式返回位址,即輸入棧中的資料要覆蓋到**
2、 用什麼值覆蓋返回位址,即控制程式流,使其執行新的返回位址處的指令
3、 編寫shellcode(先使用組合語言編寫,再編譯反彙編得到機器碼),將shellcode注入棧中,使返回位址指向shellcode(此步驟在**注入攻擊中需要,**復用攻擊直接利用記憶體中存在的**)
4、 編寫exp
最後想說一句,工欲善其事,必先利其器!所以在開始實驗之前最好一次性將要用到的工具安裝好~以免實驗做到一半要安裝軟體時發現大坑,比如我在32位系統上安全pwntools折騰了好久哈哈哈哈
Linux X86在下面TLB機制
tlb translation lookaside buffer 快表。直譯為翻譯後備緩衝器,也能夠理解為頁表緩衝。位址變換快速快取。因為頁表存放在主存中,因此程式每次訪存至少須要兩次 一次訪存獲取實體地址,第二次訪存才獲得資料。提高訪存效能的關鍵在於依靠頁表的訪問區域性性。當乙個轉換的虛擬頁號被使...
棧溢位攻擊c語言 棧溢位攻擊
我們先來看下面的乙個例子 include int main gets str printf str s n str return 0 在 main 函式內部定義乙個字元陣列,並通過 gets 為它賦值。在vs2010 debug模式下執行程式,當輸入的字元不超過10個時,可以正確輸出,但是當輸入的字...
linux下的棧溢位實驗
關於作業系統的aslr位址隨機化 首先我們在實驗之前需要了解以下aslr機制。即linux平台下的位址隨機化機制。它將程序中的某些記憶體空間位址進行隨機化來增大入侵者 目的位址的難度。從而降低被成功入侵的風險。當前linux windows等主流作業系統都已經採用該技術。linux下的aslr分為0...