-
-
[原创]CTF2019_Q1_C与C++
-
发表于: 2019-3-10 20:15 2760
-
一血,again
这次还算比较好,抢了两个PWN一血,也算是第一次参加看雪,因为之前一直赶上考试周,没有时间
这里提供了两种malloc和free方式
两种分配方式都会每16字节进行一次存储,每一块包含function_ptr(析构)+16bytes string(c对应的func设为0,c++为&400F20)
不同点:
c++对应的分配会在chunk起始写入字节被分割的数目,但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
被梅零落编辑
,原因:
赞赏
看原图
赞赏
雪币:
留言: