安裝:
sudo apt install checksec
介紹:
1.Relro:Full Relro(重定位表只讀)
Relocation Read Only, 重定位表只讀。重定位表即.got 和 .plt 兩個表。
2.Stack:No Canary found(能棧溢出)
Canary, 金絲雀。金絲雀原來是石油工人用來判斷氣體是否有毒。而應用於在棧保護上則是在初始化一個棧幀時在棧底(stack overflow 發生的高位區域的尾部)設置一個隨機的 canary 值,當函數返回之時檢測 canary 的值是否經過了改變,以此來判斷 stack/buffer overflow 是否發生,若改變則說明棧溢出發生,程序走另一個流程結束,以免漏洞利用成功。 因此我們需要獲取 Canary 的值,或者防止觸發 stack_chk_fail 函數,或是利用此函數。
3.NX: NX enable(不可執行內存)
Non-Executable Memory,不可執行內存。了解 Linux 的都知道其文件有三種屬性,即 rwx,而 NX 即沒有 x 屬性。如果沒有 w 屬性,我們就不能向內存單元中寫入數據,如果沒有 x 屬性,寫入的 shellcode 就無法執行。所以,我們此時應該使用其他方法來 pwn 掉程序,其中最常見的方法為 ROP (Return-Oriented Programming 返回導向編程),利用棧溢出在棧上布置地址,每個內存地址對應一個 gadget,利用 ret 等指令進行銜接來執行某項功能,最終達到 pwn 掉程序的目的。
4.PIE: PIE enable(開啟ASLR 地址隨機化)
Address space layout randomization,地址空間布局隨機化。通過將數據隨機放置來防止攻擊。
參考:https://www.jianshu.com/p/31449fdfe35f
詳細分析:https://www.it610.com/article/1295251903365586944.htm