2012-04-22 2 views
0

기본적으로 나는 PHP 취약점을 시뮬레이트하여 PHP 취약점을 방지하는 방법을 사람들에게 보여주기 위해 사이트를 만들고 싶습니다. 그러나, 나는 그들 자신을 일하게 할 수 없다.간단한 PHP 취약점 테스트

가변 변수가 유효한 페이지인지 확인하고 (테스트 용으로 2 개만 있음)보고 싶으면 해당 페이지를로드합니다. 그렇지 않으면 "../"이 포함되어 있는지 확인합니다. 이들 중 어느 것도 사실이 아니라면 단순히 "페이지를 찾을 수 없음"이라고 말합니다. 이것은 지금까지 내 코드입니다

: "페이지를 찾을 수 없습니다"나는 말한다 page=LOLone.php (또는 LOLtwo.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!"; 
} 
?> 

내가하는 방식으로 변수를 비교할 수 없습니까? 아니면 내 웹 호스트가 안전하게 재생할 수 있습니까? 나는 조금 혼란 스럽지만 나는 PHP에 비교적 익숙하지 않아서 뭔가 간단한 것을 놓치고있는 것처럼 느껴진다. ...

좋아, 나는 실수를했다. 매우 큰 것도. 죄송합니다. 모든 답장을 보내 주셔서 감사 드리며 자체 서버가 해킹당하는 것에 대해 매우주의해야합니다. 이 예제에서는 지정된 값과 동일한 경우에만 페이지를 포함시키기 때문에 깨끗하게 처리해야합니다. 다시 한번 감사드립니다.

+0

PHP가 JS와 같이 'else if' 또는'elseif'에 대해 엄격한 지 기억하지 않습니다. – Blake

+9

다른 사람을 가르치려고 새, 당신이 자신을 할 수없는 경우 기본. –

+0

감사합니다. : P 악용하는 방법을 이해합니다. 직접 해본 적이 없습니다. – Vreality

답변

1

이제 마우스 오른쪽

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

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

, 당신에게 올바른 방법으로하지 않은 strstr() 전화의 길이를 점검하고 교체

$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" ; 
+0

바바. 정확히 내가 무엇을 찾고 있었는지. 나는 $ page = $ _GET [ "page"]를 설정하는 것을 완전히 잊는다; 나는 그것을 잊었다는 것을 믿을 수 없다 ... – Vreality

+0

@ Vreality2007 모두와 마찬가지로, 당신도 볼 수있다. 당신은 경험하지 못했다. 그러나 저는 이것이 동시에 PHP뿐만 아니라 보안에 대해서도 배우는 좋은 방법이라고 생각합니다! 계속 배우십시오! –

+0

동의하시는 것을 잊지 않기를 바랍니다 ...: D – Baba

0

시도 가기. 이제 대신에 ../의 위치를 ​​확인하고 거짓이 아닌 경우 문자열에 해당 문자가 있는지 확인합니다.

그러나 더 간단하고 간단한 프로젝트로 시작해야합니다. 중지해야하는 것을 잊어 버린 공격으로 인해 서버가 해킹 당할 수 있기 때문입니다.

+0

제안 된 변경 사항 및 팁을 가져 주셔서 감사합니다. – Vreality