Перейти к содержимому

Фотография

Курс молдого бойца...

- - - - -

  • Авторизуйтесь для ответа в теме

#1
+s.p.a.m.+

Отправлено 30 ���� 2008 - 05:36

+s.p.a.m.+

    Личный хакер форума=)

  • Banned
  • 228 сообщений
#1 Многие начинающие взломщики задаются вопросом – а для чего же нужен взлом web-сайтов? Этот вопрос возникает просто из-за не понимания строения веб-сайтов. Часто я слышу фразы типа этой – “Вот взломаешь ты сайт, но там же только странички и ничего больше интересного!”. Дело в том, что веб-сайты работают не только со страничками, но и с определёнными базами данных, характерные для, опять же, определённого сайта. Например, сайте с юмором может работать с базой данных, в которой содержится огромное количество анекдотов, а сайт, который предоставляет услуги электронной почты – с базой содержащей логины и пароли пользователей. В последнее время сайты просто грубо дефейсятся (подмена главной странички) – что не очень красиво. Ведь кроме дефейса можно скопировать какую либо базу данных, встроить шелл в скрипты сайта и ещё много-много всего. Так же проникновения через сайт может осуществляться из-за того что файрвол разрешает подключение к различным службам только с определённой группы IP-адресов, а соединения с сайтом разрешаются любым пользователям так как чаще всего сайты общедоступны. Таким образом, 80-ый порт (веб-сервер) не фильтруется файрволом из-за того, что это ненужно. Следовательно, взломщик, получив контроль над сайтом, сможет через него проводить различные действия с атакуемым компьютером. Давайте ниже рассмотрим основные причины взлома веб-сайтов: Вот несколько причин для взлома какого-либо сайта: 1. Дефейс. 2. Получение полного контроля над сервером. 3. Для того чтоб похвастаться (перед друзьями, подругой и т.д.). 4. Кража конфиденциальной информации. 5. Месть (чаще всего этим занимаются уволенные служащие). На самом деле причин может быть намного больше. Я привёл только самые распространенные. 1. Дефейс Дефейс – это подмена главной страницы сайта. Например, можно заменить главную страницу на страничку с надписью “Здесь был Вася”, а потом бежать к друзьям и кричать что Вы супер-хакер?. Но иногда дефейс сайта выглядит и по другому, например: “Прекратите войну с Ираком“. А вообще есть люди, которым просто нравится дефейс, не знаю почему но вот сильно-сильно нравится. Но у таких людей дефейсы не просто белые странички с надписью “Hacked by super hacker” а по настоящему красивые с картинками выполненными на фотошопе или корэле. Аж смотреть приятно ) 2. Кража конфиденциальной информации. Чаще всего это делается для продажи этой информации. Например, скопировав базу какого ни будь почтового сервера, Вы сможете продать её за хорошие деньги (цена зависит от популярности сервера), но и подумайте о том что за это можно получить хороший срок. Хотя не всё так красиво. Если Вы каким-то образом наткнулись на уязвимость в каком-то популярном сайте и своровали оттудова таблицу с логинами и паролями пользователей, то, если Вы не имеете хороших знакомых, продать её будет очень сложно, иногда даже не возможно. Но как только администрация, взломанного сайта, узнает о краже, то можно ждать людей в погонах либо быстрого изменения системы входа (принудительная смена паролей, временное выключение сервера и т.д.). Я лично знаю человека, который за хорошие деньги пытался продать базу крупного хостинга, но первым и последним его клиентом стал сотрудник ФСБ. Но слава богу, всё обошлось и получилось договориться с пострадавшей компанией. 3. Получения полного контроля над сервером. Сейчас данная цель стоит второй, по популярности, после дефейса. Чаще всего захваченный сервер либо используют как-то в своих целях, либо просто продают. Под полным контролем подразумевается получение прав администратора (windows) или root (*nix). Далее можно просто использовать компьютер например для расшифровки паролей или сканирования других серверов (зачем светить свой IP когда есть чужой), так же можно развернуть на захваченной машине прокси-сервер для своих нужд. Вобщем есть много вариантов, всё зависит только от Вашей фантазии. Хотелось бы так же сказать пару слов на счёт продажи захваченного сервера. Цены варьируются от 10$ и выше, чем круче железо на компьютере тем больше цена. Ну и соответственно компьютер Васи Пупкина будет стоить намного дешевле чем компьютер какой-либо крупной компании – что само собой разумеется. Ещё цена может зависеть от страны, в которой находится захваченный компьютер. По собственному опыту могу сказать что врятли кто-то из Русских будет покупать взломанный компьютер, который находится в России. Послесловие. А теперь подумайте - кто может стать жертвой очередного хакера, взламывающего сайты? Конечно, это может быть и чья то домашняя страничка, а может быть и сайт крупной хостинговой компании, которая может обслуживать сотни сайтов. Представьте, что будет, если взломщик получит полный контроль над этими сайтами, их базами данных и т.д.? За место хостера это может быть и сайт правительственной организации и крупного банка. Мне кажется, что после прочтения вышеописанного у Вас не осталось вопросов по поводу причин взлома сайтов.

#2
+s.p.a.m.+

Отправлено 30 ���� 2008 - 05:43

+s.p.a.m.+

    Личный хакер форума=)

  • Banned
  • 228 сообщений
#2
Здравствуй. Данный цикл статей я начал писать именно потому, что материала в сети вроде бы много, но вот он либо не точный, либо по системе “моё дело написать, Ваше дело разобраться” – что для большинства новичков не есть хорошо. Тем более статьи, размещенные в Интернете, чаще всего авторы пишут подразумевая то, что читатель уже имеет средний опыт взлома.

