解析和应对PHP中的eval函数
P粉476547076
P粉476547076 2023-08-13 17:40:10
[PHP讨论组]
<p>免责声明:这只是一个示例,用于学习PHP代码注入,而不是在任何方式中使用的生产代码。我完全意识到这不是良好的编码实践。</p> <p>我有以下PHP脚本:</p> <pre class="brush:php;toolbar:false;">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt; &lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"&gt; &lt;head&gt; &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"/&gt; &lt;title&gt;示例脚本&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;示例页面&lt;/h1&gt; &lt;p&gt;现在进行数学计算。请输入一个公式进行计算。例如:1+1。&lt;/p&gt; &lt;form method="get"&gt; &lt;p&gt;公式:&lt;input type="text" name="maths" /&gt;&lt;/p&gt; &lt;p&gt;&lt;input type="submit" value="计算" /&gt;&lt;/p&gt; &lt;/form&gt; &lt;? if (( isset($_REQUEST["maths"])) &amp;&amp; ($_REQUEST["maths"] != "") ) { echo "&lt;p&gt;结果是:"; eval("echo (".$_REQUEST["maths"].");"); echo "&lt;/p&gt;"; } ?&gt; &lt;/body&gt; &lt;/html&gt;</pre> <p>这个脚本容易受到PHP代码注入的攻击,我可以通过以下方式来破坏它(大部分是通过试错发现的):</p> <pre class="brush:php;toolbar:false;">$a='1');phpinfo();echo($a</pre> <p>然而,我并不完全理解其中的原理。据我理解,我需要完成echo语句,插入自己的代码(例如phpinfo()),然后编写另一个函数(例如echo)来处理闭合括号。</p> <p>我以为像这样的代码会起作用:</p> <pre class="brush:php;toolbar:false;">");phpinfo();echo("</pre> <p>然而,这并不起作用,因为phpinfo被视为字符串的一部分,不会被eval函数评估。 我还尝试了转义引号,但没有成功。</p> <p>问题:</p> <ul> <li>在这里注入代码的正确方式是什么?</li> <li>为什么<code>$a='1');phpinfo();echo($a</code>会起作用?</li> </ul><p><br /></p>
P粉476547076
P粉476547076

全部回复(2)
P粉561749334

问题在于这个语句是无效的:

echo ();

它会导致解析错误。所以你需要注入一些东西来避免这个错误。例如:

$var = "1); phpinfo(); echo (1";
eval("echo ($var);");
P粉033429162

当你使用那个输入时,替换变量的结果是:

eval("echo ($a='1');phpinfo();echo($a);");

所以这里赋值了 $a='1',并且输出了该赋值的结果(即被赋给 $a 的值)。然后执行了 phpinfo()。最后再次输出了 $a

如果你尝试使用 );phpinfo();echo(,它不会起作用,因为它试图执行 echo ()。但是 echo 至少需要一个参数。

所以要在这里注入代码,你必须确保输入以在 echo ( 之后是有效的内容开头,并且以在 ); 之前是有效的内容结尾。将你想要注入的额外代码放在这两部分之间。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号