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

时间:2010-01-17 14:27:05

标签: php python buffer-overflow

这是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 个答案:

答案 0 :(得分:9)

事实上,Python和PHP被解释为其他人建议的事实并非如此。关键是他们公开的几乎所有API和语言语义都经过严格的错误检查,因此无法获得可利用的未定义行为。即使你编译语言,它仍然是不可能的。这并不意味着您无法公开可以执行任何操作的不安全API。事实上,使用Pythons ctypes模块,应该可以创建一个类似的行为,但是偶然地更难以这样做。

答案 1 :(得分:2)

由于PHP是一种脚本语言,没有指针,字符串类型是二进制安全的,所以这些东西在PHP中不起作用。

但你为什么要做这样的事呢?

(哦,PHP中可能存在错误导致缓冲区溢出,但这并不是任何可以依赖的东西,并且通常是固定得很快......)

答案 2 :(得分:2)

我们很抱歉:你已经陷入了Python的弱点。不幸的是,它是设计的,所以很少有人可以做到这一点。也许你应该留在C。

正如Martin诉Löwissaid

  

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

PS哇。好像几个月前我读过那篇帖子,但它已经有7年零一天了。

答案 3 :(得分:1)

在PHP中执行类似的操作不会导致相同的行为。

解释PHP并始终检查您正在执行的操作是否有效。所以您不能 - 例如 - 超出缓冲区。

答案 4 :(得分:1)

因为php,python和每种解释语言首先必须通过翻译,而你没有完全访问内存,这种语言不会让你像你发布的代码那样做某种游戏。

答案 5 :(得分:0)

Traceback (most recent call last):
  File "libs/olx/crawler_ads_information.py", line 100, in <module>
    run(link_base)
  File "libs/olx/crawler_ads_information.py", line 38, in run
    information = getVehicleInformation(page_ad)
  File "libs/olx/crawler_ads_information.py", line 49, in getVehicleInformation
    dataLayer = json.loads(s)
  File "/usr/lib/python2.7/json/__init__.py", line 339, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 380, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)