0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
了解
作用:这个函数的作用就是把一段字符串当作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()
替换
如何禁用EVAL函数
EVAL函数在日常使用中构成的危害是很大的,在服务器中禁用eval命令也很关键
根据php手册说明,eval是一个语言构造器而不是一个函数。如果要禁用eval,则需要第三方扩展,使用Suhosin
linux下安装:
php的安装就不写了
suhosin的安装
wget http://download.suhosin.org/suhosin-0.9.23.tgz
tar zxvfsuhosin-0.9.23.tgz
cd suhosin-0.9.23
/usr/local/php/bin/phpize //这一步不能省
./configure --with-php-config=/usr/local/php/bin/php-config //必须在这儿注明php-config所在的绝对路径。
make
make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
然后在php.ini中增加一行下列语句。
extension=suhosin.so
suhosin.executor.disable_eval = on
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
