简单的PHP漏洞测试

时间:2012-04-22 20:04:05

标签: php variables directory-traversal

基本上,我想创建一个网站,向人们展示如何通过模拟它们来防止PHP漏洞。但是,我不能让他们自己工作。

我想看看变量是否等于有效页面(我只有两个用于测试),如果有,则加载该页面。否则,我看它是否包含“../”。如果这些都不是真的,那就简单地说“找不到页面”。

到目前为止,这是我的代码:

<?php
if($page=="LOLone.php" || $page=="LOLtwo.php"){
echo "Welcome, look at the LOL cats!";
include($page);
}else if(strlen(strstr($page,"../"))>0){
echo "Congrats, you found the transversal attack vulnerability!";
}else{
echo "Page not found!";
}
?>

每当我尝试使用page=LOLone.php(或LOLtwo.php甚至../)时,都会显示“找不到页面!”我不能像我一样比较变量,或者这可能是我的网络主机安全吗?我有点困惑,但我对PHP比较新,所以我觉得我错过了一些简单的东西......

好的,我犯了一个简单的错误。一个非常大的。抱歉。 感谢所有的回复,我会非常小心自己的服务器被黑客入侵。在这个例子中我应该是干净的,因为我只有在它等于指定值时才包含页面。再次感谢。

2 个答案:

答案 0 :(得分:1)

尝试

$webPath = "/home/www/somesite/userpages" ;
$pages = array(
"page1.php",
"page2.php"     
);


//http://testing.com?page=xxx
$_GET['page'] = "../../etc/passwd" ; //Sample Hack


//Prepare Include 

$page = realpath($_GET['page']);
$dirName = dirname($page);
$baseName = basename($page) . ".php";


if($dirName != $webPath)
{
    die("Die! Die! Die!");
}

if(!in_array($baseName, $pages))
{
    die("Kill! Kill! Kill!");
}

echo "Welcome" ;

答案 1 :(得分:0)

替换

if(strlen(strstr($page,"../"))>0)

使用

if( strpos($page, '../') !=== false )

现在,您正在检查strstr()来电的长度,这不是正确的方法。现在它改为检查../的位置 - 如果它不是假的 - 我们确定该字符串有它。

但是,您应该从另一个更简单的项目开始 - 因为只会确保您的服务器因为您忘记停止的漏洞而被黑客攻击。