Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中使用eval()实现_toString()_Php_Ctf - Fatal编程技术网

在PHP中使用eval()实现_toString()

在PHP中使用eval()实现_toString(),php,ctf,Php,Ctf,我正在寻找一种在PHP中仅使用eval实现_u-toString方法的方法。最终目标是能够读取文件。请注意,这是CTF挑战的一部分,而不是实际应用程序 我得到了以下实现 function __toString(){ eval($this->var); } 由于$var在我的控制之下,我可以将if设置为我想要的任何值。 到目前为止,我已经尝试了以下方法,但没有成功: $var = "return file_get_contents('file.txt');" 有什么提示吗? 更

我正在寻找一种在PHP中仅使用eval实现_u-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);
    }
}

如果检查文档,您将看到
函数\uuu toString()
必须返回一个字符串。因此,无论您在
\uu toString()
方法中执行什么操作,只要确保返回字符串即可。很高兴您提到这不是用于实际应用程序的。因为eval()可能非常危险,并且会产生意外的结果

另外,如果va真的在你的控制之下,为什么不做以下事情

$this->var=file\u get\u contents('file.txt');
//...
函数u_toString(){
返回$this->var;
}

最后一个想法。。。如果您正在执行
$var=“return file\u get\u contents('file.txt');”
,这与执行
$this->var=“return file\u get\u contents('file.txt');“

如果您检查文档,您将看到
函数\u\u toString()
必须返回字符串。因此,无论您在
\uu toString()
方法中执行什么操作,只要确保返回字符串即可。很高兴您提到这不是用于实际应用程序的。因为eval()可能非常危险,并且会产生意外的结果

另外,如果va真的在你的控制之下,为什么不做以下事情

$this->var=file\u get\u contents('file.txt');
//...
函数u_toString(){
返回$this->var;
}

最后一个想法。。。如果您正在执行
$var=“return file\u get\u contents('file.txt');”
,这与执行
$this->var=“return file\u get\u contents('file.txt');”

不同,您可以在
$var
内部执行
回音

$var = "echo file_get_contents('input.txt');";
如果您不想在屏幕上打印任何内容而只是获取文件内容,可以使用输出缓冲。我用过,也用过


您可以
$var
本身内部回声

$var = "echo file_get_contents('input.txt');";
如果您不想在屏幕上打印任何内容而只是获取文件内容,可以使用输出缓冲。我用过,也用过



return
从eval返回,也可以尝试
返回eval($this->var)@vivek_23我尝试过,但没有成功-/@不幸的是,我无法更改函数。我唯一能控制的是$var。然后你所能做的就是
echo file\u get\u contents('file.txt')
return
从eval返回,也可以尝试
返回eval($this->var)@vivek_23我尝试过,但没有成功-/@不幸的是,我无法更改函数。我唯一能控制的是$var。然后你所能做的就是
echo file\u get\u contents('file.txt')谢谢你的回答。我拥有控制权的意思是我不能按照我的意愿设置$this->var。但是,我无法更改uuu toString()实现。确定。这很难。也许我们需要更多的背景。谢谢你的回答。我拥有控制权的意思是我不能按照我的意愿设置$this->var。但是,我无法更改uuu toString()实现。确定。这很难。也许我们需要更多的背景。看起来不错!我在本地尝试了它,我得到了一个错误,但回声仍然通过,但它在远程服务器上不工作。经过一番挖掘,我发现远程服务器运行的是PHP5.5.9。在挑战中,我得到一个“终端输出”,在那里我可以看到errors@MarcIlunga你能分享挑战链接吗?另外,PHP版本不应该是个问题。不幸的是,我不能真正分享挑战链接,因为它是私有的。我不明白的是,它在本地抛出一个可恢复的错误,但仍然打印值,而在远程不打印anything@MarcIlunga如果我不亲自看看挑战,我就不能告诉你很多。而且,我粘贴的代码在我的机器上运行得非常好。在执行代码的服务器上,可能会关闭输出缓冲功能。谢谢您的支持。;)。我将把讨论转移到聊天室,看起来不错!我在本地尝试了它,我得到了一个错误,但回声仍然通过,但它在远程服务器上不工作。经过一番挖掘,我发现远程服务器运行的是PHP5.5.9。在挑战中,我得到一个“终端输出”,在那里我可以看到errors@MarcIlunga你能分享挑战链接吗?另外,PHP版本不应该是个问题。不幸的是,我不能真正分享挑战链接,因为它是私有的。我不明白的是,它在本地抛出一个可恢复的错误,但仍然打印值,而在远程不打印anything@MarcIlunga如果我不亲自看看挑战,我就不能告诉你很多。而且,我粘贴的代码在我的机器上运行得非常好。在执行代码的服务器上,可能会关闭输出缓冲功能。谢谢您的支持。;)。我将把讨论转移到聊天