在 Linux 终端中执行已编译的 C 文件:理解语法(缓冲区溢出应用程序)
Executing compiled C file in Linux terminal : understanding syntax (buffer overflow application)
我正在尝试学习缓冲区溢出功能,我发现:
ouah@weed:~$ ./vuln1 `perl -e 'print "A"x300'`
其中vuln1是编译后的C文件vuln1.c :
#include <stdio.h>
main (int argc, char *argv[])
{
char buffer[256];
if (argc > 1)
strcpy(buffer,argv[1]);
}
所以我会知道那些奇怪的 ``perl -e 'print "A"x300'` 的含义:“perl -e”和“print”在这里应该是什么意思(我知道有应该是 main() 参数),对于看起来像乘法但更少“*”的“A”x300(因为此命令的目标是溢出缓冲区)和同时十六进制写入...
Perl 是 a scripting language。 perl
与 -e
开关直接将下一个参数计算为代码(而不是 运行 脚本文件)。
print
是一个 Perl built-in function that outputs its arguments.
x
就是repetition operator in Perl。 "A" x 3
产生 "AAA"
.
最后一块拼图是 bash 中的反引号 (` `
) 将执行它们的内容作为命令并产生打印到标准输出的任何命令。
因此,这是生成 300 个 A
作为 ./vuln1
的参数的一种快速简便的方法,当读取参数时会溢出 256 字节的缓冲区。
将 ./vuln1
替换为普通的 echo
以查看最终通过的参数。
我正在尝试学习缓冲区溢出功能,我发现:
ouah@weed:~$ ./vuln1 `perl -e 'print "A"x300'`
其中vuln1是编译后的C文件vuln1.c :
#include <stdio.h>
main (int argc, char *argv[])
{
char buffer[256];
if (argc > 1)
strcpy(buffer,argv[1]);
}
所以我会知道那些奇怪的 ``perl -e 'print "A"x300'` 的含义:“perl -e”和“print”在这里应该是什么意思(我知道有应该是 main() 参数),对于看起来像乘法但更少“*”的“A”x300(因为此命令的目标是溢出缓冲区)和同时十六进制写入...
Perl 是 a scripting language。 perl
与 -e
开关直接将下一个参数计算为代码(而不是 运行 脚本文件)。
print
是一个 Perl built-in function that outputs its arguments.
x
就是repetition operator in Perl。 "A" x 3
产生 "AAA"
.
最后一块拼图是 bash 中的反引号 (` `
) 将执行它们的内容作为命令并产生打印到标准输出的任何命令。
因此,这是生成 300 个 A
作为 ./vuln1
的参数的一种快速简便的方法,当读取参数时会溢出 256 字节的缓冲区。
将 ./vuln1
替换为普通的 echo
以查看最终通过的参数。