課時1 棧溢位-這些都是套路
0x01 基礎知識
1、暫存器:rsp/esp、rbp/ebp等
2、棧:
3、函式呼叫:call、ret
4、呼叫約定:
5、引數傳遞:取決於呼叫約定,預設如下
0x02 棧溢位的保護機制
1、棧上的資料無法被當成指令來執行
2、讓攻擊者難以找到shellcode位址
3、檢測stack overflow
4、現在nx+stack canary+aslr基本是標配
0x03 棧溢位的利用方法
1、現代棧溢位利用技術基礎:rop
alictf 2016:vss
plaidctf 2013:ropasaurusrex
根據r0pbaby的writeup重寫exp
嘗試做一下vss和ropasaurusrex
2、利用signal機制的rop技術:srop
defcon 2015 qualifier ****up(這題比較難)
建議自己寫乙個demo自己測試
3、沒有binary怎麼辦:brop
4、劫持棧指標:stack pivot(很重要)
向目標緩衝區填入棧資料(如rop chains),然後劫持esp到目標緩衝區。劫持esp的方法有很多,最常用的就是rop時利用可以直接改寫esp的gadget,如pop esp,ret;
是一種相對常用的利用技術,不僅用於棧溢位,也可以用在其他可以劫持控制流的漏洞。
溢位位元組數有限,無法完成rop
棧位址未知且無法洩露,但是某些利用技術卻要求知道棧位址(ret2 dlresolve)
劫持esp到攻擊者控制的區域,也就變相的控制了棧中的資料,從而可以使非棧溢位的控制流劫持攻擊也可以做rop
存在位址已知且內容可控的buffer:(1)bss段,由於bss段尾端通常具有很大的空餘空間(pagesize-usedsize),所以bss段段尾端也往往是stack pivot的目標;(2)堆塊,如果堆位址已洩且堆上的資料可被控制,那堆也可以作為stack pivot的目標
ekoparty ctf 2016 ****zing-exploit-200(基於棧溢位的stack pivot,必做作業)
hackim ctf 2015-exploitation 5(基於堆溢位的stack pivot,選做作業)
《程式設計師的自我修養》
codegate ctf finals 2015 yocto(fake relplt)
hitcon quals ctf2015 readable(fake linkmap)
hack.lu's 2015 oreo
7、繞過stack canary:改寫指標與區域性變數、leak canary、overwrite canary
不覆蓋stack canary,只覆蓋stack canary前的區域性變數、指標。(1)已經幾乎不可行,因為編譯器會根據占用記憶體大小從小到大排列變數。(2)但是在某些情況下依然可用。
leak canary:可以通過printf洩露,canary一般從00開始。主要是這種方法。
overwrite canary:canary在tls,tls位址被隨機化。這種方法用的不是特別多。
8、溢位位數不夠怎麼辦:覆蓋ebp、partial overwrite
如何養成學習的習慣
學如逆水行舟,不進則退。每天進步一點點,總有一天能完成蛻變。本文是自己一路上走來的一些心得體會,希望能幫助到一些人逐步養成學習的習慣。已經很勤奮的學習,但是覺得效率不高。偶爾心血來潮 可能是聽到某個勵志故事或者聽了一首令人亢奮的歌曲 會進行學習,但無法長期堅持。基本沒有在業餘時間學習,但內心有一顆想...
養成好的學習習慣
學習一項知識,必須問自己三個重要問題 1.它的本質是什麼。2.它的第一原則是什麼。3.它的知識結構是怎樣的。你的問題到底是什麼?提醒自己思考不要偏離問題。時常反省和注意自己的思維過程。尤其是當遇到無法理解或解決的問題之後,最需要將原先的思維過程回顧一遍,看看到底哪個環節被阻塞住了妨礙了理解。問題到底...
linux達人養成計畫學習筆記(四) 壓縮命令
一 常見的壓縮格式 二 zip格式壓縮 1 壓縮檔案 資料夾 zip 壓縮後檔名 zip結尾 壓縮檔案名 zip r 壓縮後資料夾 zip結尾 壓縮檔案 2 解壓縮 unzip 壓縮檔案三 gz格式壓縮 1 壓縮 gzip 原始檔 壓縮為.gz格式的壓縮檔案,原始檔會消失 gzip c 原始檔 壓縮...