week1
babysc
- 思路 :
- shellcode 對(duì)應(yīng)(index + 1)異或處理后再執(zhí)行
- exp
aaaaaaaaaa
- 思路:
- 按照邏輯 輸入 超過(guò)99 個(gè)a 即可執(zhí)行 system("/bin/sh")
薯片拯救世界1
-
思路 :
- 這道題目是一個(gè)比較flag 和 輸入是否相同的判斷邏輯
- 漏洞點(diǎn)在 對(duì)比的長(zhǎng)度上 , 對(duì)比的長(zhǎng)度由輸入的長(zhǎng)度決定,所以可以單個(gè)字符進(jìn)行逐個(gè)爆破,爆破難度為 256 * 0x18
- 爆破最后一個(gè)字符時(shí)有個(gè)bug,最后一個(gè)字符手動(dòng)猜測(cè)下 是 '}'
Steins;Gate
- 思路:
- 在 id 中輸入 /bin/sh , 方便最后跳轉(zhuǎn)
- 在 0x400958 位置的函數(shù)中 布置棧 滿足 0x400A00 的條件
- 在 0x400A00 函數(shù)中 leak canary
- 在 0x4008F6 函數(shù)中 棧溢出跳轉(zhuǎn)到后門函數(shù)執(zhí)行 system("/bin/sh")
- exp
week2
CSTW2
- 思路 :
- 數(shù)組指針負(fù)數(shù)溢出,可修改 got表 , 跳轉(zhuǎn)至后門函數(shù)
- exp
SteinsGate2
思路 :
在 上周 Steins_Gate 的基礎(chǔ)上多開了一個(gè) pie 保護(hù),
第一輪 leak 隨機(jī)數(shù)和 canary 之后 rop返回main函數(shù),
第二輪 leak 出 codebase , 然后利用后門函數(shù)和 id getshell
handsomeariis
- 思路 :
- 普通棧溢出 , 未給 libc , 需要使用 LibcSearcher 查找對(duì)應(yīng)版本的 libc
- exp
babyfmtt
- 漏洞點(diǎn):
- offbyone | 可以觸發(fā)__stack_chk_fail
- 格式化字符串 | 任意地址讀寫
- 思路:
- 利用 格式化字符串 修改 __stack_chk_fail@got 為 后門函數(shù)
- 利用 offbyone 觸發(fā) __stack_chk_fail
- exp
week 3
nameBook
- 漏洞點(diǎn)在于 edit 的堆溢出
- 過(guò)程:
- 1.unlink 獲取讀寫權(quán)限
- 2.修改 __free_hook 繞過(guò) Full Relro 執(zhí)行 system("/bin/sh")
- exp
薯片拯救世界3
- 漏洞點(diǎn)
- uaf
- 利用過(guò)程
- double free 修改 puts@got 為 后門函數(shù)地址 get shell
- exp
babytcache
- 漏洞點(diǎn): uaf
- 利用過(guò)程:
- 兩次 double free
- 第一次是 tcache double free , 特點(diǎn)是沒有檢查
- 第二次 因?yàn)?tcache 被破壞的next占用,直接進(jìn)入 fastbin , 進(jìn)行普通的 double free , 修改got 表 getshell
- 兩次 double free
- exp
Steins;Gate3
這道題目是在 SteinsGate2 的 基礎(chǔ)上限制了 棧溢出的輸入長(zhǎng)度,在 rbp之后只能修改4個(gè)字節(jié), 我自己想的思路是 4個(gè)字節(jié)修改到 leave_ret ,做一個(gè)棧遷移 到前方拓展可用的棧長(zhǎng)度即可
week4
3x18
- 這道題目 魔改自 pwnable 3x17
- 參考
- 功能流程:
- 一次任意地址寫
- 利用過(guò)程:
- 修改 fini_array 再次進(jìn)入 main ,觸發(fā)一次任意地址寫
- 因?yàn)?rbp 在 fini_array 附近 所以會(huì)觸發(fā) stack_canary , 劫持 _stack_chk_fail 中的一個(gè) plt 函數(shù),來(lái)進(jìn)行無(wú)限次任意地址寫
- 在 fini_array 中布置 getshell 的 rop鏈 , linux 64 的 系統(tǒng)調(diào)用參數(shù) 分別存儲(chǔ)在 rax , rdi , rsi , rdx | 目標(biāo) execve("/bin/sh\x00" , null , null)
- 將 plt 修改到 fini_array + 8 ,通過(guò)棧遷移 執(zhí)行 rop 鏈
- exp
blind
- 漏洞點(diǎn) :
- 堆溢出
- 利用過(guò)程 :
- unlink 造成一個(gè) 任意地址寫
- 修改 .dynamic 段中 .dynstr 的偏移 , 從而指定解析任意的libc函數(shù)
- exp