【发布时间】:2020-05-11 09:40:20
【问题描述】:
如何利用非 const 指针(允许访问附近的内存)或非 const 数据?
我研究了一个非常量指针可以被利用来访问附近的计算机内存。
但我的问题是:如何?
我的意思是,如果我已经启动了我的编译程序,如果它已经编译并运行,攻击者如何利用它?
这是一个危险的漏洞吗?还是没那么重要?
【问题讨论】:
-
>如果需要,您可以随时转换指针来删除 const。但是如果程序已经编译并使用 const 指针/数据运行呢?
-
C 不是解释语言,而是编译语言。您可能遇到的主要问题是编译器是否为常量内存分配了一些存储空间,或者它假设某些内容没有更改,而实际上您已经绕过类型系统并对其进行了更改。同样,这些都不是“利用”。你能做的最坏的事情基本上等同于取消引用一个错误的指针值。你可能会崩溃你的程序,或者得到意想不到的结果,但仅仅因为你的代码中可能有错误并不意味着你会突然能够以某种方式利用它。
-
@TomKarzes:
const不应用作或依赖函数不会更改指向数据的文档,因为 C 不需要这样做,并且在某些情况下函数必须删除const内部。 -
@TomKarzes:不,您不必做出假设。作者可以记录他们的代码,用户可以阅读文档。
-
@TomKarzes:(a) 手册页是某种方式这一事实并不意味着它必须是那种方式。如果它缺少信息,那是其作者身份的缺陷,而不是逻辑必要性的证据。提交缺陷报告。 (b) 文档被理解为告诉您某个功能的作用,而省略某些行为意味着它不执行该行为。例如,如果一个函数的文档没有说它设置
errno,那么它不应该设置errno。虽然这可能被归类为假设,但我会将其描述为文档中的约定而不是假设。
标签: c security pointers constants buffer-overflow