了解
作用:这个函数的作用就是把一段字符串当作PHP语句来执行,一般情况下不建议使用容易被黑客利用 Eval函数的一般语法:eval(string $code) 比如:echo "hello world"; 输出的内容是“hello world”,当使用这个函数的时候eval("echo 'hello world';"); 输出的结果是相同的但是,在输出这个命运时,是以一段字符串当作PHP语句执行
使用的注意事项
-
参数的字符串末尾一定要有分号,; 当然别忘记在命令的末尾添加上原本的分号哦,不然PHP可不认识你了。 -
注意单引号、双引号和反斜杠的运用,在上面的例子中没有发现吗----echo("hello world");变成了eval("echo 'hello world';"); 当要输出的内容需要在函数内输入的话,需要对输出的内容进行‘’ ,双引号也别忘记加上,还有双引号内末尾的; ,然后的\ 的话,如果参数中带有变量时,并且变量有赋值操作的话,变量前的$ 符号一定要有\ 来转义。如果没有赋值操作可以不需要。 比如:
$a=11;
eval("echo$a;"); 由于a已经赋值过,所以在函数内是不需要赋值的也就可以不需要使用\来转义$. 相当于:eval("echo\$a;");
- 注意在命令式字符串(包括分号)两边必须要有双引号或者根据需要用单引号。否则报错。
** 命令式字符串是指:字符串中包括echo、print之类的命令的时候。 ** 如果参数只有一个变量则可以不用 如果含有多个参数的话
<?php$string = "beautiful";
$time = "winter";
$str = 'This is a $time $string morning!';
eval("echo \$str=\"$str\";");
?>

重点来了!
eval函数 在命令执行的作用以及不用说了, 但是在实例使用中,并非运用仅限于此,最终的就是将你想要执行的命令如何正确执行
$code是字符串型变量,是需要执行的PHP代码。 代码不能包含打开/关闭 PHP tags。比如, ‘echo “Hi!”;’ 不能这样传入:’’。但仍然可以用合适的PHP tag来离开、重新进入PHP模式。比如 'echo "In PHP mode!"; ?>In HTML mode!

哇哦,这样用的嘛 说实话,确实看的我蒙蒙的------------------------------------- 拿题讲讲吧,CTFshow-WEB入门第29关就需要使用到这样的一个命令
 可见文件过滤了flag字符,没关系,我们先遍历一下所有文件的目录 也就是上文提到的 方法一:
?c=echo "a";?><?php system('ls');
 可以看到flag在flag.php文件中,如果直接cat flag.php的话会直接被过滤掉,可以改为include包含,然后对得到的内容base64编码,传入的目的
?c=echo "a";?><?php include($_GET['url']);&url=php://filter/read=convert.base64-encode/resource=flag.php


方法二:
?c=system('ls');
 找到位置后由于flag被过滤,因此可以使用* 代替部分字符,查看源代码

关于include包含,路径加密,其实也是比较繁琐的,但是作为一个知识点掌握如何使用也是必要的
get一个小知识
其实也就是下一关的知识点:system函数被过滤了怎么办可以使用:passthru() 替换
|