-
-
[原创]2019看雪CTF晋级赛Q1-第九题writeup
-
发表于: 2019-3-17 22:43 3170
-
程序保护情况如下
程序先打印出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字段,所以可以构造好堆中的数据,然后跳转到任意地址执行。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
看原图
赞赏
雪币:
留言: