freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

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函数
FreeBuf_377165 2021-08-11 15:45:01 569530

了解

作用:这个函数的作用就是把一段字符串当作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

# php
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 FreeBuf_377165 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
恶意代码分析专栏
FreeBuf_377165 LV.1
这家伙太懒了,还未填写个人描述!
  • 1 文章数
  • 0 关注者
文章目录