1 | Arch: amd64-64-little |
保护只开启了NX,程序有3个功能:
1 | 1、malloc + get |
)
程序漏洞主要在free这里,释放空间后对应的指针没有清空,于是便存在Use After Free漏洞
做法一:onegadget
利用思路:利用uaf泄漏出真实地址,doouble free构造假chunk覆盖 malloc_hook 为onegadget
1、首先,申请一个unsort bins 范围大小的空间,然后释放,此时这块chunk的fd,bk就会指向main_arena+88
,puts打印出来-88-0x10
就得到了mallo_hook的真实地址
2、接下来要构造假的chunk ,需要先double free 一下,再利用uaf将fack_chunk 链到fasbins上,但是在malloc申请空间时会有一个检测:检测size of chunk 是否是fastbin范围内,所以需要找到一处值为0x00~0x80
的位置, 在malloc_hook-0x23
处,便存在这样的数据,基为0x7f,所以我们要申请0x70大小的空间。
1 | pwndbg> hexdump 0x7f7245e21b10-0x23 |
3、空间申请成功后,将malloc_hook覆盖为onegadget 地址再调用一次gets函数getshell
做法二:system(‘/bin/sh’)
因为远程对/bin/sh替换成了catflag,onegadget并不能getshell (我也母鸡为什么不行),那断然不行,就只能换一种做法了,程序中还存在sh函数
所以思路就变成,将malloc_hook
覆盖成sh地址,并且传入参数a1 = ‘/bin/sh’,a1就是malloc(size)的size 所以只需要将size设为指向字符串’/bin/sh’的地址就行了,那么问题又来了,这个指针无疑就是堆指针,所以要先泄漏堆地址:double free再puts就行了
exp:
1 | #coding:utf-8 |