學習筆記 CTF PWN選手的養成(二)

2021-09-29 22:11:52 字數 1801 閱讀 9397

課時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 原始檔 壓縮...