網絡緩沖區溢出攻擊的攻擊方式有以下這些:
植入法代碼放置攻擊:攻擊者向被攻擊的程序植入一個字符串,程序會把這個字符串放到緩沖區里。這個字符串包含可以在被攻擊的硬件平臺上運行的指令序列。攻擊者用被攻擊程序的緩沖區來存放攻擊代碼,緩沖區可以設在任何地方,如堆棧(stack,自動變量)、堆(heap,動態分配的內存區)和靜態資料區。
參數傳遞法代碼放置攻擊:如果被攻擊的程序含有攻擊者想要的代碼,攻擊者所要做的只是對代碼傳遞一些參數。例如,攻擊代碼要求執行“exec (/bin/sh)”,而在libc庫中代碼執行“exec (arg)”,其中arg是一個指向一個字符串的指針參數,那么攻擊者只要把傳入的參數指針改向指向“/bin/sh”即可。
函數返回地址攻擊:當一個函數調用發生時,調用者會在堆棧中留下函數返回地址,它包含了函數結束時返回的地址。攻擊者通過溢出這些自動變量,使這個返回地址指向攻擊代碼,這樣就改變了程序的返回地址,當函數調用結束時,程序跳轉到攻擊者設定的地址,而不是原先的地址。這類的緩沖區進出被稱為“stack smashing attack”,是目前常用的緩沖區溢出攻擊方式。
函數指針攻擊:可以用來定位任何地址空間。例如,void(*foo)()中聲明了一個返回值為void函數指針類型的變量foo。所以攻擊者只需在任何空間內的函數指針附近找到一個能夠溢出的緩沖區,然后溢出這個緩沖區來改變函數指針即可。當程序通過函數指針調用函數時,程序的流程就會發生改變,以實現攻擊者的目的。
void(*foo)()
長跳轉緩沖區攻擊:在C語言中包含了一個簡單的檢驗/恢復系統,稱為“setjmp/longjmp”,意思是在檢驗點設定“setjmp(buffer)”,用“longjmp(buffer)”來恢復檢驗點。如果攻擊時能夠進入緩沖區的空間,那么“longjmp(buffer)”實際上是跳轉到攻擊者的代碼。像函數指針一樣,longjmp緩沖區能夠指向任何地方,所以攻擊者所要做的就是找到一個可供溢出的緩沖區。
放置綜合代碼的流程控制攻擊:最常見的緩沖區溢出攻擊方法是在一個字符串中綜合了代碼植入和函數返回地址。攻擊者定位一個可供溢出的自動變量,向程序傳遞一個很大的字符串,引發緩沖區溢出,改變活動記錄的同時植入了代碼。攻擊者可以在一個緩沖區內放置代碼,這是不能溢出的緩沖區。再通過溢出另外一個緩沖區來轉移程序的指針。如果攻擊者試圖使用已經常駐的代碼而不是從外部植入代碼,那么攻擊者通常必須把代碼作為參數調用。因為C語言在習慣上只為用戶和參數開辟很小的緩沖區,因此這種漏洞攻擊的實例十分常見。
回答所涉及的環境:聯想天逸510S、Windows 10。
網絡緩沖區溢出攻擊的攻擊方式有以下這些:
植入法代碼放置攻擊:攻擊者向被攻擊的程序植入一個字符串,程序會把這個字符串放到緩沖區里。這個字符串包含可以在被攻擊的硬件平臺上運行的指令序列。攻擊者用被攻擊程序的緩沖區來存放攻擊代碼,緩沖區可以設在任何地方,如堆棧(stack,自動變量)、堆(heap,動態分配的內存區)和靜態資料區。
參數傳遞法代碼放置攻擊:如果被攻擊的程序含有攻擊者想要的代碼,攻擊者所要做的只是對代碼傳遞一些參數。例如,攻擊代碼要求執行“exec (/bin/sh)”,而在libc庫中代碼執行“exec (arg)”,其中arg是一個指向一個字符串的指針參數,那么攻擊者只要把傳入的參數指針改向指向“/bin/sh”即可。
函數返回地址攻擊:當一個函數調用發生時,調用者會在堆棧中留下函數返回地址,它包含了函數結束時返回的地址。攻擊者通過溢出這些自動變量,使這個返回地址指向攻擊代碼,這樣就改變了程序的返回地址,當函數調用結束時,程序跳轉到攻擊者設定的地址,而不是原先的地址。這類的緩沖區進出被稱為“stack smashing attack”,是目前常用的緩沖區溢出攻擊方式。
函數指針攻擊:可以用來定位任何地址空間。例如,
void(*foo)()中聲明了一個返回值為void函數指針類型的變量foo。所以攻擊者只需在任何空間內的函數指針附近找到一個能夠溢出的緩沖區,然后溢出這個緩沖區來改變函數指針即可。當程序通過函數指針調用函數時,程序的流程就會發生改變,以實現攻擊者的目的。長跳轉緩沖區攻擊:在C語言中包含了一個簡單的檢驗/恢復系統,稱為“setjmp/longjmp”,意思是在檢驗點設定“setjmp(buffer)”,用“longjmp(buffer)”來恢復檢驗點。如果攻擊時能夠進入緩沖區的空間,那么“longjmp(buffer)”實際上是跳轉到攻擊者的代碼。像函數指針一樣,longjmp緩沖區能夠指向任何地方,所以攻擊者所要做的就是找到一個可供溢出的緩沖區。
放置綜合代碼的流程控制攻擊:最常見的緩沖區溢出攻擊方法是在一個字符串中綜合了代碼植入和函數返回地址。攻擊者定位一個可供溢出的自動變量,向程序傳遞一個很大的字符串,引發緩沖區溢出,改變活動記錄的同時植入了代碼。攻擊者可以在一個緩沖區內放置代碼,這是不能溢出的緩沖區。再通過溢出另外一個緩沖區來轉移程序的指針。如果攻擊者試圖使用已經常駐的代碼而不是從外部植入代碼,那么攻擊者通常必須把代碼作為參數調用。因為C語言在習慣上只為用戶和參數開辟很小的緩沖區,因此這種漏洞攻擊的實例十分常見。
回答所涉及的環境:聯想天逸510S、Windows 10。