H-game | pwn | wp

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è)下 是 '}'
  • exp


Steins;Gate

  • 思路:
      1. 在 id 中輸入 /bin/sh , 方便最后跳轉(zhuǎn)
      1. 在 0x400958 位置的函數(shù)中 布置棧 滿足 0x400A00 的條件
      1. 在 0x400A00 函數(shù)中 leak canary
      1. 在 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

  • exp


handsomeariis

  • 思路 :
    • 普通棧溢出 , 未給 libc , 需要使用 LibcSearcher 查找對(duì)應(yīng)版本的 libc
  • exp

babyfmtt

  • 漏洞點(diǎn):
    • offbyone | 可以觸發(fā)__stack_chk_fail
    • 格式化字符串 | 任意地址讀寫
  • 思路:
      1. 利用 格式化字符串 修改 __stack_chk_fail@got 為 后門函數(shù)
      1. 利用 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
  • exp

Steins;Gate3

這道題目是在 SteinsGate2 的 基礎(chǔ)上限制了 棧溢出的輸入長(zhǎng)度,在 rbp之后只能修改4個(gè)字節(jié), 我自己想的思路是 4個(gè)字節(jié)修改到 leave_ret ,做一個(gè)棧遷移 到前方拓展可用的棧長(zhǎng)度即可



week4

3x18

  • 這道題目 魔改自 pwnable 3x17
  • 參考
  • 功能流程:
    • 一次任意地址寫
  • 利用過(guò)程:
      1. 修改 fini_array 再次進(jìn)入 main ,觸發(fā)一次任意地址寫
      1. 因?yàn)?rbp 在 fini_array 附近 所以會(huì)觸發(fā) stack_canary , 劫持 _stack_chk_fail 中的一個(gè) plt 函數(shù),來(lái)進(jìn)行無(wú)限次任意地址寫
      1. 在 fini_array 中布置 getshell 的 rop鏈 , linux 64 的 系統(tǒng)調(diào)用參數(shù) 分別存儲(chǔ)在 rax , rdi , rsi , rdx | 目標(biāo) execve("/bin/sh\x00" , null , null)
      1. 將 plt 修改到 fini_array + 8 ,通過(guò)棧遷移 執(zhí)行 rop 鏈
  • exp

blind

  • 漏洞點(diǎn) :
    • 堆溢出
  • 利用過(guò)程 :
    • unlink 造成一個(gè) 任意地址寫
    • 修改 .dynamic 段中 .dynstr 的偏移 , 從而指定解析任意的libc函數(shù)
  • exp

blind2

  • 漏洞點(diǎn):
  • delete 棧溢出
  • edit 堆溢出
  • 利用:
    • 思路 1:exp1
    • 思路 2 :exp1
      • 重復(fù) 棧溢出 , leak libc getshell
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容