棧溢位是緩衝區溢位的一種,分配的記憶體空間是有限的,如果輸入超長的字串必然會導致溢位。緩衝區溢位中最危險的是堆疊溢位,因為入侵者可以利用堆疊溢位,在函式返回時改變返回程式的位址,讓其跳轉到任意位址,帶來的危害一種是程式崩潰導致拒絕服務,另外一種就是跳轉並且執行一段惡意**比如得到系統許可權。
先看一段**:
char dest[10];
scanf("%s",dest);
這兩行**宣告了乙個區域性變數,然後用scanf函式讀入字串,但是這個程式沒有限制字串長度的地方。如果使用者輸入的字串長度大於十個字元,那麼就會產生棧溢位。
而函式的區域性變數是儲存在棧中的,這種錯誤就是棧溢位。
還是剛才的那一段**:
char dest[10];
scanf("%s",dest);
編譯之後用ida開啟,應該是乙個普通棧應該有的結構:
-0000000c dest db ? ;
-0000000b db ? ;
-0000000a db ? ;
-00000009 db ? ;
-00000008 db ? ;
-00000007 db ? ;
-00000006 db ? ;
-00000005 db ? ;
-00000004 db ? ;
-00000003 db ? ;
-00000002 db ? ;
-00000001 db ? ;
+00000000 s db 4 dup(?)
+00000004 r db 4 dup(?)
+00000008
+00000008 ; end of stack variables
dest就是剛才scanf讀入字串的存放位置。下面的「s」代表ebp暫存器(擴充套件基址指標暫存器,其內存放乙個指標,該指標指向系統棧最上面乙個棧幀的底部。)的位置,「r」代表的就是函式的返回位置。
如果我輸入的字串過長,比如「aaaaaaaaaaaa」+「bbbb」+「cccc」,那麼現在棧中的資料會是這樣:
-0000000c dest db 'a' ;
-0000000b db 'a' ;
-0000000a db 'a' ;
-00000009 db 'a' ;
-00000008 db 'a' ;
-00000007 db 'a' ;
-00000006 db 'a' ;
-00000005 db 'a' ;
-00000004 db 'a' ;
-00000003 db 'a' ;
-00000002 db 'a' ;
-00000001 db 'a' ;
+00000000 s db 4 dup("bbbb")
+00000004 r db 4 dup("cccc")
+00000008
+00000008 ; end of stack variables
可以看到原來應該是函式返回位址的地方被覆蓋了,現在函式返回的時候eip指標值變成了「cccc」如果這裡不是「cccc」而是精心計算好的位址,那麼就會控制eip(執行介面程式)然後系統就會被黑客任意跳轉,並以此為跳板進而控制電腦。 檔案上傳漏洞
php語言 form表單 tmp臨時目錄 file 判斷檔案資訊 臨時檔案放入想要放的位置 移動臨時檔案 1.伺服器配置不當 2.開源編輯器上傳漏洞 3.本地檔案上傳限制被繞過 4.過濾不嚴或被繞過 5.檔案解析漏洞導致檔案執行 6.檔案上傳路徑 1.前段解析指令碼語言 2.允許上傳指令碼檔案 3....
檔案上傳漏洞
什麼是檔案上傳 一些web應用程式中允許上傳,文字或者其他資源到指定的位置,檔案上傳漏洞就是利用這些可以上傳的地方將惡意 植入到伺服器中,再通過url去訪問以執行 webshell 以web 方式進行通訊的命令直譯器,也叫 後門。本質上講,webshell 就是乙個能夠執行指令碼命令的檔案,其形式可...
檔案上傳漏洞
檔案上傳漏洞的概述 上傳漏洞的危害 檔案上傳漏洞的利用 檔案上傳漏洞的防禦 1 背景 什麼是檔案上傳 為什麼會有檔案上傳 在 運營過程中,不可避免地要對 的某些頁面或者內容進行更新,這個時候需要使用到 的檔案上傳功能。如果不對被上傳的檔案進行限制或者限制被繞過,該功能便有可能會被利用上傳可執行檔案 ...