eval(cmd)与eval($cmd)的区别与联系

admin3年前PHP教程29

这个问题一直困扰我许久,今天终于解决清楚了

问题1:eval的执行是否需要双引号包括:

先看三个命令:


a:<?php eval(system(dir))?>
b:<?php
    $cmd="system(dir)";
    eval($cmd)?>


a结果:

b结果:

报错

思考:

同样是一个命令,为什么会出现如此区别,询问了其他师傅得知:eval执行的是变量的值的时候,该变量值需要闭合,也就是必须是一个完整的语句,需要用分号结尾。根据这个道原理我们改一下上面的命令看看:


<?php
    $cmd="system(dir);";
    eval($cmd)?>


结果:


发现是可以执行的。

后话:

关于这个点,还需要补充一个:

内置函数在eval里面直接执行时不需要加分号,看两个命令就知道了:


eval(system(dir));
eval(system(dir););


内置函数不需要加分号,其实我觉得加不加分号都一样,因为加了分号就要加引号,引号也带有解析的意思

理解一下命令执行中的闭合:

看代码:


eval(system(dir));
eval(system(dir););


看看结果:

这里可以并且后面语句是不影响解析的


<?php
    eval("system(dir);?>xyusaiqeqcyuqqwdnoqcq");
    ?>


我们这里都是不影响的,为什么?

如果我们是简单的闭合eval这个命令

那我们的playload应该是:


<?php
    eval("system(dir));?>xyusaiqeqcyuqqwdnoqcq");
?>
上面的代码我错误的理解成:
<?php
    eval("system(dir)");?>
    xyusaiqeqcyuqqwdnoqcq");
?>


之前我错误的以为是这样的闭合的,但是后来发现我错了,直到在有一道题目中我发现这样闭合不了,后面询问了一下其他师傅,得到答案:

eval()这个函数可以理解成我们是将eval(字符串)这里面的字符串放到了一个新的php里面去运行,这个新的php本来就又 <?php 所以当我们传入 system(dir);?>dasdas的时候,?>就以及阶段了php代码

学习了~

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

国内防ddos的宁波高防服务器怎么买

国内防ddos的宁波高防服务器怎么买?要购买宁波高防服务器,您可以在互联网上搜索宁波高防服务器供应商,并选择一个信誉良好、价格合理的供应商进行购买。以下是购买宁波高防服务器的一般步骤:在搜索引擎上搜索...

介绍几个显卡服务器的具体使用场景新加坡显卡服务器的用途有哪些

不少朋友对于显卡服务器的作用比较模糊,虽然表面上说得也没错,但如果打算租用显卡服务器用于实际的使用的话,就会造成使用不当的情况。那么小编将为大家介绍几个显卡服务器的具体使用场景。1、简单深度学习模型使...

PHP实现加减乘除最简单的实例分享

本文的重点就是如何创建一个PHP类来实现两个数间的加减乘除,这种类似于极简单的计算器功能。实现起来是非常简单的,继续往下看:这里简单给大家介绍一下构造函数和private和public的定义:构造函数...

什么是独立GPU显卡服务器?新加坡GPU服务器能干什么?

什么是独立GPU显卡服务器?独立GPU,也称为显卡,是一种独立的处理单元,具有专用的卡和内存。只需将卡插入主板上靠近CPU的扩展槽,即可轻松更换或升级。它旨在处理更复杂的图形处理,并提供比集成GPU更...

基于PHP实现一个简单的在线聊天功能

要实现功能,首先要做前端,经过对比其他网站的在线聊天功能,发现除了基本的聊天功能以外,还要注意以下几点.一次只能和一个人聊天,但是可以随意切换其他人.如果用户是从"发送消息" 入口...

php遇到错误Call to undefined function ImageCreate()解决方法

目录常规Ubuntu与windows编译make安装方法phpize方法centos安装GD库在使用php处理一些图像时,有时会出现诸如这样的错误:Call to undefined function...