ctf中遇到exec和shell_exec的回显问题
exec和shell_exec的区别
问题:在打ctfshow时发现,为什么使用exec()和shell_exec()的回显不同?
exec函数会返回最后一行执行结果,如果执行的命令有多行输出,只会返回最后一行,而shell_exec函数会返回执行结果的全部内容。
exec与shell_exec函数的区别
exec与shell_exec函数都是PHP中的系统函数,它们都可以用来执行系统命令,但是它们之间有一定的区别。
1.返回值不同
exec函数会返回最后一行执行结果,如果执行的命令有多行输出,只会返回最后一行,而shell_exec函数会返回执行结果的全部内容。
2.执行效率不同
exec函数会将系统命令拆分成多个参数,然后逐个执行,而shell_exec函数只需要一次性执行,所以shell_exec函数执行效率更高。
3.超时时间不同
exec函数可以设置超时时间,而shell_exec函数没有超时时间的设置,所以如果执行的系统命令比较耗时,一定要使用exec函数。
4.危险性不同
exec函数可以指定参数,这样可以防止用户输入不安全的参数,而shell_exec函数没有这样的限制,所以它更加危险。
exec():
PHP: exec - Manual
shell_exec():
PHP: shell_exec - Manual
同时,shell_exec等同于``反引号