如何在PHP/Python中进行缓冲区溢出?
这里有一个用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模块,确实可以实现类似的行为,但要意外地做到这一点就难多了。