首页
社区
课程
招聘
[原创]2019看雪CTF晋级赛Q1-第九题writeup
发表于: 2019-3-17 22:43 3155

[原创]2019看雪CTF晋级赛Q1-第九题writeup

2019-3-17 22:43
3155

程序保护情况如下

程序先打印出Please input your name: 字符串,然后获取用户输入,存到0x602328处,长度为16字节,然后打印出菜单,可以发现比较奇怪的是,菜单函数将_printf_chk函数的返回结果和0xDEADBEEF比较,相等就会执行sub_400E10()函数,但_printf_chk函数的返回值是不可能为0xDEADBEEF,猜测可能是作者特意构造的,后面肯定有用到。

执行malloc操作后的结构如下:
8字节8字节8字节,8字节8字节8字节依次类推,后2个8字节为输入的字符串
执行new操作后的结构如下
8字节,8字节8字节8字节,8字节8字节8字节依次类推
长度,0x401228+输入的字符串(16字节)
可以发现当delete时,没有判断当前delete的块是malloc分配的还是new分配的,当delete掉malloc分配的块时,就会出现问题。

该函数会把当前块的前8个字节当做内存块的长度,去找到函数指针的指针,然后执行该函数。由于malloc操作后的内存块的前8个字节是chunk的size字段,所以可以构造好堆中的数据,然后跳转到任意地址执行。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//