利用未被保护的内存突破 GS

为了将 GS 对性能的影响降到最小,并不是所有的函数都会被保护,所以我们就可以利用其中一些未被保护的函数绕过 GS 的保护。
那我们在之前《《Windows安全机制》之GS机制》举得例子:SmallBuffer()

void SmallBuffer()
{
	char BufferData[4] = "";
	int num = 2;
}


int main()
{
	BigBuffer();
	SmallBuffer();
	getchar();
	return 0;
}

使用 IDA 对可执行程序进行反汇编可以看到程序在执行完函数返回时,没有进行任何 Security Cookie的验证操作。
在这里插入图片描述
我们修改一下代码:在SmallBuffer进行拷贝字符串,拷贝进来的字符串明显大于4字节。

void SmallBuffer(char * str)
{
	char BufferData[4] = "";
	strcpy(BufferData, str);
	int num = 2;
}


int main()
{
	char* str = "yeah,the fuction is without GS";
	SmallBuffer(str);
	getchar();
	return 0;
}

我们使用 VS2015 调试器进行调试,调试器会报告内存访问冲突,此时返回地址已经被覆盖。在这里插入图片描述
Ebp、返回地址被覆盖。
在这里插入图片描述

如何利用

可以在未被GS保护的函数中,进行大缓冲区拷贝小缓冲区,利用换缓冲区溢出写入ShellCode实现恶意攻击。

参考资料:
《0day安全:软件漏洞分析技术》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章