我正在尝试了解MS08-067的旧漏洞是如何工作的。我找到了一个代码示例http://www.phreedom.org/blog/2008/decompiling-ms08-067/。
调试此代码向我显示以下函数可能超出堆栈:
wcscpy(previous_slash, &p[2]);
下面的屏幕截图显示了溢出发生时本地变量的状态:
让我感到困惑的是:wcspy
将内容从&p[2]
复制到previous_slash
,&p[2]
是previous_slash
的一部分,因此其长度更短。当触发溢出的内容短于dst缓冲区的长度时,怎么会发生溢出?