Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 格式字符串漏洞实验室_C_Linux_Security_Format String_Lab - Fatal编程技术网

C 格式字符串漏洞实验室

C 格式字符串漏洞实验室,c,linux,security,format-string,lab,C,Linux,Security,Format String,Lab,这里是网络安全一年级的学生(我对很多东西都是新手,比如Linux等等) 我在修改实验室中的秘密值时遇到问题。 这是我需要做的 gcc-z execstack-o vul_prog vul_prog.c sudo chown根Vu_程序 sudo chmod+s vul_prog 使用字符串格式漏洞成功执行以下操作 崩溃程序 打印机密值机密 修改秘密值秘密 使用预定值0x424546修改秘密值secret 获得根shell(额外学分) 下面是我们正在使用的代码 /*vul_prog.c*/

这里是网络安全一年级的学生(我对很多东西都是新手,比如Linux等等)

我在修改实验室中的秘密值时遇到问题。 这是我需要做的

  • gcc-z execstack-o vul_prog vul_prog.c

  • sudo chown根Vu_程序

  • sudo chmod+s vul_prog

使用字符串格式漏洞成功执行以下操作 崩溃程序

  • 打印机密值机密

  • 修改秘密值秘密

  • 使用预定值0x424546修改秘密值secret

  • 获得根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;
}
到目前为止我使用的命令

sudo sysctl-w内核。随机化空间=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.%n>输入

vu

下面是输入文件的外观

póÿÿ?.%x.%x.%x.%x.%x.%x.%x.%n

运行这些命令后,没有任何更改。然后,我在末尾又添加了3个“%x”和%n,但仍然一无所获。当我试着用你的手去做的时候

%x.%x.%x.%x.%x.%x.%x.%x.%x.%n

它会给我一个分割错误

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


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

现在编辑您的Q以显示文件
输入中的内容。当你看到这一点时,与用来生成它的
printf
cmd相比,它有意义吗?(我想不会的;-))。看到你文章的最后几行了。我不是专家。试着看看帮助,看看你的Q是否适合在那里发布,但不要交叉发布。祝你好运。@Sheller thank youTry更改为
echo$(printf.%x.%x.%x.%x.%n“,“\x04\xf3\xff\xbf”)>输入
您可能需要分隔这些值,即
“\x04”“\xf3”“\xff”“\xbf”“
或其他内容。这可能是我能帮上忙的全部了,这周剩下的时间我都很忙。祝你好运
[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