因此,我正在尝试利用具有缓冲区溢出漏洞的程序来获取/返回在锁定的.txt包含密码的密码。我不需要为此使用GDB。
vuln.c //没有编辑
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char **argv){
unsigned int pidgeon = 20;
unsigned int correct_pwd = 0;
unsigned int rooster = 25;
char pwd[100];
char entered_pwd[100];
FILE *fptr = fopen("/assignment1/password.txt", "r");
if(fptr == NULL){
printf("Error opening password vault!\n");
exit(1);
}
fscanf(fptr, "%s", pwd);
fclose(fptr);
scanf("%s", entered_pwd);
sleep(1);
if(strcmp(entered_pwd, pwd)){
printf("Incorrect password\n");
}
else{
correct_pwd = 1;
printf("Correct password\n");
}
if (pidgeon != 20 || rooster != 25) {
printf("Stack smashing detected!!");
return 0;
}
else if(correct_pwd) {
printf("\nYou are now authenticated, you deserve a cookie!\n");
fptr = fopen("/assignment1/secret.txt", "r");
if (fptr == NULL) {
printf("But the cookie jar is broken...\n");
}
char secret[1024];
fscanf(fptr, "%s", secret);
fclose(fptr);
printf("%s", secret);
}
return 0;
}
attack.sh //要编辑
#!/usr/bin/env bash
echo -en "dddddddddddddddd" | /assignment1/vuln
ython <<@@
print 'hello from Python!'
from subprocess import call
call('echo "I like potatos"', shell=True)
@@
我知道,如果我回显足够大的字符串,可能会导致段错误,但这并不能帮助我。我知道fscanf和strcmp是脆弱的区域。我的想法是,我需要传递“ if(strcmp(entered_pwd,pwd))”条件语句来检索密码。为了做到这一点,我需要执行一些代码,将entered_pd设置为pwd。
但是我很迷茫,我花了几个小时寻找示例以及如何做到这一点,但我还是陷入了困境。 任何帮助将不胜感激,谢谢