2018 網(wǎng)鼎杯 | pwn wp

fgo

  • 漏洞點(diǎn) :
    • delete 函數(shù) uaf
  • 利用過程:
    • add(0x10) 兩個(gè)組合 0x10(pointer) + 0x18(content)
    • del 0 -> del 1
    • add(0x8) , 0x10(pointer | chunk 1 pointer) + 0x10(content | chunk 0 pointer) ,從而可以 修改 chunk 0 的指針域?yàn)?secret 函數(shù)
    • 調(diào)用 print(0) , 從而觸發(fā)后門函數(shù)

exp


GUESS

  • 流程分析:
    • 讀入 flag 到棧上
    • 3輪 指定棧上字符串輸入 , gets 輸入造成溢出
    • 輸入與 flag對(duì)比
  • 利用過程:
  • 該 題目 利用stack stamsh 的點(diǎn)進(jìn)行指定地點(diǎn)的leak
    • tip : 這道題目需要用多次 stack smash進(jìn)行l(wèi)eak , 能持續(xù)進(jìn)行輸入程序不崩潰的原因是 ,輸入的函數(shù)是用fork啟動(dòng)的。
    1. leak , puts 函數(shù)地址,得到libc地址
    1. 根據(jù) libc 地址計(jì)算出 libc["__environ"] 的地址 ,leak __environ 得到一個(gè)棧上的地址
    1. 根據(jù)2中的棧地址的相對(duì)偏移計(jì)算出flag地址, leak flag

exp


easyFMT

  • 功能分析
    • while True 的 字符串輸入 , 然后輸出 | 長(zhǎng)度限制 0x64
  • 漏洞點(diǎn): 格式化字符串
  • 利用方法:
      1. leak printf@got , 得到 printf 地址
      1. 計(jì)算得到 system 地址
      1. 修改 printf@got 的值 為 system
      1. 輸入 /bin/sh getshell

exp


babyheap

  • 這道題目 考察了堆利用的技巧結(jié)合...
    • 學(xué)到了 unlink 的后向合并
    • 還利用到了 fastbin attack
  • 功能分析:
    • alloc :
      • 分配到指定index 一個(gè) 0x30 大小的chunk | malloc(0x20)
      • 并且進(jìn)行 0x20 的輸入
    • edit
      • 編輯指定 index 的 chunk , 做一個(gè) 0x20 的 輸入
      • 最多 編輯3次
    • delete
      • free 指定 index 的 chunk | uaf
    • show
      • 輸出 指定index的地址 上的值
  • 利用 過程
      1. 分配 6 個(gè)chunk , 做好 fastbin attack 和 unlink 的準(zhǔn)備工作
      1. leak heap 地址
      1. 根據(jù) heap 地址,edit(0) 構(gòu)造條件,使用 fastbin attack 分配一個(gè)chunk到 堆上 , 將 uaf 拓展成 堆溢出
      1. 用堆溢出 修改 chunk 1 的 size 為 0xa1
      1. free chunk 1 | free 0xa1 大小的chunk 進(jìn)行 unsorted bin leak , 并且進(jìn)行 unlink (后向)
      1. 根據(jù) libc 地址 計(jì)算出 one_gadget 地址
      1. edit(4) | 使用 unlink 覆蓋 ptr[1] 為 __free_hook 地址 | Full Relro 不可修改got表
      1. edit(1) | 覆蓋 __free_hook 為one_gadget

exp


blind

  • 這個(gè)題目 學(xué)到了 io_file 的利用 , 看來還是要再好好看看 io_file_plus 的結(jié)構(gòu)體和相關(guān)調(diào)用。
  • 參考鏈接 : http://www.itdecent.cn/p/f14adeda85df
  • 功能分析:
    • new | 分配一個(gè) 0x68 大小的chunk 到指定 index
    • change | 修改 指定 index 的 chunk 內(nèi)容
    • release | free 指定 index 的 chunk | uaf 漏洞
  • 漏洞點(diǎn):
    • uaf
      • 構(gòu)成 fastbin attack
  • 利用過程:
      1. 利用 fastbin attack , 分配 chunk 到 0x60204d(stderr + 5 + 8) , 從而可以控制 ptr 數(shù)組
      1. 控制 ptr 數(shù)組為 &stdout , &bss+0x300 + 0x68 * n (n : 0 - 3)
      1. 布置 bss + 0x300 開始 為 fake_io_file 和 fake_vtable
      • 3.1 這次構(gòu)造 發(fā)現(xiàn)可以布置除了 flag 和 vtable 之外的值全為 null , 但是還是要詳細(xì)了解下原理。。。。
      • 3.2 如果設(shè)置其他值的 , io_read_* ,io_write_* 最好不要覆蓋。
      • 3.3 可以把 fake_io_file 和 fake_vtable 布置在一起,但是需要主意 3.2 , 并且設(shè)置好 vtable的地址
      • 3.4 先布置好vtable 然后再修改 *stdout 為 &fake_io_file

exp 1 , 2 的區(qū)別是 fake_io_file 和 fake_vtable 是否分開
exp1
exp2

最后編輯于
?著作權(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)容