2013-07-22 3 views
-3

하나의 index.php 파일이 있습니다 (아래에 있음). localhost/index.php?page=other임의의 PHP 명령을 실행하기위한 URL 해킹

내가 이런 해킹 뭔가하고 싶은 :

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

을 (//은 폴더 "MyFolder에"

$a = $_GET['page']; 

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

URL이 내부에 "other.php"다른 파일이 있습니다 나머지 줄을 주석 달기)

이것이 가능합니까?

+0

가능합니다. 그러나 엄청난 보안 위험이 따르므로이를 원하지는 않습니다. –

+0

해킹을 배우려고합니다. 그러나 내가 이것을 할 때 문제는 모든 것이 "page = other.php", 악의적 인 코드, // 문자열이되고 해킹이 수행되지 않는다는 것입니다. – Rash

+0

문자열과 PHP 코드의 차이점을 읽어보십시오 – PeeHaa

답변

2

아니요, 임의의 PHP 코드를 삽입 할 수 없습니다. 코드가 평가되는 곳으로 전달되지 않으면 예외입니다. 일반적으로 PHP 문자열은 PHP로 평가되지 않습니다.

그래도 잠재적 인 보안 취약점이 있습니다. 사용자는 URL에 ../을 포함하여 myfolder 위의 임의 페이지를로드 할 수 있습니다. PHP 파일을 업로드 할 수있는 업로드 양식이있는 경우 임의의 코드를 실행할 수도 있습니다. 그들이 실행할 코드를 업로드 한 다음 index.php의 코드를 포함시킬 수 있습니다.

0

사용자가 제공 한 코드는 실행되지 않습니다. 단순히 include 함수가 찾는 파일 이름의 일부로 삽입됩니다. 변수 연결은 전체 PHP 라인을 다시 해석하지 않습니다.

PHP가 사용자 제공 매개 변수를 실행하는 유일한 방법은 인수에 포함 된 매개 변수를 사용하여 eval()을 호출하는 것입니다.

2

URL에서 임의 코드를 실행할 수 없습니다. 대신, directory traversal을 사용해보고 흥미로운 코드가 무엇인지보고 로 전화하십시오.

);//도 실행되지 않습니다. 이는 SQLi와는 다릅니다.

SQLi가 시도하는 방식으로 작동하는 유일한 이유는 PHP가 구문을 생성하고 SQL (MySQL 등)이 구문을 구문 분석하기 때문입니다. 문을 비슷하게 만들고 eval() 문을 작성했다면 PHP가 제공 한 문을 읽는 SQL과 본질적으로 동일합니다.

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. 
} 
관련 문제