eval(cmd)与eval($cmd)的区别与联系
这个问题一直困扰我许久,今天终于解决清楚了
问题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代码
学习了~
相关推荐
-
eval与window.eval的差别分析
它们之间有区别吗? 开发过程中似乎很少有人去加个额外的window,觉得多此一举.比如Ajax过程中回调函数解析JSON格式字符串 复制代码 代码如下: ... function callback(str){ var json = eval('(' + str + ')'); } ... 通常直接使用eval,而非var json = window.eval('(' + str + ')'); 又比如调试时使用alert,很少有人使用window.alert:IE中获取事件对象使用event,很
-
php eval函数用法 PHP中eval()函数小技巧
eval 将值代入字符串之中. 语法: void eval(string code_str); 传回值: 无 函式种类: 数据处理 内容说明 本函式可将字符串之中的变量值代入,通常用在处理数据库的数据上.参数 code_str 为欲处理的字符串.值得注意的是待处理的字符串要符合 PHP 的字符串格式,同时在结尾处要有分号.使用本函式处理后的字符串会沿续到 PHP 程序结束. 使用范例 复制代码 代码如下: <?php $string = '杯子'; $name = '咖啡'; $str = '这
-
php中eval函数的危害与正确禁用方法
php的eval函数并不是系统组件函数,因此我们在php.ini中使用disable_functions是无法禁止它的. 但是eval()对于php安全来说具有很大的杀伤力,因此一般不用的情况下为了防止类似如下的一句话木马入侵,需要禁止! <?php eval($_POST[cmd]);?> eval()使用范例: <?php $string = '杯子'; $name = '咖啡'; $str = '这个 $string 中装有 $name.<br>'; echo $str
-
浅析DataBinder.Eval和Eval的区别
ASP.NET 2.0改善了模板中的数据绑定操作,把v1.x中的数据绑定语法DataBinder.Eval(Container.DataItem, fieldname)简化为Eval(fieldname).Eval方法与DataBinder.Eval一样可以接受一个可选的格式化字符串参数.缩短的Eval语法与DataBinder.Eval的不同点在于,Eval会根据最近的容器对象(例如DataListItem)的DataItem属性来自动地解析字段,而DataBinder.Eval需要使用参数来
-
python3中的eval和exec的区别与联系
看了很多网上的方法,写入文件后打开文件看确实不再是乱码,但是从文件中读入json时发现了乱码,可能是读文件默认的编码格式不对.下面读写方法可行. 注意,ensure_ascii=False可以保证不会以ascii格式编码,保证中文的正常转换: import json with open('test.json', 'w', encoding='utf-8') as f: f.write( json.dumps( known_dict, indent=4, ensure_ascii=False))
-
dockerfile中ENTRYPOINT与CMD的结合使用及区别
我们在上篇小作文[docker容器dockerfile详解]对中dockerfile有了比较全面的认识,我们也提到`ENTRYPOINT`和`CMD`都可以指定容器启动命令.因为这两个命令是掌握dockerfile编写的核心,所以这边还是单独拿出来再讲一讲. 一.写在前面 我们在上篇小作文docker容器dockerfile详解对中dockerfile有了比较全面的认识,我们也提到ENTRYPOINT和CMD都可以指定容器启动命令.因为这两个命令是掌握dockerfile编写的核心,所以这边还是
-
浅谈CMD和win powershell的区别
cmd是和powershell都可以做命令行交互,批处理和powershell脚本功能也相当. 我不知道你怎么理解cmd,但下面是powershell是基于.net的,只要你足够了解.net,你可以使用她做任何你想做的事情. Windows PowerShell 是专为系统管理员设计的新 Windows 命令行 shell.Windows PowerShell 包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用. 与接受和返回文本的大多数 shell 不同,Windows PowerSh
-
Python eval()函数和ast.literal_eval()的区别你知道吗
eval()函数可以将字符串型的list.tuple.dict等等转换为原有的数据类型 即使用eval可以实现从元组,列表,字典型的字符串到元组,列表,字典的转化,此外,eval还可以对字符串型的输入直接计算 从上面来看,eval功能可谓是非常强大,即可以做string与list.tuple.dict之间的类型转换,还可以做计算器使用,但是eval强大的背后有着巨大的安全隐患,比如,用户恶意输入下面的字符串,是十分危险的 所以这里因为安全处理方式 ast.literal_eval(), 该函数会
-
cmd组合和管道命令的使用方法(命令组合)
1.& Usage:第一条命令 & 第二条命令 [& 第三条命令...] 用这种方法可以同时执行多条命令,而不管命令是否执行成功 Sample: C:/>dir z: & dir c:/Ex4rch The system cannot find the path specified. Volume in drive C has no label. Volume Serial Number is 0078-59FB Directory of c:/Ex4rch 2020
-
docker 使用CMD或者ENTRYPOINT命令同时启动多个服务
需求:django中引入了celery,当启动django项目时,如何将celery服务也启动 利用ENTRYPOINT命令启动 一.编写Dockerfile文件 FROM centos:7 RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 ENV LC_ALL zh_CN.UTF-8 COPY ./hrms $CODE_DIR/hrms/ COPY ./run $CODE_DIR/run/ RUN chmod a+x $CODE_DIR/run/* R
-
Golang执行cmd命令行的方法
1. Golang执行系统命令使用 os/exec Command方法: func Command(name string, arg ...string) *Cmd 第一个参数是命令名称,后面参数可以有多个命令参数. cmd := exec.Command("ls", "-a") if stdout, err := cmd.StdoutPipe(); err != nil { //获取输出对象,可以从该对象中读取输出结果 log.Fatal(err)
-
CMD记录器改良版代码
安装 把代码保存为cmd.bat 放置system32下 把cmd.exe copy为cmd.gif 注册表 添加 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\cmd.exe 字串 Debugger 字串内容 cmd.gif /c cmd.bat 复制代码 代码如下: @echo off title %ComSpec% rem CMD 记录器
-
python调用cmd复制文件代码分享
复制代码 代码如下: import os def load() : filename = os.getcwd() + r'\fromto.txt' if os.path.isfile(filename) : f = open(filename) try : lines = f.readlines() finally : f.close() return line
-
C#隐式运行CMD命令(隐藏命令窗口)
本文实现了C#隐式运行CMD命令的功能.下图是实例程序的主画面.在命令文本框输入DOS命令,点击"Run"按钮,在下面的文本框中输出运行结果. 下面是程序的完整代码.本程序没有使用p.StandardOutput.ReadtoEnd()和p.StandardOutput.ReadLine()方法来获得输出,因为这些方法执行后画面容易卡死.而是通过调用异步方法BeginOutputReadLine来获取输出,并在事件p.OutputDataReceived的事件处理方法中来处理结果. u
-
Windows系统中Java调用cmd命令及执行exe程序的方法
Java调用cmd命令,并输出显示信息: package com.anxin.cmd.test; import java.io.BufferedReader; import java.io.InputStreamReader; public class Command { public static void main(String[] args) { try { Runtime rt = Runtime.getRuntime(); Process pr = rt.exec("cmd /c di
随机推荐
- 探索Perl的世界(更新到40集)-Perl视频教程
- Python变量作用范围实例分析
- 比较Ajax的三种实现及JSON解析
- shell脚本通过expect实现自动单边无密登录功能
- jquery ajax jsonp跨域调用实例代码
- vue.js通过自定义指令实现数据拉取更新的实现方法
- 超级简单实现JavaScript MVC 样式框架
- js实现完美拖拽效果可拖动层与回放拖动规迹并显示拖动距离参数
- Swift操作Quartz 2D进行简单的绘图与坐标变换的教程
- 建站常用13种PHP开源CMS比较
- php 文件上传系统手记
- 基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
- mysql 5.7.14 安装配置简单教程
- Android使用文件进行IPC
- 模仿IE自动完成功能
- Android View事件分发机制详解
- 万能Asp防注入代码 拒绝攻击
- linux时间同步ntp服务的安装与配置
- jQuery使用deferreds串行多个ajax请求
- jQuery之折叠面板的深入解析