URL hack执行任意PHP命令

时间:2013-07-22 20:03:17

标签: php url

我有一个文件index.php(如下所示)。文件夹“myfolder”中有另一个文件“other.php”

$a = $_GET['page'];

include('myfolder/' .  $a  .  '.php');

网址为:localhost/index.php?page=other

我想做一个像这样的黑客攻击:

localhost/index.php?page=other.php);<MALICIOUS CODE;//

//将评论该行的其余部分)

这可能吗?

4 个答案:

答案 0 :(得分:2)

不,你不能注入任意PHP代码,除非该代码被传递到将被评估的地方。通常,PHP字符串不会被评估为PHP。

但仍存在潜在的安全漏洞。用户可以通过在网址中加入myfolder来加载../上方的任意页面。如果你有一个允许他们上传PHP文件的上传表单,他们也可以运行任意代码。由于他们可以上传他们想要运行的代码,然后将其包含在index.php

答案 1 :(得分:2)

您将无法从URL执行任意代码。相反,请尝试使用directory traversal并查看可以调用的有趣代码。

此外,);//将不会被执行。这与SQLi不同。

SQLi以您尝试的方式工作的唯一原因是因为PHP创建了语句而SQL(MySQL等)会解析该语句。如果您创建了一个类似的语句并且eval()它,它将与读取PHP给出的语句的SQL基本相同。

答案 2 :(得分:0)

这不会执行您提供的代码。它只是作为include函数查找的文件名的一部分插入。变量连接不会导致整个PHP行被重新解释。

PHP执行用户提供的参数的唯一方法是脚本调用eval(),参数中包含参数。

答案 3 :(得分:0)

虽然这不会导致任意代码执行,因为你担心它仍然不是一个好主意。

想象一下,如果用户做了类似于

的事情
 localhost/index.php?page=../../dbconfig.ini

更好的方法是使用将主题名称映射到文件的地图。

$pageMap = array("other"=>"other.php", "home"=>"home.php", "about-us"=>"about-us.php");

if (isset($pageMap[$_GET["page"])){
     include $pageMap["page"];
} else {
     // do your 404 code.
}