我試圖導致緩沖區溢位來覆寫變數以執行 if 陳述句的第一部分。但是,每次我嘗試這樣做時,都會在執行 if 陳述句的第二部分時發生分段錯誤。
這是代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(){
char username[10];
volatile int password = 0;
scanf("%s", username);
if(password != 0){
printf("done\n");
}else{
printf("tryharder\n");
}
return 0;
}
我用 gcc 來編譯它:
gcc pwn.c -o pwn
我也試過:
gcc pwn.c -o pwn -fno-stack-protector
當我試圖導致記憶體溢位時,我使用:
kali@salluc:~/$ ./pwn
00000000000000000000000000000000000000000000000000
tryharder
Segmentation fault
我想知道我應該怎么做才能覆寫密碼變數以及為什么我使用的方法不起作用。
uj5u.com熱心網友回復:
我怎么能溢位記憶體
您正在這樣做 - 將超過 10 個位元組放入password陣列中,使其溢位。
我應該怎么做才能覆寫密碼變數
在 x86 上,堆疊向數字較低的地址增長。您必須將密碼放在用戶名之前,或者移動到不同的平臺。
#include <stdio.h>
int main() {
volatile int password = 0;
char username[10];
scanf("%s", username);
if(password != 0){
printf("done\n");
}else{
printf("tryharder\n");
}
return 0;
}
為什么我使用的方法不起作用。
因為它不會覆寫password變數,它會覆寫不相關的堆疊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/361324.html
