realloc函数UAF利用|攻防世界pwn进阶区supermarket

思路

0x00.tar解压

下载获得压缩包文件,解压之后放进ubuntu中发现还是一个tar格式压缩包。

tar -xf filename

附:linux下tar命令详解
解压得到一个libc.so.6的库和一个可执行文件

0x01.查看保护

查看保护

 - 32位程序
 - 可以进行栈溢出
 - 堆栈上的代码不可执行
 - 地址随机化未开启

0x02.查看程序并调试

菜单界面
很明显的菜单题,试了一下选项都能用,感觉比上次做的菜单题要难一点。

1. add a commodity #添加商品
2. del a commodity #删除商品
3. list commodities #商品列表
4. Change the price of a commodity #修改商品价格(无权限)
5. Change the description of a commodity #修改商品类型
6. exit #退出

程序的note结构体如下:

typedef struct Node{
   
	char name[16];
	int price;
	int descrip_size;
	char *description;
}

0x03.漏洞分析

输入函数
del函数
这题和一般的UAF有一定的区别,因为free之后的指针也赋值为NULL。
利用点在于一个realloc函数。
通过realloc进行UAF

realloc函数详解

函数原型

realloc原型是extern void *realloc(void *mem_address, unsigned int newsize);

函数功能

先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回,如果空间不够,先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域(注意:原来指针是自动释放,不需要使用free),同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。

注意点

如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。

0x04.利用思路

  • 若当前指针没有足够的连续空间,则会释放原来的mem_address,由于没有把返回地址赋给node0->description,因此存在UAF漏洞。
  • 创建nodeX时,先malloc node结构体,再malloc description空间。创建nodeX+1时,如果满足条件,nodeX+1结构体会申请到nodeX->description,此时编辑nodeX的description就是编辑nodeX+1的结构体。我们把nodeX+1的description指向atoi的got表,就可以实现泄露atoi的地址以及修改atoi的got表。

利用过程

exp-1

# -.- coding=UTF-8 -.-
from pwn import *
from LibcSearcher import *
context(log_level="debug",arch="i386",os="linux")
r = remote("111.198.29.45",54105)
elf = ELF("./supermarket")
libc = ELF("./libc.so.6")
atoi_got = elf.got['atoi']

#define add1,del1,list1,edit1

def add1(index,size,content):
    r.sendlineafter('your choice>>','1')
    r.sendlineafter('name:',str
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值