gpt4 book ai didi

C# 堆栈溢出覆盖 EIP

转载 作者:行者123 更新时间:2023-11-30 21:08:17 24 4
gpt4 key购买 nike

我想编写一个易受攻击的程序,以更好地理解 c# 中的 Stack Overflow(原因),也用于教育目的。基本上,我“只是”想要一个堆栈溢出,覆盖 EIP,所以我可以控制它并可以指向我自己的代码。我的问题是:哪些对象使用堆栈作为内存位置?例如:该程序使用递归字节读取来解析文本文件,直到找到换行符(是的,我认为没有人会这样做,但这只是为了学习......)。目前,我在文本文件中附加一个带有 chars 十六进制值的字符串。该字符串是调用 main() 后实例化的对象的字段。使用 WinDbg,在堆栈从(几乎)无休止的递归溢出后,我得到了这些值:

(14a0.17e0): Break instruction exception - code 80000003 (first chance)
eax=00000000 ebx=00000000 ecx=0023f618 edx=778570b4 esi=fffffffe edi=00000000
eip=778b04f6 esp=0023f634 ebp=0023f660 iopl=0

顺便说一句,如果这是出于兴趣,我正在使用 Win7x86 AMD 机器。我见过很多使用strcpy导致堆栈溢出的C++例子,在c#中有没有类似的方法?

最好的问候,游牧民族

编辑:我使用这段代码导致堆栈溢出。

class FileTest
{
FileStream fs = new FileStream("test.txt", FileMode.Open, FileAccess.Read);
string line = String.Empty;
public FileTest()
{
Console.WriteLine(ReadTillBreak());
}

private string ReadTillBreak()
{
int b = 0;
b = fs.ReadByte();
line += (char)b;
if (b != 13)
ReadTillBreak();
return line;
}
}

是否可以溢出堆栈并使用行字符串写入 eip(因此,test.txt 的内容)?

最佳答案

你可以在 C 和 C++ 中利用堆栈损坏的原因是你自己处理内存,而且这种语言允许你做各种疯狂的事情。 C# 运行在专门设计用于防止许多此类问题的环境中。 IE。虽然您可以在 C# 中轻松生成堆栈溢出,但您无法使用托管代码以这种方式修改程序的控制流。

可以说,针对托管环境的漏洞利用通常是通过突破沙箱。只要代码在沙箱中运行,就会有很多这样的技巧根本不起作用。

如果您想了解堆栈损坏,我建议您坚持使用 C 或 C++。

关于C# 堆栈溢出覆盖 EIP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9751953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com