editable_note

艾我也喜欢攻破靶机的感觉。
题目:
menu:

add:

delete:

edit:

show:

这个题是典型的uaf + tache posioning
解题:
泄露libc:
通过unsorted bin泄露main_arena进而泄露Libc
exp:
1 | from pwn import * |
这里先申请8个同样大小的chunk 七个用来填满tache bin 另一个用来释放进入unsorted bin
可以看到chunk7 的fd和bk都指向main_arena

🐖:
1 | add(8,0x20) // 防止于top chunk合并 |
最开始做的时候没有加这个
导致这个chunk 释放后会和top chunk合并 而不是进入unsorted bin::
1 | for i in range(8): |

可以看到没有进入ub 且top chunk的地址发生了变化。

🐖:
1 |
|
这里好奇尝试了一下释放这个chunk8 但是他没有和top chunk合并。因为进入tache 的优先级高于top chunk 合并

uaf + posioning:
exp:
1 | add(9,0x20) /// |
有点像double free

这里的0x690是chunk9 0x720是chunk8
tache是 LIFO(后进先出)

chunk9相当于头指针 chunk8是尾指针
这里修改chunk9的next指针就可以劫持tahce

exp:
1 | add(11,0x20) |
这样就打通了。
🐖:
在调试的时候发现重新申请chunk的时候会优先用unsortedbin部分的chunk
1 | add(9,0x20) ///1 |
初始状态:

1:

2:

可以看到glibc优先分配的是unsortedbin中的chunk
3:

unsortedbin分配完后 会从top chunk中分割。

























































