Glibc堆利用-Double Free
漏洞成因:使用完一个chunk之后,只是free掉了指针,没有将内容置null
漏洞结果:free一个chunk之后,再次free,其实该chunk还在free list 里面,可以修改某一个在free list里面的chunk,可以修改该chunk的fd和bk指针,欺骗malloc返回一个任意地址的chunk,可以实现任意地址的写功能。
0x01
这里我们采用了师傅的样例程序,先检查该程序:

看到:保护全开,使用ida进行反编译分析:
发现经典菜单栏:并且实现了以下功能:

while ( 2 )
{
v10 = 0LL;
menu();
scan("%d", &v4);
switch ( (unsigned int)off_F70 )
{
case 1u:
if ( cnt >= 7 )
{
puts("You can't capture more people.");
}
else
{
v3 = cnt;
ptr[v3] = malloc(8uLL);
++cnt;
puts("Captured.");
}
continue;
case 2u:
puts("Index:");
scan("%d", &v5);
free(ptr[v5]);
puts("Eaten.");
continue;
case 3u:
puts("Index:");
scan("%d", &v5);
puts("Ingredient:");
scan("%llu", &v10);
*(_QWORD *)ptr[v5] = v10;
puts("Cooked.");
continue;
case 4u:
printf("Your lair is at: %p\n", &lair);
continue;
case 5u: // 给target赋值
puts("Which kingdom?");
scan("%llu", &v9);
lair = v9;
puts("Moved.");
continue;
case 6u<

本文详细介绍了如何利用Glibc中的DoubleFree漏洞来执行任意地址写,通过操纵内存中的chunk,构造fake_chunk并篡改目标变量,最终触发系统调用获取Shell。文章给出了详细的漏洞分析、利用流程及exploit代码。
最低0.47元/天 解锁文章
3810

被折叠的 条评论
为什么被折叠?



