-
-
[原创]pwnable.tw - spirited_away
-
发表于: 2018-8-21 17:14 4578
-
漏洞:
数组v1的大小是0xE8-0xB0=0x38,也就是56,在sprintf中输出时,已有的字符串是54,其中将通过格式化输出计数器cnt的值,cnt是个数值,但作为char输出时,每一个数就是1个byte,故当cnt为三位数时,将放生溢出,v1是栈变量,存储在其后的是变量nbytes和var_AC、char数组s、var_58、char数组buf在堆中的地址,恰好,nbytes是read函数用来读取用户输入的name和comment的大小,当cnt为三位数时,整个字符串的最后一位'n'将会溢出到nbytes所在的内存空间,char型的‘n’被当作size_t型,也就是0x6E,即110。于是这样可达到将原本大小为60的name、comment扩大为110,同时,在read函数中用来存储用户输入的buf和s数组原本设定的大小是0x3C和0x50,两个数组将发生溢出
思路:
free的对象是buf数组在堆上。于是,可以在栈上构建一个伪造的chunk,然后通过溢出,覆盖原本在栈上,指向buf内存空间的指针,然后通过操作触发free,将我们伪造的chunk加入到fastbin中,最后通过malloc得到伪造的目标堆块
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2018-8-21 17:43
被该用户很懒编辑
,原因:
赞赏
看原图
赞赏
雪币:
留言: