php - 在 PHP 中使用 eval() 实现 __toString()
问题描述
我正在寻找一种仅在 PHP 中使用 eval 来实现 __toString 方法的方法。最终目标是能够读取文件。请注意,这是 CTF 挑战的一部分,而不是真实世界的应用程序。
我得到了以下实现
function __toString(){
eval($this->var);
}
由于 $var 在我的控制之下,我可以将 if 设置为任何我想要的。到目前为止,我已经尝试了以下但没有成功:
$var = "return file_get_contents('file.txt');"
有什么提示吗?
更新:相关代码如下:
class MyClass{
private $var;
function __toString(){
if (isset($this->var) eval($this->var);
}
}
解决方案
如果您检查文档,您会看到它function __toString()
必须返回一个字符串。所以无论你在__toString()
方法内部做什么,只要确保你返回一个字符串。很高兴您提到这不适用于现实世界的应用程序。因为 eval() 可能非常危险并且会产生意想不到的结果。
此外,如果 va 真的在您的控制之下,为什么不直接执行以下操作...
$this->var = file_get_contents('file.txt');
//...
function __toString(){
return $this->var;
}
最后一个想法......如果你正在做$var = "return file_get_contents('file.txt');"
,那和做的不是一回事$this->var = "return file_get_contents('file.txt');"
推荐阅读
- python - Beautifulsoup -
在 div 文本中添加标签? - python - 为什么在运行 python 脚本时,Bash 或 zsh 终端中的 json 字符会发生变化?
- sql - 在 SQL Server 中使用单个 case 语句选择多个列
- c# - 我应该担心禁用“仅我的代码”(C#)时引发的 InteropServices.COMException 吗?
- architecture - 为什么不使用 eval 的规范参考?
- azure - ADF 中的复制数据活动会创建奇怪的临时文件名
- node.js - 使用 Node js 将 fs.files 和 fs.chunks 从 db 移动到另一个 db
- reactjs - 三元表达式意外令牌错误
- javascript - “TypeError:无法读取未定义的属性'过滤器'”,对于其他数组函数,例如使用 ReactJS 和 redux 的 map
- python - 为什么python很慢?我怎样才能让它更快?