1. 程式人生 > >Linux下pwn預備知識

Linux下pwn預備知識

pwn,通過二進位制/系統呼叫等方式獲得目標主機的shell;

需要的工具:

pwntools:這個是基於python2工具,是寫exp和poc的利器,安裝參考連結:http://www.linuxdiyf.com/linux/21166.html ;

IDA Pro :強大的反編譯工具;

gdb:Linux除錯中必要用到的,這個裡面可以安裝一個pwndbg或gdb-peda的外掛(安裝參考連結:http://blog.csdn.net/gatieme/article/details/63254211)會更方便;

objdump,file和readelf:可以很快的知道elf程式中的關鍵資訊;

checksec:可以很方便的知道elf程式的安全性和程式的執行平臺;

#檢測elf的基本資訊:file

檢測檔案是多少位程式;

如果64位的Linux等無法執行32位程式,參考連結:https://blog.csdn.net/qq_40827990/article/details/83216139

readelf命令可以看到更加詳細的內容;

#檢測elf的安全性:checksec

參考連結:https://www.jianshu.com/p/8a9ef7205632

【1】RELRO:RELRO會有Partial RELRO和FULL RELRO,如果開啟FULL RELRO,意味著我們無法修改got表,設定符號重定向表格為只讀或在程式啟動時就解析並繫結所有動態符號,從而減少對GOT(Global Offset Table)攻擊。RELRO為” Partial RELRO”,說明我們對GOT表具有寫許可權
【2】Stack:如果棧中開啟Canary found,那麼就不能用直接用溢位的方法覆蓋棧中返回地址,而且要通過改寫指標與區域性變數、leak canary、overwrite canary的方法來繞過
【3】NX:NX enabled如果這個保護開啟就是意味著棧中資料沒有執行許可權,以前的經常用的call esp或者jmp esp的方法就不能使用,但是可以利用rop這種方法繞過
【4】PIE:PIE enabled如果程式開啟這個地址隨機化選項就意味著程式每次執行的時候地址都會變化,而如果沒有開PIE的話那麼No PIE (0x400000),括號內的資料就是程式的基地址 
【5】FORTIFY:FORTIFY_SOURCE機制對格式化字串有兩個限制(1)包含%n的格式化字串不能位於程式記憶體中的可寫地址。(2)當使用位置引數時,必須使用範圍內的所有引數。所以如果要使用%7$x,你必須同時使用1,2,3,4,5和6。