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


Posted in PHP onJuly 07, 2021

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

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

先看三个命令:

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

A结果:

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

B结果:

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

报错

思考:

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

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

结果:

eval(cmd)与eval($cmd)的区别与联系
发现是可以执行的。

后话:

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

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

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

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

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

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

看代码:

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

看看结果:

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

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

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

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

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

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

那我们的playload应该是:

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

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

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

学习了~

PHP 相关文章推荐
用PHP写的MySQL数据库用户认证系统代码
Mar 22 PHP
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
Aug 07 PHP
PHP 编程安全性小结
Jan 08 PHP
php 数组二分法查找函数代码
Feb 16 PHP
php XPath对XML文件查找及修改实现代码
Jul 27 PHP
深入php self与$this的详解
Jun 08 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
Mar 13 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
Jul 29 PHP
php在linux下检测mysql同步状态的方法
Jan 15 PHP
简单谈谈PHP中的trait
Feb 25 PHP
PHP插件PHPMailer发送邮件功能
Feb 28 PHP
laravel 出现command not found问题的解决方案
Oct 23 PHP
用php如何解决大文件分片上传问题
Jul 07 #PHP
php 文件上传至OSS及删除远程阿里云OSS文件
Jul 04 #PHP
PHP实现两种排课方式
Linux系统下安装PHP7.3版本
详细分析PHP7与PHP5区别
Jun 26 #PHP
laravel添加角色和模糊搜索功能的实现代码
一文搞懂php的垃圾回收机制
You might like
PHP仿盗链代码
2012/06/03 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
利用PHP判断文件是否为图片的方法总结
2017/01/06 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
PHP实现的AES加密、解密封装类与用法示例
2018/08/02 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
Expandable &quot;Detail&quot; Table Rows
2007/08/29 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
2014/01/22 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
Vue.js每天必学之Class与样式绑定
2016/09/05 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
2017/02/23 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
JavaScript实现图片懒加载的方法分析
2018/07/05 Javascript
微信小程序时间戳转日期的详解
2019/04/30 Javascript
原生js实现九宫格拖拽换位
2021/01/26 Javascript
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
linecache模块加载和缓存文件内容详解
2018/01/11 Python
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
python实现超级玛丽游戏
2020/03/18 Python
哪些是python中web开发框架
2020/06/17 Python
python使用建议与技巧分享(二)
2020/08/17 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
澳大利亚游乐场设备品牌:Lifespan Kids
2019/05/24 全球购物
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
实现向右循环移位
2014/07/31 面试题
农村改厕实施方案
2014/03/22 职场文书
班主任个人工作反思
2014/04/28 职场文书
护林员个人总结
2015/03/04 职场文书
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android