如何在PHP/Python中进行缓冲区溢出?

8 投票
6 回答
17019 浏览
提问于 2025-04-15 18:07

这里有一个用C语言写的例子:

#include <stdio.h>
#include <string.h>

void bad() {
    printf("Oh shit really bad~!\r\n");
}

void foo() {
    char overme[4] = "WOW";
    *(int*)(overme+8) = (int)bad;
}

int main() {
   foo();
}

6 个回答

2

很抱歉,你遇到了Python的一个弱点。这个问题是设计使然,所以我们能做的很有限。也许你可以考虑继续使用C语言。

正如Martin v. Löwis 所说

Python不支持缓冲区溢出,抱歉。

顺便说一下,哇,感觉就在几个月前我还读过那篇帖子,没想到已经过去7年零一天了。

2

因为PHP是一种脚本语言,它没有指针,而且字符串类型是安全的,所以这些事情在PHP中是行不通的。

不过,你为什么会想要做这样的事情呢?

(哦,PHP中可能会有一些错误导致缓冲区溢出,但这并不是可以依赖的情况,而且通常会很快修复...)

11

有人提到Python和PHP是解释型语言,这其实不是重点。重点在于,它们提供的几乎所有接口和语言规则都经过严格的错误检查,这样就不可能出现可以被利用的未定义行为。即使你把这些语言编译成机器码,情况也是一样,依然不可能出现这种问题。不过,这并不意味着你不能提供一些不安全的接口,让它们做任何事情。实际上,使用Python的ctypes模块,确实可以实现类似的行为,但要意外地做到这一点就难多了。

撰写回答