# pwn ## 概念 控制程式流程,進而發動攻擊,常是利用fuzz模糊測試或看原始碼與組合語言尋找能產生segmentation falut的情形 ## Program Structure  - text:為程式碼(binary),可讀不可寫 - Data:初始化全域變數 - BSS:為初始化全域變數 - Heap:動態記憶體空間,由下往上長(跟dsa學的一樣) - Stack:存放其他的資料,像會儲存call function 後要return的位置,由上往下長(跟dsa學的一樣) ## Security Options ### RELRO #### 概念 當我們在寫程式時常會利用一些內建的library,但我們通常在做成執行檔時不會把library包進去(減少空間),而是當使用者要使用時,再從使用者電腦中的library叫出來使用,而其中會用到的便是GOT 和 PLT,一開始我們呼叫到library的function時,我們會先去看GOT有沒有,如果沒有再用PLT去library找,再把找到的丟到GOT上,最後再被呼叫。 - NO RELRO:可寫link map,GOT - Partial RELRO :只有GOT可寫 - Full RELRO:都不可寫 ### Stack Canary rbp前塞一個random值,作為柵欄,如果有人想依靠填滿stack來修改rbp 或 return address時,就能透過檢測其根原本的值是否相同來判定是否遭到攻擊 ### NX(DEP,Data Execution Prevention) 可寫的不可執行,可執行的不可寫 ### PIE(Position Independent Executable) - 開啟時,data 段以及 code 段位址隨機化 - 關閉時,data 段以及 code 段位址固定 ### ASLR(Address Space Layout Randomization) - 記憶體位址隨機變化 - 每次執⾏時,stack、heap、library 位置都不⼀樣 - ASLR 是系統設定,非程式的設定 ## Tools - nc/ncat : pwn題目中常用的遠端連線工具 - checksec:查看程式有打開那些安全保護,通常在攻擊前先做的 - gdb-vmmap:查看目前程式記憶體的分布 - pwntools:和遠端程式互動的python套件,[https://github.com/Gallopsled/pwntools](https://) - radare2:靜動態分析都可以做,但推薦動態用gdb,靜態用這個[https://frozenkp.github.io/reverse/radare2/](https://) [https://frozenkp.github.io/reverse/radare2/](https://) # Buffer Overflow ## 概念 輸入時沒有控制輸入的長度導致記憶體空間被覆蓋掉,常發生在char陣列的輸入,我們通常會在stack上放return address 和 rbp 那麼我們可能依靠填滿stack的方式來改變rbp或return address的值,而前面stack canary是一種防禦方法,但有機會繞過,能用到此種攻擊常是因為程式使用了gets和read - 即使遇到stack canary,我們也能依靠填canary上面的local variable來攻擊 # Libc 利用reload的概念,改寫呼叫got的function來讓其呼叫的function不是他原本的預期
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up