为什么这段代码可以被利用?

0x9*_*x90 1 c security

为什么这段代码不安全?

#include <stdio.h>
int main( int argc, char *argv[] )
    {
       printf(argv[1]);
       printf("\n");
       return 0;
    }
Run Code Online (Sandbox Code Playgroud)

abe*_*nky 5

printf将处理它的第一个参数,寻找像%d和的东西%s.

根据这些值,它将从堆栈中获取更多数据并将其打印出来.

如果有人打电话给你的程序:

a.out "%d %d %d %d %d %d %d %d %d %d %d %d"
Run Code Online (Sandbox Code Playgroud)

他们可以查看计算机的一部分callstack.

如果他们使用格式说明符更有创意,也许他们可以转储重要的东西,比如信用卡号或密码.