친구가 웹 사이트 용 모듈을 완성하도록 돕고 있습니다. 그의 모듈을 보는 첫인상에서 나는 아주 위험한 것을 발견했지만, 그는이 방법이 안전하다고 말한다. 코드의널 바이트 취약점 검사
부 :
session_start();
if(isset($_POST['foo']))
{
$_SESSION['foo'] = $_POST['foo'];
}
if(isset($_SESSION['foo']))
{
$foo['foo'] = $_SESSION['foo'];
}
if(is_file("inc/". $foo['foo'] . "/bar.php")) {
// code
}
else {
// code
}
주 : 파일 (INC/테스트/bar.php)의 존재;
나는 그의 코드를 테스트하고 싶어, 나는 다음과 같은 요청을 보내
POST :: foo는 => 시험/bar.php % 00
POST :: foo는 => 시험/bar.php \ 0
curl_setopt ($ ch, CURLOPT_POSTFIELDS, 'foo = test/bar.php'. chr (0x00));
그러나 이러한 방법 중 어느 것도 작동하지 않았습니다. 그 코드는 정말 안전합니까? 어떻게 보안을 무시하기 위해 null 바이트를 보낼 수 있습니까? 내 친구에게 코드가 안전하지 않다는 것을 보여주고 싶습니다.
내가 짧은에, this 솔루션을 발견했습니다
저는 PHP 전문가가 아니므로 주석으로 남겨 두겠습니다. "../../"와 같이 전달할 수는 없습니다. ./../ "파일 시스템에 임의로 액세스 할 수 있습니까? –
@ChrisThompson 끝에 "/bar.php"가 있으므로 모든 경우에 ../../../bar.php를 확인합니다. – John
괜찮습니다. 잠재적으로 액세스하는 경우 위협이됩니다. _some other_' 바.php' 파일에 접근 할 수 없습니다. –