利用未被保護的內存突破 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安全:軟件漏洞分析技術》

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