程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 入侵檢測-關於一個簡單的堆棧例子

入侵檢測-關於一個簡單的堆棧例子

編輯:編程解疑
關於一個簡單的堆棧例子

我在讀一本入侵檢測技術的書,看到一個簡單的堆棧溢出示例,看不懂,請各位大神解釋一下是什麼意思圖片說明圖片說明

最佳回答:


簡單說就是通過程序編寫的不嚴格,使局部變量溢出從而覆蓋掉堆棧上的返回值。調用一個函數時,以__stdcall為例,先把參數入棧,然後時返回地址入棧, CPU執行現場跳轉到函數中 ,然後是ebp寄存器入棧,隨後局部變量和寄存器入棧,不同的編譯器可能會有所差別,比如微軟CL編譯器在處理Debug和Release時是有一些區別的,但大致是相同的,溢出攻擊,簡單說就是溢出覆蓋掉了返回值,這樣就可以在函數返回時跳轉到hacker指定的一個地址,如果hacker事先發送精心設計好的數據,就可以在遠程計算機上執行他想執行的代碼,然後反彈一個shell給hacker,hacker就可以在目標主機上上傳和執行程序,如果溢出的程序沒有權限,hacker還可以利用本地提權漏洞提權得到管理員/root權限,隨後以這台主機為跳板,滲透網絡中的其他主機!

後話:人類為了抑制溢出攻擊,具有劃時代意義的成果有:DEP(數據執行保護)、ALSR(地址空間分布隨機化)等。簡單說DEP通過將指定虛擬內存頁面設置為“不可執行”,當然需要硬件支持,所有和Intel x86和amd x86_64兼容的CPU均支持,當CPU執行不可執行頁面的代碼時,就會出現虛擬內存違規訪問,從而程序崩潰退出,在部分Windows系統上,操作系統還會在右下角彈出一個氣泡“數據執行保護已終止XXX程序”。繞過DEP在沒有ALSR的系統上(比如XP)還是比較簡單的,溢出覆蓋返回值為VirtualProtect,修改指定內存頁面的訪問規則即可。ALSR簡單說就是將程序載入內存時不載入程序要求載入的地方,而是隨機載入(當然操作系統必須遍歷程序代碼,然後對導入的函數、數據、以及自己的函數調用進行“重定向”),這樣函數地址什麼的全是隨機的了,hacker溢出後就不知道往哪個地址調用VirtualProtect了,非常棘手,360為何對自己的XP甲盾如此有信心?因為XP甲盾通過驅動攔截可執行模塊載入並修改了基地址,相當於在XP上實現了ALSR,當然代價是使系統運行效率下降。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved