首页
社区
课程
招聘
[原创]CTF2019_Q1_C与C++
发表于: 2019-3-10 20:15 2742

[原创]CTF2019_Q1_C与C++

2019-3-10 20:15
2742

一血,again
这次还算比较好,抢了两个PWN一血,也算是第一次参加看雪,因为之前一直赶上考试周,没有时间

这里提供了两种malloc和free方式
两种分配方式都会每16字节进行一次存储,每一块包含function_ptr(析构)+16bytes string(c对应的func设为0,c++为&400F20)
不同点:
c++对应的分配会在chunk起始写入字节被分割的数目,但c不会:
c


正是这种偏差,当我们用c方式malloc一个chunk,但是用c++进行free时
在c++对应的free:

其会把chunk size当做分割数定位结束位置:

但这样显然会远超过本chunk
所以当我们在目标位置写入一个指向其他函数的指针时(这里可以考虑在name处写入一个func addr,这样在目标地址写入name的地址,就会最终调用我们需要的function),当调用完这个函数v2指针减三,此处我们依然可控......,由此便可生成一条调用链:
leak libc->main func
回到main函数后依然利用此漏洞来调用one_gadget
由此便可get shell
注意leak问题:
在输出menu时有个函数:

当v0=0xDEADBEEF时调用,实际无法调用(至少没有直接方法)
但是进入此函数:

发现他可以leak一个地址
当我们写入调用链,其会输出libc中的一个地址
由此选择此函数进行leak

最后于 2019-3-16 20:27 被梅零落编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//