Аудит безопасности сайтов. Чтение файлов на сайте.

По мере разработки, в сфере Web-технологий, приходится сталкиваться с уязвимыми к атаке участкам кода. Например код найденный при аудите сайта. Данный код позволял загружать файлы PDF с сайта.
 Например:
 http://somehost.test/download.php?dir=DOCS&filename=test_doc_.pdf
Из-за недостаточной проверки входящих параметров dir и filename возможен выход за пределы  папки DOCS, что позволяет читать системные файлы, такие как php, ini и другие...

Уязвимый скрипт чтения файлов на сайте:

<?php
if(isset($_GET['dir'])){
    $newdir=$_GET['dir'];
    if(strstr($newdir, '.')){
        $fullPath = $newdir;
        if ($fd = fopen ($fullPath, "r")) {
            $fsize = filesize($fullPath);
            $path_parts = pathinfo($fullPath);
            $ext = strtolower($path_parts["extension"]);
            switch ($ext) {
                case "pdf":
                header("Content-type: application/pdf"); // add here more headers for diff. extensions
                header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); // use 'attachment' to force a download
                break;
                default;
                header("Content-type: application/octet-stream");
                header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
            }
            header("Content-length: $fsize");
            header("Cache-control: private"); //use this to open files directly
            while(!feof($fd)) {
                $buffer = fread($fd, 2048);
                echo $buffer;
            }
        }
        fclose ($fd);
    }
}

Комментариев нет:

Отправить комментарий