В цикле статей “Курс молодого бойца.” я постараюсь рассмотреть некоторые типы уязвимостей, которые могут быть обнаружены в php(и не только)-скриптах, причем постараюсь рассмотреть всё это так, чтобы даже новичок мог спокойно разобраться. Небольшие требования к читателям данного цикла статей:
• Знать что такое IP адрес
• Знать что такое сетевые порты.

По ходу обсуждений уязвимостей мы будем проводить некоторые эксперименты со скриптами, которые будем писать сами и запускать их на своём веб-сервере. Плюс ко всему будем писать небольшие эксплойты для разных случаев. Для начала нам конечно же понадобится сам веб-сервер, с поддержкой PHP(это первый проблемный момент в этом цикле статей – сразу всё может не получится. Второй будет дальше.). Для этого нам очень хорошо подойдёт Denver – хороший комплекс программ от отечественного производителя (скачать можно на http://www.denwer.ru/ ).

С его установкой проблем возникнуть не должно, единственное, что может слегка озадачить – это то, что ярлыки на рабочем столе, после установки, могут не создаться. В этом случае нужно просто пройти в папку [папка_куда_Вы_ставили_Denwer]/etc/ . Там Вы найдёте исполняемые файлы:
1. Run.exe – Запуск веб-сервера (Стартует Apache и MySQL)
2. Stop.exe – Остановка веб-сервера
3. Restart.exe – Рестарт веб-сервера соответственно.
Скрипты сайтов лежат в папке /home/. Нам нужна будет только папка localhost. В ней есть папка www – вот там и находятся все скрипты сайта, который Вы увидите, если наберёте http://localhost/, туда же нам нужно будет сохранять и свои скрипты.

Также нужно скачать пакет PHP5 (с этого же сайта) и установить его. Он сам найдёт куда устанавливаться, главное запустить. PHP5 нам нужен для написания скриптов работающих с MsSQL, PostgreSQL и SQLite. В PHP4 нужные нам СУБД не поддерживались, поэтому приходилось копаться в кучах библиотек и в ручную всё подключать. После установки внесите небольшие изменения в файл php.ini находящийся в папке [папка_Denver`a]/usr/local/php5.

Найдите в нём следующие строчки:
;extension=php_mssql.dll
;extension=php_pgsql.dll
и уберите в них точку с запятой в начале строки. Так же добавьте строчку
extension=php_sqlite.dll
Затем перезапустите веб-сервер, всё должно пройти без ошибок. Из-за того что скрипты написанные для этих СУБД написаны под PHP5, нам нужно будет назвать их не *.php а *.php5

Так, веб-сервер установлен, далее нам понадобится PHP-редактор, я предпочитаю PHP Expert Editor (www.phpexperteditor.com), Вы же можете воспользоваться хоть блокнотом, главное чтоб Вам было удобно. Далее нам понадобится Perl. Существует множество пакетов, но мне больше нравится Active Perl. Вы, опять же, выбираете на свой вкус. Так же нужен любой текстовый редактор для написания perl-скриптов, можете так же воспользоваться обычным блокнотом.

Внимание!!! Не пользуйтесь офисными редакторами (типа Microsoft Word) для написания php или perl - скриптов. Скрипты работать не будут!

Далее, для практического изучения некоторых уязвимостей, нам понадобится 4 СУБД:
1. MySQL (Уже имеется в базовом пакете Денвера)
2. MsSQL (не буду говорить где взять данный СУБД потому что пропаганда пиратства – это плохо )
3. PostgreSQL(скачать http://wwwmaster.pos...sql-8.2.0-1.zip (для скачки выберите страну(Russian )))
Вы нашли/скачали эти СУБД - попробуйте установить их и запустить. Вот вроде бы и всё что нужно для подготовки. Давайте начнём.

#3
+s.p.a.m.+

Отправлено 30 ���� 2008 - 05:45

+s.p.a.m.+

    Личный хакер форума=)

  • Banned
  • 228 сообщений
#3
Многие новички часто задаются вопросом – а с чего же мне начать взлом сайта? Сейчас я попытаюсь об этом рассказать.

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

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

Сейчас я расскажу как собрать как можно больше информации об атакуемом сервере. Дополнительная информация может очень даже помочь при проведении атаки или при поиске эксплойта.

Robots.txt

Файл robots.txt используется на сайтах для того, чтобы предотвратить сканирование поисковыми пауками директорий указанных в этом файле. Файл robots.txt лежит в корневом каталоге сайта (http://www.[site].ru/robots.txt). Но хочу обратить Ваше внимание на то что не на каждом сайте можно встретить данный файл.

Robots.txt имеет примерно следующее строение:

User-agent:*
Disallow: /Dir1
Disallow: /Admin
Disallow: /Users
Disallow: /Test
Disallow: /Unit

Здесь Dir1, Admin, Users, Test и Unit – это каталоги, доступ к которым запрещен поисковым паукам (каталоги могут быть совершенно другими, это зависит от администратора). К определённым директориям запрещается доступ паукам из-за того, что в них может храниться конфиденциальная информация. В таких каталогах чаще всего хранятся странички администрирования и какая-либо важная информация. Каталоги в robots.txt указываются из корневого каталога сайта. Не смотря на то, что поисковым паукам доступ туда закрыт, Вы, если повезёт, сможете в эти каталоги без проблем обратится.

/CGI-BIN/

Данный каталог используется для хранения и выполнения различных скриптов. Каталог /CGI-BIN находится в корне сайта (http://www.[site].com/cgi-bin/). Так же, в этой директории, могут присутствовать log-файлы содержащие в себе действия скрипта и записи об ошибках (частенько попадается). В /CGI-BIN, после установки сервера, хранится файл test.cgi (или test.pl). Большинство администраторов его удаляют, но некоторые забывают (или просто не знают) о важности удалении этого скрипта. Чем же этот скрипт может помочь взломщику? Данный скрипт может предоставить важную информацию о сервере. Например, администраторы, которые пользуются пакетом denever, часто забывают удалять из папки /cgi/ скрипт test.php который выводит информацию об установленной версии php и об его конфигурации. Вот пример результата запроса /cgi-bin/test.pl того же denever’а:
Этот текст сгенерирован файлом /home/[имя сайта]/cgi-bin/test.pl, расположенным в CGI-директории виртуального хоста localhost.
Увидев эту надпись, взломщик уже знает что все файлы сайта лежат в директории /home/[имя сайта]/

Заметьте что не на всех сайтах так. Каталог /CGI-BIN больше распространён на серверах с установленным apache. В IIS за место /CGI-BIN имеется папка /scripts . Идеальным было бы поставить у себя на компьютере точно такой же пакет (который установлен на сервере) и уже у себя на компьютере разбираться в его строении и в файлах дающихся для теста.

Папка может называться и не cgi-bin. Она может иметь названия cgi, cgi-glob и т.д. А вообще, администратор может создать совершенно отдельную папку и разрешить в ней исполнения cgi-скриптов.

Дополнительная информация.

Дополнительная информация никогда не бывает лишней. Дополнительной информацией может быть абсолютно всё, что поможет хоть как-то во взломе. Для начала, можно запросить не существующую страницу, конечно же, вы увидите сообщение об ошибке, но внизу, скорее всего, будет указана версия установленного веб-сервера (зависит от лоховитости администратора, но следует принять во внимание то, что иногда данные могут быть специально изменены). Сейчас имеется множество админов, которые держат сервера под Linux. При установке Linux они не редко указывают, что нужно установить сразу веб-сервер, почтовый сервер и т.д. Чем плоха такая установка? Плоха она тем, что если во время не подправить конфигурационные файлы взломщик вместе с сообщением об ошибке увидит и версию веб-сервера и операционной системы и модов, установленных для веб-сервера (Такую вещь я видел на сайте одного из крупных банков). Хотя если собирать Apache самому, из исходников, то при ошибке он не скажет версию ОС. Так же администратор может установить все под ряд модули для веб-сервера (просто так, чтоб было). Это очень плохо тем, что если в одном из модулей будет найдена уязвимость, то пострадает сервер, даже если данный модуль не используется. Вот пример плохого администрирования, запрашиваем не существующий документ и появляется ошибка:

Not Found





The requested URL /ewfwefw.pl was not found on this server.





Apache/2.0.52 RedHat 10.0 (modules)




Как видите мы уже знаем версию веб-сервера, ещё и тип ОС которая стоит на сервере + версия ОС. Дальше (в большинстве случаев) идёт описание модулей которые установлены для Apache+версии этих модулей, я их приводить не стал а просто заменил словом modules (Лень заново всё ставить J). А вот ответ нормально администрируемого сервера

Not Found





The requested URL /wefew was not found on this server.





Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.



Тут ни версии веб-сервера, ни даже названия. Но только по типу ответа можно судить что стоит Apache т.к. IIS выдаёт ответ, который оформлен совершенно по другому.

Так же дополнительной информацией может считаться листинг директорий.

Листинг директории это просмотр её содержимого. Дело в том что в каждой папке должен находится файлик index.html, index.php и т.д., а вот если этого файлика в папке нету то веб-сервер показывает всё содержимое этой папки. Пример:



В директориях могут находиться файлы, ссылок на которые не существует. Такие файлы могут использоваться для быстрого переконфигурирования сайта, или администрирования определённой его части. Обратите внимание на то, что за просмотр папок отвечает отдельный модуль, если администратор его отключит то Вы увидите пустую страницу.

Версии установленных скриптов.

В данное время очень много как бесплатных так и платных скриптов для сайтов. Если компании жалко денег на заказ сайта у какойн-нибудь веб-студии то администратор просто скачивает готовые скрипты и устанавливает их. Чаще всего получается очень даже приятный сайт, с красивым дизайном и многофункциональностью. Но разработчики таких скриптов обязательно оставляют на своих скриптах запись о том кто автор скрипта и домашнюю страничку. Чаще всего эта надпись находится внизу. Вот пример указания авторских прав в форумах phpBB:

Powered by phpBB 2.0.17 © 2001, 2005 phpBB Group

Как ты видишь тут указано имя форума (phpBB), его версия (2.0.17), имя и годы существования группы(2001,2005 phpBB Group), которая разработала его.

Администраторы чаще всего удаляют версию форума, или подделывают её. Если же всё-таки версия форума настоящая и администратор её не затирает то можно попробовать поискать информацию об уязвимостях данного форума в публичных источниках. Вдруг эта версия дырявая?

Так же дела обстоят и с другими бесплатными скриптами. Но если же нет версии то бывают (редко) какие ни будь признаки по которым можно отличить версию скрипта. В данном случае скрипт скачивается и устанавливается у себя на компьютере, затем исследуется. Но об этом позже.

Ошибки и недоработки в скриптах.

Сейчас очень редко можно встретить сайты, которые не используют скрипты. Скрипты могут быть не достаточно защищены. Это уже не недоработка администратора, а недоработка программиста написавшего этот скрипт. Рассмотрим следующий пример:

На сайте http://www.[site].com имеется скрипт story.php, который отвечает за показ, выбранного пользователем, рассказа. Название рассказа передаётся в параметре story. Скрипт просто берёт из папки файл с именем рассказа и выводит его пользователю. Вот пример ссылки: http://www.[site].com/story.php?story=dead_man.txt

Если программист, который писал этот скрипт, не уделил внимание фильтрации опасных символов то после подставления в ссылку опасного символа (например одинарной ковычки http://www.[site].com/story.php?story=dead_m’an.txt) то покажется ошибка, из которой можно извлечь много интересного. Вот небольшой пример ошибки связанной с работой с файлами:

Warning: fopen(./data/storys/dead_m'an): failed to open stream: No such file or directory in D:Websiteindex.php on line 54


Warning: fputs(): supplied argument is not a valid stream resource in D:Websiteindex.php on line 55


Warning: fclose(): supplied argument is not a valid stream resource in D:Websiteindex.php on line 56


Warning: file(./data/storys/dead_m'an): failed to open stream: No such file or directory in D:Websiteindex.php on line 60


Warning: array_reverse(): The argument should be an array in D:Websiteindex.php on line 63



Из этой ошибки можно понять, что все рассказы расположены в папке /data/storys/ и то что все файлы сайта лежат в папке D:Website. А вот тут уже можно увидеть что веб-сервер стоит на платформе Windows (сайт лежит на диске D ).

Это конечно уже уязвимость, но о них мы поговорим чуть позже.

phpinfo.php

Данный файл (прим. редактора: на самом деле это функция такая) содержит в себе всю информацию об установленной версии php и ещё много интересной информации. phpinfo используется разработчиками для отладки сайта. Когда сайт только поднимают и настраивают, разработчикам часто приходится обращаться к этому файлу, в нём лежит много информации о конфигурации php. Эта же информация может быть полезна взломщику при исследовании защиты сайта. Частенько, после окончания отладок и настроек, разработчики забывают убирать этот файл, что может привести к не очень хорошим последствиям. Также этот файл может быть переименован или в нём может содержаться какая-нибудь шутка администратора. Вообще этот файл может располагаться где угодно, так что если всё-таки он очень нужен то можете проверить на его наличие все директории.

Вот небольшой кусок информации, которую можно найти в этой файле:



Отсюда видно что версия php – 4.3.11 . ОС, на которой установлен веб-сервер это Windows NT 5.0 (Windows 2000). Далее видно что сам php установлен в D:UtilsPhp . Там же лежит конфигурационный файл php.ini. После этой информации в phpinfo содержится информация о конфигурации php и ещё много всего интересного. Вообще вся информация дающаяся phpinfo занимает несколько листов формата А4.

Заголовок ответа.

Когда вы запрашиваете у сервера какой-либо документ то он, в заголовке ответа, указывает информацию о себе. Данный способ может быть полезен тогда, когда при выводе ошибок или листингов сервер не сообщает о себе ничего. С помощью браузера заголовок ответа не получить, зато большинство программ это умеют. Они будут описаны чуть позже. Вот небольшой пример: запрашиваем на одном веб-сервере несуществующий документ, в ответ получаем следующую ошибку:

Not Found





The requested URL /ewfwe.pl was not found on this server.





Apache/1.3.33 Server at www.[site].ru Port 80



Отсюда видим - сервер даёт информацию только о своей версии и всё.

Далее делаем запрос на любой существующий (можно и не существующий) файл и в заголовке находим следующую информацию:

HTTP/1.1 200 OK





Date: Sat, 19 Aug 2006 15:47:33 GMT





Server: Apache/1.3.33 (Unix) PHP/4.3.10 rus/PL30.20





X-Powered-By: PHP/4.3.10





Connection: close





Content-Type: text/html; charset=koi8-r





Expires: Thu, 01 Jan 1970 00:00:01 GMT





Last-Modified: Sat, 19 Aug 2006 15:47:33 GMT



Давайте разберём только интересующую нас строчку.

Это строчка с информацией о веб-сервере(3-я сверху). Обратите внимание на то, что при ошибочном запросе документа веб-сервер выдал только информацию о своей версии, а тут сразу видно и дополнительные модули + их версии: PHP/4.3.10 и PL30.20 (это perl). Так же по строчке Apache/1.3.33 (Unix) можем судить о том, что операционная система точно не Windows. Но эта надпись не означает того, что на сервере стоит именно Unix, там может стоять Linux, xBSD и любая другая *nix система. Как же можно получить данный заголовок? Очень просто. Для этого нам понадобится написать скрипт из 5 строчек на перле. Вот код данного скрипта:

#!usr/bin/perl


use LWP::UserAgent;


$client = LWP::UserAgent->new( ) or die;


print "Enter site:";


$url=<STDIN>; #Просим пользователя ввести адрес сайта


$answer = $client->get($url); #Отсылаем запрос на сайт


print "============================n";


print $answer->header('server'); # Выводим поле Server из заголовка


print "============================n";



Вот пример работы нашего скрипта:



Комментарии.

Интересные комментарии в коде веб-страниц попадаются очень редко, практически никогда, но бывают и исключения. Я сам всего 1 раз находил именно нужные комментарии в коде, содержащие важную информацию. Просмотреть код веб-страниц можно в браузере, либо можно сохранить страницу на винчестере и открыть её через блокнот. Кстати в html-коде может попасться тоже немного интересной информации о расположении сайта, однажды я встретил вот такой код картинки:

<img scr=’C:\site\www\images1.gif’>

Как видите тут даже напрягатся не надо – разработчик сам показал мне директорию сайта.

Скрытые тэги.

Как вы знаете – в формах html-страниц имеются различные типы полей данных – text, password и т.д. Сейчас речь пойдёт о полях типа hidden (скрытых). Данный тип полей используется для передачи определённой информации скрипту, только в скрытой форме, если поля типа text и password Вы видите и можете вводить в них данные то hidden-поля вы не видите. Увидеть их можно только в html-коде данных. Вот небольшой пример скрытого поля с именем user:

<form action=”send.php” method=”POST”>


Введите сообщение: <input type=”text” name=”message”>


<input type=”hidden” value=”administrator” name=”user”> <!-- скрытое поле -->


</form>



Допустим что имеется определённый форум или чат, вобщем любое веб-приложение где можно посылать сообщение пользователем от своего имени. Если программисты не образованны в плане безопасности, то они могут передавать скрипту имя отправителя скрытые тэги. В таком случае взломщик может сохранить форму на винчестере и изменить значение скрытого поля на другое имя. Таким образом, станет возможным отправление сообщений от любого имени.

#4
+s.p.a.m.+

Отправлено 30 ���� 2008 - 05:46

+s.p.a.m.+

    Личный хакер форума=)

  • Banned
  • 228 сообщений
#4
1. SQL-injection - что и как?

В самом начале мне почему то захотелось рассмотреть именно уязвимость типа SQL-injection. Данная уязвимость существует очень давно. Но до сих пор некоторые её аспекты были рассмотрены не точно, либо по принципу "моё дело - написать, Ваше дело - разобраться". В данном цикле статей я решил собрать всю информацию + некоторые свои наработки воедино, и не только о SQL-injection. Но, начнём мы, всё таки, с SQL-injection.

Что же такое SQL-injection? SQL-injection(SQL-инъекция) представляет собой подделку определённого запроса к базе. При помощи данной уязвимости можно заставить скрипт передать серверу управления баз данных (СУБД) запрос, который нужен взломщику, а не запрос на который рассчитывал программист. Скрипты могут страдать данной уязвимостью из-за того, что программисты, их написавшие, не позаботились о фильтрации входных параметров. Где же можно встретить подобного рода уязвимости? Да почти везде, если хорошо покопаться. Вообще сейчас 90% сайтов работают с базами данных. С базой данных может работать форум, лента новостей, гостевая книга, он-лайн магазин, голосования
и ещё много различных веб-приложений. Я думаю, что Вы согласитесь со мной в том, что хотя бы форумы есть на множестве сайтов. Некоторые разработчики не серьёзно относятся к уязвимостям данного типа, хотя таких разработчиков с каждым днём всё меньше и меньше. Большинство сейчас ограничивается простенькой фильтрацией на опасные символы. Как найти SQL-injection, как использовать и как обходить некоторые методы фильтрации я расскажу ниже. Но для начала давайте рассмотрим - почему именно "SQL" инъекция? SQL - язык, на котором общаются клиент и сервер управления баз данных(СУБД). Разумеется, что, не зная этого языка мы не сможем сделать ничего толкового. Если Вы хорошо учились по информатике в школе, то Вы должны знать что БД - это набор таблиц - именно с ними мы и будем работать. Давайте рассмотрим хотя бы самые простые запросы:

1. SELECT - Данная конструкция применяется для выборки определённой информации из заданной таблицы. Данная конструкция имеет следующее строение:

SELECT [имена_полей_из_которых_нужно_взять_информацию] FROM [имя_таблицы];



За место имен полей может быть указана звёздочка (*) - это обозначает взятие информации из всех полей заданной таблицы. Так же вместе с SELECT может использоваться конструкция WHERE - данная конструкция нужна для задания разного типа условий.

Вот обычный пример:

SELECT text FROM news WHERE id=1;



Тут я запросил из таблицы news содержимое поля text, где поле id = 1. Для того чтобы более - менее освоится Вы можете запустить веб-сервер, и обратится по адресу http://localhost/phpmyadmin/ - это встроенный инструмент для работы с базами данных через браузер. Пощёлкайте по ссылкам, создайте пару БД и таблиц, вставьте туда любые данные, потом через mysql-клиент получите их, в общем, делайте всё, что только в голову взбредёт =) Главное чтобы Вы освоились.

2. Вторая конструкция, которую мы сейчас рассмотрим, - UPDATE. Данная конструкция нужна для внесения изменений в уже существующие данные.

Синтаксис:

UPDATE [имя_таблицы] SET [имя_поля]='[нужное_значение_поля]';



Так же разрешена конструкция WHERE - используется совершенно так же, пример:

UPDATE news SET text='hack' WHERE id=1;



Как Вы наблюдали - раньше в поле text где поле id ровнялось единице был текст first news.
После приведённого запроса там будет текст 'hack'.

3. Третья конструкция INSERT INTO - она предназначена для того, что бы вставлять данные в таблицы.
Используется она следующим образом:

INSERT INTO [имя_таблицы_в_которую_вставляем_данные](поле1,поле2,поле3) VALUES(значение1,значение2,значние3);



Здесь: поле1,поле2,поле3 - поля в которые будут вставляться данные, а значение1,значение2,значние3 - значения, которые будут вставлены в указанные нами поля.
Пример:

INSERT INTO news(id,text) VALUES(2,'second news!');



Тут мы вставляем данные в таблицу news, в поле id заносим значение 2, а в поле text - second news!.

4. И последняя конструкция которую мы сейчас рассмотрим - это DELETE - как Вы наверное уже догадались - она
используется для удаления записей из таблиц.
Синтаксис:

DELETE FROM [имя_таблицы] WHERE [условие];


Пример:

DELETE FROM news WHERE id=1;



После этого мы не обнаружим в таблице news поля id со значением 1 и текста первой новости. Можно то же самое использовать без WHERE - тогда удалятся все данные из таблицы.

Вот мы рассмотрели основные конструкции языка SQL. Давайте теперь поработаем с самим СУБД. В нашем случае мы имеем СУБД под названием "MySQL", конечно Вы можете спросить - "А почему бы не MsSQL или PostgreSQL?", ответ прост - рассматривать уязвимость опираясь именно на MySQL мы будем из-за того, что этот СУБД очень сейчас распространён, но, конечно же, мы будем уделять время и другим СУБД, хотя примеры скриптов будут писаться именно под MySQL. С ним же далее и будем работать.

Для MySQL, как и для любого другого СУБД, есть свой клиент.
Клиент лежит в папке [директория_куда_Вы_поставили_Denver]/usr/local/mysql4/bin/.
В данной папке находится 4 файла, нам нужен всего 1 - mysql.exe - Запускается он из командной строки с определёнными параметрами.

Если Вы вообще не в курсе как запустить командную строку или Вам лень командами "cd [dir_name]" пробираться
в папку веб-сервера, то просто через Total Commander зайдите в директорию MySQL (Указана выше) и в строке команд наберите cmd

хакер

Запустите клиент из командной строки со следующими параметрами:
-u root (имя пользователя под которым Вы соединяетесь)
-p mysql (имя баз данных, к которой Вы желаете подключиться).
Далее можно ввести параметр -h - в нём нужно указать IP-адрес сервера, но данный параметр нужно использовать тогда, когда Вы собираетесь подключиться к базе, находящейся на удалённом компьютере. После того, как Вы введёте все эти 2 параметра нажмите Enter и mysql попросит Вас ввести пароль. Если Вы ничего не меняли после установки Denver'a, то для подключения к БД Вам потребуется имя пользователя root и пустой пароль. Итак, вот мы подключились:

взлом хакер

На рисунке, представленном выше, пароль я вводил т.к. я поставил пароль пользователю root. Далее вы можете потренироваться в различных запросах. У Вас имеется пока всего 2 таблицы (если через phpmyadmin Вы ничего не создавали.): mysql и phpmyadmin. Я бы не советовал Вам менять что ни будь в них, т.к. они обе очень важны. Лучше создайте через PhpMyAdmin экспериментальную табличку и поиздевайтесь над ней как хотите. Ниже я приведу пару команд которые могут иногда помочь Вам:
show databases - показывает все, существующие на сервере, базы данных.
show tables - показывает таблицы в той базе данных, в которой вы сейчас находитесь.
use [имя_базы_данных] - смена базы данных.

#5
+s.p.a.m.+

Отправлено 30 ���� 2008 - 05:48

+s.p.a.m.+

    Личный хакер форума=)

  • Banned
  • 228 сообщений
#5 1. XSS – что и как? Далее я попытаюсь подробно объяснить, что же такое XSS. Для начала – XSS расшифровывается как “Cross-site scripting” (межсайтовый скриптинг). Называется именно XSS (а не CSS) для того чтобы не было путаницы, т.к. CSS имеет ещё одно толкование – “Каскадные таблицы стилей” (используются при написании сайтов). Из за того, что в различных статьях, описывающих данный метод атак, данный тип уязвимости именуется то CSS то XSS много новичков думают что XSS и CSS – это разные виды атак, но во многом похожие. Не заблуждайтесь так, XSS –это XSS а CSS- каскадные таблицы стилей. Уязвимости типа XSS (Cross-site scripting) представляют собой вставку произвольного HTML/JavaScript-кода в результат работы сценария, когда сценарий не фильтрует поступившие, от пользователя, данные. Данный тип атак интересен тем, что работает не по системе “клиент атакует сервер”, а совсем наоборот – “сервер атакует клиента”. С помощью XSS взломщик не может управлять скриптом так, как ему захочется - встроенный код должна вызвать жертва. С помощью XSS можно “заставить” уязвимый сценарий отобразить нужный взломщику код, а можно произвести и непосредственную вставку HTML кода в уязвимую страницу. Всего имеются 2 вида XSS: 1. Пассивный XSS. 2. Активный XSS. Оба этих типа будут подробно рассмотрены ниже. Исторически сложилось так, что как взломщики, так и программисты с администраторами, недооценивают данный тип атак, поэтому многие продукты сейчас страдают XSS. Но на самом деле это очень опасный тип уязвимостей, почему – Вы поймёте читая дальше. Для чего нужен XSS? Чаще всего XSS применяется для воровства cookies или перехвата сессии. Но бывает и просто обычная шутка типа вылезающей таблички с надписью “Hacked by Vasya”. Есть и другие цели применения XSS. Например, заражение вирусом массы людей (через уязвимость в браузере). Заражение пользователей ещё может быть осуществлено тогда, когда хакер напишет Трояна, червя или какую либо другую пакость на JavaScript или VBScript. Тогда он может разместить код этого вируса на какой ни будь странице уязвимого сайта. Соответственно все кто будут заходить на эту страницу – будут заражаться. Вот 2 обычных примера из жизни, совершенно разных по намереньям взломщиков: 1. В 2006 г. обнаружилась уязвимость в Windows, при обработке wmf-файлов. Один из взломщиков очень быстро среагировал и вставил код, который открывает опасный wmf-файл, на страничку одного из очень популярных сайтов. Итог – тысячи заражённых. 2. В том же году один хакер нашёл XSS-уязвимость на том же сайте, и просто дал волю фантазии - написал XSS-червя, который просто добавлял имя этого червя в список контакта пользователей. Через 3 дня имя червя оказалось почти у всех пользователей в списке контактов, этот червь побил все рекорды по распространению. Итог – плохого ничего не сделано, но многие поняли что XSS-уязвимости чреваты не только угоном cookies. Вобщем вариантов развития событий много, всё зависит от фантазии и намеренья взломщика. Так же XSS может использоваться для полного контроля за браузером жертвы в реальном времени. Давайте подведём небольшой итог: XSS-уязвимости могут быть использованы для: 1. Перехвата cookies и сессии 2. Вирусной атаки на одного или несколько пользователей 3. Контроля за браузером жертвы.

#6
+s.p.a.m.+

Отправлено 30 ���� 2008 - 05:52

+s.p.a.m.+

    Личный хакер форума=)

  • Banned
  • 228 сообщений
#5 1. XSS – что и как? Далее я попытаюсь подробно объяснить, что же такое XSS. Для начала – XSS расшифровывается как “Cross-site scripting” (межсайтовый скриптинг). Называется именно XSS (а не CSS) для того чтобы не было путаницы, т.к. CSS имеет ещё одно толкование – “Каскадные таблицы стилей” (используются при написании сайтов). Из за того, что в различных статьях, описывающих данный метод атак, данный тип уязвимости именуется то CSS то XSS много новичков думают что XSS и CSS – это разные виды атак, но во многом похожие. Не заблуждайтесь так, XSS –это XSS а CSS- каскадные таблицы стилей. Уязвимости типа XSS (Cross-site scripting) представляют собой вставку произвольного HTML/JavaScript-кода в результат работы сценария, когда сценарий не фильтрует поступившие, от пользователя, данные. Данный тип атак интересен тем, что работает не по системе “клиент атакует сервер”, а совсем наоборот – “сервер атакует клиента”. С помощью XSS взломщик не может управлять скриптом так, как ему захочется - встроенный код должна вызвать жертва. С помощью XSS можно “заставить” уязвимый сценарий отобразить нужный взломщику код, а можно произвести и непосредственную вставку HTML кода в уязвимую страницу. Всего имеются 2 вида XSS: 1. Пассивный XSS. 2. Активный XSS. Оба этих типа будут подробно рассмотрены ниже. Исторически сложилось так, что как взломщики, так и программисты с администраторами, недооценивают данный тип атак, поэтому многие продукты сейчас страдают XSS. Но на самом деле это очень опасный тип уязвимостей, почему – Вы поймёте читая дальше. Для чего нужен XSS? Чаще всего XSS применяется для воровства cookies или перехвата сессии. Но бывает и просто обычная шутка типа вылезающей таблички с надписью “Hacked by Vasya”. Есть и другие цели применения XSS. Например, заражение вирусом массы людей (через уязвимость в браузере). Заражение пользователей ещё может быть осуществлено тогда, когда хакер напишет Трояна, червя или какую либо другую пакость на JavaScript или VBScript. Тогда он может разместить код этого вируса на какой ни будь странице уязвимого сайта. Соответственно все кто будут заходить на эту страницу – будут заражаться. Вот 2 обычных примера из жизни, совершенно разных по намереньям взломщиков: 1. В 2006 г. обнаружилась уязвимость в Windows, при обработке wmf-файлов. Один из взломщиков очень быстро среагировал и вставил код, который открывает опасный wmf-файл, на страничку одного из очень популярных сайтов. Итог – тысячи заражённых. 2. В том же году один хакер нашёл XSS-уязвимость на том же сайте, и просто дал волю фантазии - написал XSS-червя, который просто добавлял имя этого червя в список контакта пользователей. Через 3 дня имя червя оказалось почти у всех пользователей в списке контактов, этот червь побил все рекорды по распространению. Итог – плохого ничего не сделано, но многие поняли что XSS-уязвимости чреваты не только угоном cookies. Вобщем вариантов развития событий много, всё зависит от фантазии и намеренья взломщика. Так же XSS может использоваться для полного контроля за браузером жертвы в реальном времени. Давайте подведём небольшой итог: XSS-уязвимости могут быть использованы для: 1. Перехвата cookies и сессии 2. Вирусной атаки на одного или несколько пользователей 3. Контроля за браузером жертвы.

#7
+s.p.a.m.+

Отправлено 30 ���� 2008 - 05:55

+s.p.a.m.+

    Личный хакер форума=)

  • Banned
  • 228 сообщений
#6
2. Создание тренировочной площадки.


Конечно же, нам надо будет где-то практиковаться. Для этого давайте напишем несколько скриптов на php, которые нам пригодятся при изучении SQL-injection. Это второй самый геморройный момент =(. Итак, я сейчас просто буду перечислять все действия которые надо выполнить, а Вы повторяйте за мной!

Создаём таблицы для лент новостей для разных СУБД.

MySQL
Запустите Denver и пройдите по адресу http://localhost/phpmyadmin/. Вы попадёте на страничку управления БД. Создайте новую БД – site. В этой базе данных мы будем держать наши тестовые таблицы. Далее создайте таблицу news с 2-мя полями:
1. text - тип TEXT
2. id – тип INT(числовое поле)



Жмите “Сохранить”.
Итак, таблицу мы создали, давайте теперь вставим туда 3 новости.
Для этого нажмите в верхней панели кнопку “Вставить”. В появившиеся поля вставьте значения id – 1, text – First news:



Далее жмите “Пошёл”. Итак, первая новость добавлена, добавьте ещё 2 с id 2 и 3 и с текстом “second news” и “third news” соответственно.

MsSQL
Заходим в меню “Пуск” и следуем по пути “Все программы/Microsoft SQL Server/Service Manager”. Далее запускаем сам СУБД.



После запуска, в том же меню в программу Enterprise Manager и создаём базу данных site:



Вводим имя БД и жмём ОК. Далее жмём на “+” возле нашей базы данных и выбираем пункт new table:



В появившемся редакторе вводим значения которые показаны на рисунке:



Далее закрываем окно редактора таблиц, на вопрос о сохранении изменений отвечаем “Yes” и вводим имя таблицы – news. Далее нужно вставить записи с номерами и текстами новостей. Сделаем это через редактор запросов. Зайдите в меню tools и выберите пункт SQL Query Analizer:



В появившемся окне введите следующие строки:

INSERT INTO news VALUES(1,'First News');

INSERT INTO news VALUES(2,'Second News');

INSERT INTO news VALUES(3,'Third news');


Далее жмите F5. Всё готово.

Итак, с MsSQL вроде разобрались, далее нам надо сделать тоже самое на PostgreSQL.

PostgreSQL.

Зайдите в меню “Пуск”/Все программы/PostgreSQL 8.2/PgAdmin III – это центр администрирования PostgreSQL. Создаём базу site (действия аналогичны MsSQL) далее проходим вот сюда site->schemas->tables->new table и создаём таблицу news. При создании таблицы перейдите на вкладку “Columns” и с помощью кнопки “add” добавьте 2 поля как обычно – id и text. После этого заходим в редактор SQL-запросов



и вводим следующие запросы:

INSERT INTO news VALUES(1,'First News');

INSERT INTO news VALUES(2,'Second News');

INSERT INTO news VALUES(3,'Third news');



Жмём “Execute query” и всё готово.

SQLite.

Чтобы создать базу данных зайдите в меню File и выберите пункт New Database. После этого наберите имя базы(site) и жмите ОК. Далее зайдите в меню query выберите пункт New Query Window. Введите запрос:

CREATE TABLE news(id,text)


После выполнения этого запроса введите уже знакомые Вам строки:

INSERT INTO news VALUES(1,'First News');

INSERT INTO news VALUES(2,'Second News');

INSERT INTO news VALUES(3,'Third news');


Всё, теперь уж точно все базы готовы. Не устали? )

Создаём скрипты лент новостей под разные СУБД.
Сейчас мы напишем скрипты под разные СУБД. По ходу изучения мы будем ещё создавать скрипты, но только на MySQL т.к. на разных СУБД иногда техника проведения атак одинакова. Итак, преступим, я просто приведу коды скриптов:

#############################################################################

##########################Скрипт для MySQL mynews.php #####################

#############################################################################

<?php

$link = mysql_connect("localhost", "root", "423921423921");

mysql_select_db("site");

if (!isset($_GET['id'])) {

$result=mysql_query("SELECT * FROM news");

while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {

print "<a href='mynews.php?id=".$line['id']."'>Новость №".$line['id']."</a><br>";

}

exit;

}

$query = "SELECT text FROM news WHERE id=".$_GET['id'];

$result = mysql_query($query);

print "<table>n";

while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {

print "t<tr>n";

foreach ($line as $col_value) {

print "tt<td>$col_value</td>n";

}

print "t</tr>n";

}

print "</table>n";

mysql_free_result($result);

mysql_close($link);

?>



#############################################################################

####################Скрипт для MsSQL msnews.php5 ###########################

#############################################################################

<?php

$link = mssql_connect("ANGEL", "sa", "");

mssql_select_db("site",$link);

if (!isset($_GET['id'])) {

$result=mssql_query("SELECT * FROM news");

while ($line = mssql_fetch_array($result, MSSQL_ASSOC)) {

print "<a href='msnews.php5?id=".$line['id']."'>Новость №".$line['id']."</a><br>";

}

exit;

}

$query = "SELECT text FROM news WHERE id=".$_GET['id'];

$result = mssql_query($query);

print "<table>n";

while ($line = mssql_fetch_array($result, MSSQL_ASSOC)) {

print "t<tr>n";

foreach ($line as $col_value) {

print "tt<td>$col_value</td>n";

}

print "t</tr>n";

}

print "</table>n";

mssql_free_result($result);

mssql_close($link);

?>



#############################################################################

####################Скрипт для PostgreSQL pgnews.php5 #######################

#############################################################################

<?php

/*В переменной $conn_string Вы должны указать своё имя пользователя

и пароль, который указали при установке. Больше ничего менять не надо*/

$conn_string = "host=localhost port=5432 dbname=site user=Angel password=423921423921";

$dbconnect = pg_connect($conn_string);

if (!isset($_GET['id'])) {

$result=pg_query("SELECT * FROM news");

while ($line = pg_fetch_array($result,-1, PGSQL_ASSOC)) {

print "<a href='pgnews.php5?id=".$line['id']."'>Новость №".$line['id']."</a><br>";

}

exit;

}

$result=pg_query("SELECT text FROM news WHERE id=".$_GET['id']);

print "<table>n";

while ($line =pg_fetch_array($result,-1, PGSQL_ASSOC)){

print "t<tr>n";

foreach ($line as $col_value) {

print "tt<td>$col_value</td>n";

}

print "t</tr>n";

}



print "</table>";

pg_free_result($result);

pg_close($dbconnect);

?>



#############################################################################

#######################Скрипт для SQLite sqnews.php5 ######################### #############################################################################

<?php

$db='C:site.db';

$connect=sqlite_open($db);

print "<table border=1>n";

if (!isset($_GET['id'])) {

$query=sqlite_query($connect,"SELECT * FROM news");

while ($line = sqlite_fetch_array($query, SQLITE_ASSOC)) {

print "<a href='sqnews.php5?id=".$line['id']."'>Новость №".$line['id']."</a><br>";

}

exit;

}

$query=sqlite_query ($connect,"SELECT text FROM news WHERE id=".$_GET['id']);

while($line = sqlite_fetch_array($query, SQLITE_ASSOC)){

print "t<tr>n";

foreach ($line as $col_value) {

print "tt<td>$col_value</td>n";

}

print "t</tr>n";

}

print "</table>n";

?>



Пожалуйста, создайте данные скрипты у себя на сервере т.к. в дальейшем они нам понадобятся. Итак, экспериментальные скрипты готовы. Давайте пойдём дальше.

#8
+s.p.a.m.+

Отправлено 30 ���� 2008 - 06:04

+s.p.a.m.+

    Личный хакер форума=)

  • Banned
  • 228 сообщений
фуф сегдня устал, продолжу публиковать цикл статей дальше завтра