gpt4 book ai didi

c++ - 粉碎 C++ VPTR

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:20:26 28 4
gpt4 key购买 nike

我正在上计算机安全课并且正在阅读 http://phrack.org/issues/56/8.html .在 bo3.cpp 中,作者创建了他自己的 VTABLE,并覆盖 VPTR 以指向他的 VTABLE。为此,他需要 VTABLE 的地址,在本例中,它是对象的地址。令我感到奇怪的是,所有这些都是在被利用的代码中执行的。我是初学者,但我认为这种技术不能在实践中使用,因为我们无法编辑源代码并重新编译它。有什么方法可以在代码之外构建 VTABLE 并覆盖 VPTR(例如缓冲区溢出)(无需编辑易受攻击的源代码)?

更新:假设易受攻击的程序要求输入字符串,我可以用它覆盖 VPTR。我编写自己的代码,在其中创建一个 VTABLE,并打印 VTABLE 地址。我运行我的代码并将我的 VTABLE 地址(重复足够多次以覆盖目标 VPTR)作为字符串输入传递给易受攻击的程序。这行得通吗?有没有更好/更简单的方法来做到这一点?

最佳答案

是的,你可以使用这个技巧。

在 C++ 中动态多态性(虚拟继承)的常见实现方式是使用隐藏的 vtable 指针成员。该成员随后出现在所有具有虚函数的对象中。它通常位于对象的最开头。

如果为对象调用虚函数,则程序会调用指向虚表的函数。因此,如果您设法用您的数据覆盖对象的开头,那么您可以使 vtable 指针指向其他任何地方,并实现执行其他内容而不是虚拟成员函数。

如果程序无权写入可执行内存(或执行可写内存),则无法使用该漏洞,但大多数广泛使用的操作系统并非如此。

关于c++ - 粉碎 C++ VPTR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27125303/

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