Отредактировано: 25 Ноября 2018
Текст отображаемый на сайте может находиться либо в файлах, либо в базе данных. Еще он может генерироваться компановкой при помощи js или php, но этот случай будет рассмотрен в статье «Вирусы на сайтах».
Поиск текста по файлам на хостинге
Для поиска файла с определенным текстом на хостинге, поможет старый добрый Total Commander.
- Заходим на хостинг, указав необходимые данные;
- Нажимаем Alt+F7 — открывается поле поиска;
- Поле «Искать файлы» — ставим «*» если надо перебрать все файлы, или можно указать конкретный путь;
- Ставим галку у поля «С текстом» и указываем искомый текст.
- Если ищем русский текст — обязательно выбираем UTF-8.
Если в найденных файлах необходимо произвести замену, нажимаем: файлы на панель => CTRL+A => CTRL+M. Попадаем в окно переименования файлов, где справа сверху есть «Поиск и замена». Если хочется более привычного окна, открываем все файлы из списка в другой программе, например Notepad++ и производим замену там.
Поиск и замена текста внутри баз данных
Произвести поиск можно средствами phpMyAdmin.
- Если необходимо просто найти слово, узнав в каких таблицах оно встречается, достаточно перейти на вкладку «Поиск / Search» указать нужное слово, выбрать нужные таблицы, и нажать кнопку поиска.
- Если необходимо найти и заменить, то, идем во вкладку SQL и выполняем запрос вида:
UPDATE table SET field = REPLACE(field, 'старое слово', 'новое слово'); #table — это название вашей таблицы #field — поле в этой таблице
Если поиск и замену надо произвести во всех таблицах, можно использовать дамп базы данных:
- Идем в «Экспорт / Export» и экспортируем данные (получим файл в формате sql).
- Затем копируем этот файл, и открываем в текстовом редакторе, например Notepad++.
- Жмем CTRL+H, указываем, что, на что менять — и меняем.
- Получившийся файл Импортируем обратно.
В информационной безопасности есть казалось бы очевидные вещи. Но они все еще часто встречаются, в том числе в крупных компаниях и государственных организациях. На эту тему эксперт по информационной безопасности и преподаватель Иван Юшкевич провел мастер-класс по безопасности на конференции РИТ++ на платформе hacktory.ai.
Практическую часть МК о том, как накрутить лайки в социальных сетях, украсть криптовалюту и получить доступ к самым большим секретам пользователей, вы можете посмотреть здесь и здесь.
Теоретическую часть пришлось разбить на 3 части. Сегодня рассказ будет о том, что злоумышленник может сделать с найденными файлами и директориями. А также, как используется удаленное выполнение кода (инъекции), в том числе и в SQL.
Поиск файлов и директорий
Одна из самых распространенных проблем, связанная с информационной безопасностью — файлы хранятся в общедоступном виде. Это касается файлов с чувствительной информацией или тех, про которые забыли, например:
-
Файлы административной панели (/admin.php);
-
Бэкапы и логи (/log.txt; /back.sql; /backup.tar.gz);
-
Структура веб проекта;
-
Файлы систем контроля версий (/.git);
-
Отладочные файлы (test.php);
-
Скрытые копии редактируемых файлов (/admin.php-).
Это в принципе может быть всё что угодно. Но это то, что не должно находиться в открытом доступе и может стать угрозой, если файл кто-то обнаружит.
Угрозы могут быть самыми разными. Начиная от того, что человек может получить доступ к интересной информации о сервере, например, php-info. И заканчивая серьезными вещами. Например, если он сможет найти систему контроля версий, то при некоторых особенностях он сможет получить даже доступ к исходному коду самого веб-приложения.
Важно всегда держать в голове:
1. Не полагайтесь на то, что если вы переименовали какой-то ресурс, то подобрать название крайне сложно. Злоумышленник может найти любой ресурс, каким бы замысловатым его название ни было.
2. Никогда не храните бэкапы и файлы конфигураций в общей директории веб-ресурсов. Это очевидно.
3. Иногда дополнительное расширение или новые панели могут создавать собственные файлы и ресурсы. Их тоже необходимо закрывать от публичного доступа.
Ищем файлы и директории
Предположим, есть некоторый ресурс. Мы на него зашли и обнаружили, что есть файл index.html, папки со скриптами и стилями (/css/, /js/) и несколько api-ручек (/api/v1/user/: login, register, info/:id/).
В принципе, ничего интересного. Однако если применить один из инструментов (его мы рассмотрим чуть позже) для поиска файлов и скрытых директорий, можно обнаружить еще 5 интересных адресов.
Рассмотрим каждую из них и подумаем, какую угрозу они в принципе могут нести. Начнем снизу.
Test.php
Test.php, да и любые отладочные файлы могут представлять абсолютно разную функциональность, начиная от простой информации или вывода на страничку «Привет, мир», и заканчивая теми, что помогут злоумышленнику скомпрометировать сервер.
Исследуя веб-ресурс, можно найти поддомены, например, тестовые, и на них поискать скрипты, которые использовались для отладки, тестирования или чего-то еще. С их помощью можно получить доступ к серверу. Довольно много ресурсов были таким образом скомпрометированы.
Например, один из исследователей зарепортил уязвимость, обнаружив на сайте скрипт check.php, и получив с его помощью доступ к информации о сервере. Скорее всего, это было самое тривиальное PHP-info, но все же такие вещи встречаются в реальной жизни.
Рассмотрим следующую папку.
Директория /.git/
/.git/ cодержит изменения и артефакты системы контроля версий. Если её обнаружат, а ее не почистили, не удалили или не закрыли к ней доступ, то можно получить доступ даже к исходным кодам всего проекта. Нужно будет просто восстановить те или иные файлы по их артефактам. Звучит интересно, потому что так возможен доступ к исходному коду файла test.php.
А проанализировав test.php, мы могли бы узнать, например, что он создавал бэкапы с определенным названием в папке /backup/.
Директория /backup/
Ее название говорит само за себя. Там может оказаться что угодно, начиная от исходных данных самого приложения и заканчивая бэкапами БД. И она может нанести непоправимый ущерб, если находится в открытом доступе. В этом случае можно получить доступы к учетным записям, исходным кодам, БД — к чему угодно.
Может показаться, что эта уязвимость прямо из 90-х. Однако нет, она встречается повсеместно. Например, на одном из сайтов — к слову, на сайте Министерства безопасности США — исследователь нашел такую папку и получил доступ к бэкапам.
Директория /access/
Можно найти папку /access/ с говорящим файлом access.log, в котором, собирается какая-то информация (логи). Эти логи иногда могут содержать тоже очень интересную информацию, критичную для веб-ресурса.
Проанализировав access.log, можно найти некоторую папку, явно указывающую, что она принадлежит к административной панели. И если после анализа директории /backup/ у нас доступ к backup БД, то мы знаем, какие пользователи и их пароли нужны, чтобы получить доступ к этой административной панели. То есть из одной уязвимости можно получить доступ к административной панели, даже если у нее странное название, которое нелегко подобрать.
Один исследователь исследовал ресурс мессенджера Slack и нашел файл, или даже ручку под названием debug (тоже вполне говорящее название). С его помощью он получил информацию о том, какие пользователи сейчас находятся в системе, их API адреса, идентификаторы сессий и многое другое Вознаграждение составило $1500.
Директория /api/v1/user/
Не только файлы или папки могут являться угрозой. Иногда проблема может крыться в API-ручках. Поскольку считается правильным делать ручки (названия функций) говорящими, чтобы можно было легко понять, к чему они относятся, то злоумышленник может попробовать поперебирать те или иные составляющие части адреса ручек.
Например, заменить user на admin, чтобы получить доступ к другой ручке, изначально скрытой, и которая может использоваться в той самой административной панели. Если она не требует никакой авторизации и на ней не проверяется контроль доступа, то, совершить с её помощью какие-то противоправные действия.
То есть, хотя изначально сайт состоял всего из 7 адресов, за каждым из них может быть огромное количество скрытой информации, которая может позволить скомпрометировать сервер. Не надейтесь, что переименовав скрипт во время тестирования сайта или переноса данных, вы закроете доступ к данным. Всё это можно найти.
Инструменты
Инструментов для поиска файлов и директорий огромное количество. В другой статье на Хабре подробно рассказано об этом.
В интернете также можно найти подборки словарей с интересными файлами, которые могут быть не удалены с сервера или, скорее всего, существуют на многих серверах.
Как избежать нахождения информации
Как обезопасить наше веб-приложение от того, чтобы кто-то не нашел чувствительную информацию и не использовал ее во вред?
Не хранить чувствительные данные в открытом доступе – самое очевидное решение.
А если мы что-то и храним, например, по каким-то ручкам или в каких-то файлах, то всегда проверять, что эта информация в сети интернет не находится в публичном доступе. Что файлы и ручки прикрыты, может быть, паролями или настройки на веб-сервере не позволяют получить к ним доступ по прямым ссылкам.
Если ставим дополнительные плагины, директории и т.п., то нужно проверять, что они не создают какую-то информацию или сама настройка веб-сервера не раскрывает эту информацию. Например, если был ресурс, настроенный на работу с веб-сервером Apache, а потом эту настройку перенесли на Nginx, то иногда некоторые файлы и директории могут стать станут доступными для сторонних пользователей.
В любом случае, если мы пытаемся что-то скрыть, это всегда, скорее всего, будет найдено. Поэтому при разработке стоит учитывать, что если куда-то у пользователя доступа быть не должно, он туда и ходить не должен.
Перейдем к следующей уязвимости.
Удаленное выполнение кода (инъекции)
Внедрение команд — одна из самых распространенных и уязвленных уязвимостей. Она относится в OWASP к классу А1 под названием инъекция, и на самом деле, неважно, чего — кода или команд. Инъекция может быть абсолютно везде.
Сначала рассмотрим самое простое и тривиальное внедрение команд.
Внедрение команд
Суть уязвимости крайне проста: пользователь передает некоторые данные и они попадают в какую-то строку, которая потом передается на выполнение в оболочку ОС. То есть атака возможна, когда приложение формирует команду к ОС и подставляет в неё небезопасные данные, контролируемые пользователем — GET/POST параметры, HTTP-заголовки, Cookies, и т. д. В результате все данные из не доверенных источников попадают куда бы то ни было без валидации этих данных.
В большинстве случаев это возможно из-за недостаточной валидации входных данных. Если мы куда-то передаем пользовательские данные, никак их не обрабатываем и не проверяем, то, скорее всего, в огромном количестве случаев это приведет к проблемам.
Предотвратить внедрение команд возможно, если принимать меры безопасности на стадиях проектирования и разработки приложения.
Ищем возможность внедрения команд
Уязвимость можно обнаружить, проверяя код. Проверьте, вызываются ли какие-либо методы исполнения команд и принимается ли в качестве данных для этих команд не прошедший валидацию пользовательский ввод.
PING
Рассмотрим хрестоматийный пример. Допустим, у нас есть сайт vuln.com и скрипт /ping.php:
Этот скрипт вызывает утилиту ping, которая отправляет запросы на ip-адрес, а он попадает в скрипт в качество аргумента. Затем скрипт возвращает вывод команды на экран. То есть это некоторый сервис, который что-то пингует. В нормальном случае мы подставляем туда ip-адрес 8.8.8.8:
vuln.com/ping.php?ip=8.8.8.8 fc
В результате выполняется команда: ‘ping – с 4’ 8.8.8.8. Как вы можете заметить, в этом коде данные подставляются, как есть. Поэтому нам ничто не мешает вместо 8.8.8.8 (ведь никто не проверяет, что это ip-адрес и что он содержит некорректные управляющие символы) передать при отправке в качестве аргумента значения 123;whoami. “;” будет являться управляющим символом, который свидетельствует о разделении команд.
Тогда сформированная команда будет выглядеть следующим образом:
‘ping - с 4’ 123;whoami
Команда попробует пропинговать адрес 123, и естественно, сделать это не сможет. А так как “;” говорит, что предыдущая команда закончилась и началась следующая, то скрипт выполнит “whoami”. Собственно, в этом и заключается суть уязвимости. Она крайне простая, но в результате данные пользователей попадают в необработанном виде куда-то, где и исполняются.
Может показаться, что это тоже архаизм, и сейчас его найти невозможно. Однако нет. В качестве примера есть такой report.
Рассмотрим его подробнее.
Nextcloud
Существует ПО Nextcloud, которое позволяет создавать свое облако и шарить файлы — такое standalone решение. В 2018 году исследователь нашел в нем уязвимость как раз через внедрения команды.
Посмотрите на 11 строку. Выполняются функция “exec”, команда “unrar” и передаются значения переменных “file” и “dir”. Последние получаются, как показывает этот код, из архива “rar”, который, скорее всего, может как-то передавать пользователей. То есть если исследователь сможет сформировать такой архив “rar”, в котором будет содержаться имя “file с ;”, то при распаковке он сможет выполнить свою стороннюю команду и получить доступ к серверу.
Да, наверное, он не сможет это сделать штатными способами, но есть ПО, которое это сделает за него. А если там содержатся приватные данные или сервер используется как корпоративный dropbox?
Но не только PHP уязвим к данному классу атак. Например, если вы используете какие-то библиотеки, уязвимость может открыться в них.
Image Magick
Набор утилит (ПО) Image Magick отвечает за конвертацию изображения и их обработку. Огромное количество компаний использовала его для обработки изображений.
И также много исследователей нашли уязвимости внутри Image Magick, которые позволяла выполнять произвольные команды.
Найденные уязвимости
Рассмотрим, в чем суть данной уязвимости.
ImageMagick в конфигурации использовал некоторые сторонние утилиты, в которые он подставлял строки из файлов или метаданных файла и дальше собирал какие-то данные. В итоге получалось, что в некоторую конфигурацию он подставлял те данные, которые приходили от пользователя, и вызывал те или иные команды, чтобы получить результат.
В итоге пользователь мог передать какую-нибудь картинку (например, аватарку) в формате SVG, внутри которой была ссылка на стороннюю картинку. При конвертации картинки, которая внутри SVG, ImageMagick пытался ее запросить с помощью команды wget, и подставлял адрес той картинки. Что приводило к тому, что можно было поставить двойную кавычку и выполнить стороннюю команду.
Компоненты
Под капотом всех приложений, которые сейчас издаются, кроется огромное количество разнообразных взаимосвязанных компонент и библиотек.
Каждая компонента состоит из множества библиотек, даже из таких, которые мы просто скачали и начали использовать. Уязвимости могут крыться как раз в этих библиотеках. Мы можем быть не виноваты, но наше ПО все равно будет уязвимо.
Сами посудите, есть некоторый сервис, который может заниматься абсолютно какой-нибудь ерундой, если смотреть в рамках всего приложения. Однако в нем какой-то компонент использует библиотеку, о существовании которой мы не знаем — и в ней кроется уязвимость. По цепочке это приводит к тому, что всё наше приложение, как бы круто оно ни было написано, становится уязвимым.
Поиск уязвимости blackbox методом
Инъекции могут быть в разных местах команды. Иногда инъекция может выполниться даже после правильного завершения команды.
Существуют разные спецсимволы, которые позволяют разделить команды:; ,&,&&, | , 11 , >. Выбор спецсимвола влияет на условия — параллельное или последовательное выполнение, в зависимости или вне от того, что возвращает первая команда, перенаправление вывода и так далее.
Например, можно внедрить команду “sleep” и посмотреть, увеличится ли время выполнения (базовое время выполнения скрипта ping.php — около 4 секунд). Если поставить символ &, который говорит, что команда должна выполняться параллельно, то сервер вернет ответ за 5 секунд. А если восьмерки обернуть кавычками, то команда завершится неправильно:
В принципе можно сформировать несколько небольших универсальных векторов, используя команды, которые есть почти в любой ОС типа sleep, и проверять вектора на эксплуатацию. Естественно, для эксплуатации той или иной совместимости надо выполнять нормальные команды, например, “sleep”. Они помогут подтвердить, что уязвимость присутствует.
Если можно увидеть ответ от сервера, то станет ясно, от какого пользователя выполнялось приложение или скрипт. Если результат выполнения команды не отображается на странице, речь идет о слепой инъекции. Об исполнении команды можно понять по косвенным признакам:
-
По времени. Для этого используйте функции sleep<), benchmark) и аналогичные.
-
Запрос на внешний сервис и разрешение DNS имени. Попробуйте команды ping, nslookup, dig, whois.
В большинстве случаев выполнение произвольных, но безвредных команд вроде sleep, id, hostname, whoami достаточно для подтверждения критичности уязвимости.
Поиск уязвимости при наличии исходных текстов (White Box)
Если у нас есть доступ к коду, почему бы не проанализировать его?
Абсолютно во всех языках программирования есть функции, которые отвечают за вызов командной оболочки или за исполнение стороннего кода. У всех этих функций, что хорошо, имеются говорящие названия: exec, system, start. Поэтому, даже не имея навыков разработки на определенном языке программирования, можно поискать функции с говорящими названиями и, возможно, это будет иметь успех.
Инструменты
При наличии исходных текстов уязвимость можно обнаружить поиском небезопасных функций, специфичных для данного языка программирования. Здесь помогут даже grep или notepad++.
Однако есть довольно много инструментов, которые позволяют автоматизировать такой поиск и исследовать исходный код на наличие тех или иных уязвимостей:
Анализаторы кода
-
Checkmarx;
-
Cppcheck для C++ и C;
-
Rats, который работает типа «грепалки»;
-
RIPS – крутой анализатор для PHP (сейчас есть в платном и бесплатном варианте);
-
Findbugs для языка Java;
-
GREP
-
Много их…
Однако обратите внимание, что многие из них выполняют статический анализ и ищут уязвимости, связанные именно с программированием. Например, как используется переменная: не используется вообще или вызывается 3 раза и при этом ни для чего не работает. Многие из этих инструментов заточены только под статический анализ, а не под безопасность. Скорее всего, они найдут какие-то уязвимости, но далеко не все.
Исправление и предотвращение внедрения команд
Весь пользовательский ввод или любые данные, которые приходят из не доверенных источников, мы должны обрабатывать, и эти данные должны проходить валидацию.
Символы, которые необходимо фильтровать: <>&*’!-?; []А~! . ” % @ ‘
Во всех языках программирования и фреймворках есть специальные функции, которые позволяют безопасно выполнять те или иные команды, например, ProcessBuilder в Java. Для построения команды эти функции должны использоваться обязательно.
Но если в какой-то команде есть ряд параметров, из-за которых команда сама по себе может представлять угрозу, то злоумышленнику, понятное дело, достаточно её и нет смысла вызывать стороннюю команду.
Также желательно, чтобы веб-приложение и его компоненты работали по принципу наименьших привилегий. То есть если мы запускаем наше приложение от root, не стоит потом говорить, что жизнь не очень легка. Если даже злоумышленник найдет уязвимость, проэксплуатирует ее и получит доступ к серверу, нужно, чтобы он потратил еще уйму времени и несколько раз просигнализировал о себе. Чтобы мы смогли его обнаружить и закрыть ту или иную дыру.
Посмотрим теперь на другой вид инъекций.
SQL-инъекции
В общем смысле с помощью SQL-инъекции злоумышленник может контролировать запросы, которые приложение выполняет в базе данных. Инъекция возникает, когда приложение подставляет неотфильтрованные данные из запроса пользователя (например GET/POSТ параметры, HTTP заголовки) в запрос к базе данных без какой-либо обработки.
Это позволяет злоумышленнику внедрить свой стиль команды, изменить логику SQL запроса и таким образом получить доступ к чувствительным данным, хранящимся в БД, например: данным пользователей, платежным данным, сохраненным паролям, если они лежат не в зашифрованном виде.
В ряде случаев злоумышленник может не только получить данные, но изменить и удалить их, а также — более редкий кейс, но тоже бывает — выполнить код на уровне ОС. Здесь злоумышленник может развить атаку и скомпрометировать весь сервер или другие объекты инфраструктуры.
Как выглядит уязвимость?
Представим, что у нас есть таблица “Users”для двух пользователей (Боба и Алисы), а также скрипт, который получает от клиента идентификатор userid и выводит имя пользователя по этому значению:
Скрипт возвращает «Bob», потому что у Боба userid=1. И вроде бы код хорош, но это не так, так как он уязвим по SQL-инъекции. Итоговый SQL запрос имеет следующий вид:
Так как 1 подставляется как есть, то можно передать туда какой-то текст. Если коде нет ни санитизации, ни фильтрации пользовательского ввода, то значение GET-параметра id попадет в $sqlQuery как есть. Для эксплуатации злоумышленник должен изменить значение параметра id так, чтобы он содержал вредоносный SQL-код для исполнения.
Это был условно практический пример, теперь перейдем к практическому. Представим стандартную панель входа в сервис, куда нужно ввести имя пользователя и пароль. И есть скрипт аутентификации и таблица с пользователями, у которых есть логины и пароли:
После получения логин и пароль вставляются как есть в SQL запрос к БД. Если запрос будет валидным, то он исполнится, как и должен был. Но если попытаться найти Боба с паролем куча единиц, то получим ошибку, потому что такого пароля нет. И это место для SQL-инъекции.
Как можно использовать эту уязвимость? Например, отправить в качестве логина admin’ и знак комментария:
Благодаря одинарной кавычке запрос закроется раньше, чем это предполагалось. Двойной дефис в MySQL является комментарием, то есть эту часть запроса СУБД при исполнении просто отбросит, а там была проверка пароля. Запрос выполнится успешно и приложение нас пропустит.
Некоторые разновидности SQL-инъекций
UNION BASED
Способ основан на использовании оператора UNION. Предположим, в приложении присутствует две таблицы — статьи (Articles) и пользователи (Users). SQL-инъекция присутствует в запросе к таблице Articles, при этом необходимо извлечь данные из таблицы Users. В этом случае поможет применение SQL-оператора UNION, который объединяет два запроса в один. Важное правило — количество колонок в обоих запросах должно совпадать.
Как это происходит на практике. Представим, что первый запрос содержит 4 столбца. Попытка UNION с запросом из трех столбцов будет неудачна, поскольку БД вернет ошибку. Если Debug Mode включен, мы можем эту ошибку даже увидеть. Но объединение четырех колонок слева и четырех справа будет успешным.
Если колонок в таблице пользователей меньше, можно добавить их с помощью констант, написав 1, 2, 3 и т.д. Или же придётся из таблицы пользователей выбирать нужные колонки.
ERROR BASED
Этот способ основан на эксплуатации того, что ошибка в SQL-запросе попадает в содержимое HTML-страницы. То есть мы видим ошибку, которая происходит в нашей СУБД.
В MySQL существует функция extroctvolue(), которая ожидает в качестве аргумента данные в XML представлении, иначе она выбрасывает ошибку. Нетрудно догадаться, что этим можно воспользоваться. Если передать туда невалидные данные, она выполнит запрос и можно будет увидеть версию системы, на которой крутится СУБД. Или пользователя, от имени которого выполняется запрос в СУБД.
TIME BASED
Наверное, это самый интересный способ, который основан на времени исполнения запроса. Он применяется, если инъекция «слепая» и на страницу ничего не выводится. То есть можно только по косвенным признакам понять, что там существует SQL-инъекция. Для этого можно воспользоваться функциями:
-
sleep() — запрос выполняется долго, как и при использовании обычной консоль-утилиты sleep в Bash;
-
benchmark() — что-то выполняет очень много раз, например, может считать миллион раз MD5 от 1.
Также можно использовать конструкции вида:
IF(expr1,expr2,expr3) - ЕСЛИ «ехрг1» ИСТИНА, то выполни «ехрг2», ИНАЧЕ «ехргЗ»
Таким образом можно подбирать логин пользователя по букве. Например, если поставить первую букву «А» и запрос не уснет на 10 с, то значит, буква не «А», и т.д., пока запрос не уснет. Как только мы угадаем первую букву пользователя, запрос подвиснет на 10 с.
При этом такую рутину можно автоматизировать утилитой SQLMAP.
Инструменты
SQLMAP поддерживает большинство техник эксплуатации и умеет обходить WAF. У нее автоматическая выгрузка дампа БД, если она найдет уязвимые места SQL-инъекции. Обычно мы должны ей указать какой-то параметр, который по нашему мнению может быть уязвим.
С ее помощью можно выполнять команды (RCE), и она может работать с запросом из Burp. И при этом не нужно вручную составлять все атрибуты командной строки.
Исправление и предотвращение SQL-инъекций
Мы можем использовать:
-
Параметризированные запросы, когда запросы готовятся заранее, и мы им потом «скармливаем» наши данные;
-
ORM — она сделает всё за нас, и нам не нужно будет беспокоиться;
-
Query-билдеры, то есть составители запросов, которые нам предоставляют фреймворки. PHP-фреймворки этим богаты, такие как Symfony, Laravel и Spring. На выходе получается производительность обычных запросов.
В следующей статье рассказ будет про Cross Site Request forgery (CSRF), XSS (Cross Site Scripting или межсайтовый скриптинг) и XXE: XML External Entity Processing.
FrontendConf 2021 — это два дня интересных докладов, ярких встреч и много-много нетворкинга. Расписание. Билеты. Доклады.
Встречаемся 11-12 октября в Москве!
Вы часами пытались найти строку кода на своем сайте WordPress? Это может быть неприятно, если после тщательного ручного поиска вы не добьетесь успеха. Попробуйте некоторые из бесплатных инструментов, которые сделают задачу проще и точнее.
Иногда случается, что вы добавили код настройки и теперь не можете его отследить. Другая возможность заключается в том, что вы внесли много изменений на свой сайт. Это может включать в себя фрагмент кода с ошибками, который не является ошибочным, но может давать нежелательный результат. После нескольких дней добавления этого кода, когда вы поймете, что результат не такой, как ожидалось, вы можете захотеть его изменить. Затем вам нужно будет отследить источник и исправить его. Теперь вы не можете найти строку кода на своем веб-сайте. Ручной поиск может работать, а может и не работать постоянно. В этой статье, здесь Templatetoaster WordPress сайте застройщика, мы рассмотрим несколько простых в использовании методов для автоматизации процесса, чтобы найти строку кода в веб – сайте.
Ручные методы поиска строк кода
1. Найдите строку кода на веб-сайте с помощью PHP / текстового редактора.
Вы можете использовать любой текстовый редактор, например Notepad ++, чтобы использовать расширенные функции поиска. Notepad ++ – лучший и самый популярный редактор файлов PHP, работающий как для Windows, так и для Mac. После того, как вы скачали файлы PHP WordPress, вы можете использовать Notepad ++, чтобы найти строку кода в файле веб-сайта.
Если вам известен файл, в котором отображается ошибка, вы можете просто загрузить этот файл и найти в нем код. Вы также можете искать строки кода в своем каталоге WordPress, используя расширенные функции поиска редактора.
2. Найдите строку кода на веб-сайте в системах Unix / Linux / MacOS
Команда grep позволяет искать текстовые шаблоны в файле. Используйте вариант использования приведенной ниже команды, чтобы найти строку кода в файлах вашего веб-сайта для сервера Linux / Unix. Прежде всего, вам необходимо войти на сервер через терминал с помощью Putty или Bitvise. Перейдите в каталог установки WordPress и выполните команду ниже:
grep $search-term file.php
Примечание: вам может потребоваться ssh-доступ к веб-серверу, если вы не являетесь администратором.
3. Поиск по строке кода на веб-сайте на компьютерах с Windows
В Windows вы можете установить Cygwin, а затем использовать grep для поиска определенного текста или текста, соответствующего регулярным выражениям. Вы также можете использовать команду findstr для поиска файлов, содержащих строки кода, которые точно соответствуют указанной строке или соответствуют регулярному выражению.
Автоматические инструменты для поиска строк кода
Утилиты и инструменты, такие как Agent Ransack, позволяют найти строку кода в файлах веб-сайта. Сначала вам нужно загрузить файлы кода веб-сайта на локальный компьютер, а затем запустить инструмент для загруженных файлов.
Агент Рэнсак
Agent Ransack – это инструмент для быстрого и эффективного поиска файлов с определенным текстом. Это позволяет искать в содержимом файлов код или текст. Агент Ransack отображает текстовые результаты, и вы можете просматривать результаты, не открывая каждый файл. Agent Ransack также предоставляет мастер для построения регулярных выражений, которые создают более сложные поисковые запросы.
С помощью Agent Ransack вы можете указать выражение имени файла для поиска, строку кода для поиска и каталог для поиска. Вы также можете искать двоичные файлы, но не файлы .zip или другие архивы.
Agent Ransack или FileLocator Lite (для корпоративных сред) – это «облегченная» версия инструмента FileLocator Pro, которая хорошо работает для новичков. Для опытных программистов, которым требуется расширенный поиск большего количества файлов, FileLocator Pro предоставляет дополнительные функции.
Альтернативные варианты для Agent Ransack
Давайте теперь рассмотрим некоторые другие популярные и бесплатные альтернативы Agent Ransack для Windows, Linux, Mac, BSD, Self-Hosted и других сред. Вы можете попробовать эти утилиты для поиска строк кода в файлах вашего сайта.
1. DocFetcher
Портативное настольное приложение для поиска с открытым исходным кодом. Вы можете использовать этот инструмент для поиска содержимого файлов, чтобы найти строку кода на веб-сайте, который вы ищете.
2. FileSearchy
Это служебная программа для поиска файлов, обеспечивающая эффективный поиск по содержимому файла. Он выделяет найденный текст в содержимом файла.
3. Восстановить
Позволяет искать содержимое ваших файлов, как поисковая система. Вы можете быстро искать в больших объемах данных с помощью поискового индекса. Regain незаметно просматривает файлы или веб-страницы, извлекая весь текст и добавляя его в индекс интеллектуального поиска. Вы можете сразу же получить результаты поиска по своей неотслеживаемой строке кода.
4. AstroGrep
Утилита поиска файлов с графическим интерфейсом пользователя Microsoft Windows, которую можно использовать для поиска совпадений регулярного выражения в исходном коде. Вы можете использовать это, чтобы найти совпадающие строки кода в файлах вашего веб-сайта.
5. SearchMonkey
Это поисковая система в реальном времени для отображения совпадений регулярных выражений в содержимом файлов и в нескольких каталогах.
6. SearchMyFiles
Это точный вариант поиска Windows, который позволяет легко искать файлы по содержимому файла, которое может быть текстовым или двоичным.
Строки поиска на HTML-сайтах
Веб-сайт может содержать код HTML, Javascript и CSS. Возможно, вы захотите найти строку кода в исходном коде своего веб-сайта. Каждый браузер позволяет вам просматривать источник просматриваемого веб-сайта. Вы можете щелкнуть правой кнопкой мыши «Просмотр источника страницы», чтобы открыть исходный код страницы. Вы можете найти строку кода в исходном коде с помощью инструментов, предоставляемых браузером.
Вы также можете выполнять поиск по всем ресурсам веб-сайта, таким как HTML, CSS, JavaScript и т.д. В случае браузера Chrome вы можете использовать инструменты разработчика для выполнения поиска. На любой панели откройте панель поиска (Win: Ctrl + Shift + f, Mac: Cmd + Opt + f). Введите строку кода или имя класса для поиска на текущей HTML-странице. Все результаты поиска с номерами строк будут отображены на панели.
Плагины WordPress для поиска строки кода на веб-сайте
Иногда при создании веб-сайта вы можете застрять, пытаясь выяснить, какой шаблон используется на конкретной странице. Вы можете поискать строки кода на страницах своего веб-сайта. Могут быть фрагменты неотслеживаемого текста, исходный код которых невозможно. Есть несколько доступных плагинов WordPress, которые помогут вам с этими проблемами.
1. Что за файл
Плагин «What The File» позволяет добавить на панель инструментов параметр, отображающий файл и шаблоны, используемые для отображения просматриваемой в данный момент страницы. Вы можете напрямую просматривать, находить строку кода на веб-сайте и редактировать файл через редактор темы. Затем вы можете искать строки кода внутри этих файлов.
2. Локатор строк
При работе с темами и плагинами вы можете увидеть фрагмент текста, который выглядит так, как будто он жестко закодирован в файлах. Возможно, вам придется изменить его, но вы не можете найти строку кода в файлах темы. С помощью плагина «String Locator» вы можете искать темы, плагины или основные файлы WordPress. Плагин представляет результаты в виде списка файлов, совпадающего текста и строки файла, который соответствовал поиску.
Вывод
Поиск, ручной или автоматический, не всегда может дать вам наилучшие результаты. Вы можете бесконечно пытаться найти строку кода на веб-сайте вручную, но это приведет к разочарованию только в том случае, если поисковый контент большой. Автоматические инструменты, утилиты и плагины WordPress помогут значительно сократить усилия, но при этом будут более точными. Инструмент TemplateToaster для создания веб-сайтов также прост в использовании. TemplateToaster, программа для веб-дизайна, поддерживает все плагины WordPress и помогает создавать расширенные темы и шаблоны страниц. Он не требует кодирования и автоматически генерирует код. С помощью конструктора веб- сайтов TemplateToaster и конструктора тем WordPress вам больше не нужно будет самостоятельно создавать, искать и устранять неполадки любого кода настройки.
Источник записи: https://blog.templatetoaster.com
0 Пользователей и 1 Гость просматривают эту тему.
- 27 Ответов
- 22121 Просмотров
Вопросы задавайте в отдельной теме.
Это тема про инструменты поиска, а не про решение проблем!
Для b2z: как думаете, не поднять ли этот текст в шапку какого-то раздела? А то ведь вагон таких вопросов =)
КАК ИСКАТЬ ЧТО-ТО НА САЙТЕ:
Инструменты:
- Firebug
- Total Commander / Ваш вариант файлового менеджера
- Notepad++
- Akeeba SiteDiff – шикарный инструмент сравнения бекапов. При наличии эталонного(контрольного бекапа) он вам его сравнит с любым другим, и подсветит, какие файлы не совпадают. При ~15-20К файлов в системе и поиске вирусов инструмент мегаактуален. НА русском – (сокращенно FAR) — скрипт для поиска и замены текста в файлах сайта. FAR можно использовать как для поиска вредоносного кода, так и для повседневной работы с файлами.
- Beyond Compare. Это для сравнения файлов и каталогов. Вариант, дополняющий Akeeba SiteDiff. Сказка а не прога, больше не надо выламывать глаза, она всё подсветит, где и что не совпадает с контрольным бекапом/файлом. Как вариант опять же, можно взять WinMerge
- Find and Replace (сокращенно FAR) — скрипт для поиска и замены текста в файлах сайта. FAR можно использовать как для поиска вредоносного кода, так и для повседневной работы с файлами.
- WebDrive – платная, но того стоит. Позволяет примонтировать к винде сайт по FTP или SSH (будет просто ещё один диск) и искать куда быстрее, чем тоталом.
Описание раз:
Описание два:
- голова!
1) Поиск текста
2) Поиск картинки (напр., фона кнопки)
3) Поиск вирусных / рекламных ссылок
4) Поиск места в PHP файлах, где нужно что-то править
Как выбрать между пунктами 1-4? => головой, чутьем или перебором.
« Последнее редактирование: 02.12.2013, 18:20:02 от b2z »
Записан
Если это тема для начинающих, то может ее лучше назвать не “Как искать что-то на сайте”, а “Как искать что-то внутри сайта”
Если это тема для начинающих, то может ее лучше назвать не “Как искать что-то на сайте”, а “Как искать что-то внутри сайта”
Согласен, поменял. Если кто-то хочет дополнить или расширить тему, то смело пишите. Я добавлю в первый пост, а лишнее потом потру.
Может объяснить сразу, что такое дамп и как делается?
а) Текст в БД: идем либо в phpMyAdmin, и ищем в нём. Либо текстовым редактором в дампе базы. Это извратнее, но иногда удобно, когда например надо заменить с полсотни ссылок, по шаблону (например, когда чудак контент-менеджер допустил одинаковые ошибки при вставке файлов в статьи. А вам надо утирать его сопли). Жмем CTRL+H, указываем, что и на что менять – и вперёд.
Заменяем на
а) Текст в БД: идем либо в phpMyAdmin, и ищем в нём. Либо текстовым редактором в дампе базы.
Дамп базы делается в phpMyAdmin командой Export и указываем, что сохранить в файл (получим файл в формате sql). Затем этот файл открываем в текстовом редакторе Notepad++.
Это извратнее, но иногда удобно, когда например надо заменить с полсотни ссылок, по шаблону (например, когда чудак контент-менеджер допустил одинаковые ошибки при вставке файлов в статьи. А вам надо утирать его сопли). Жмем CTRL+H, указываем, что и на что менять – и вперёд.
А затем в phpMyAdmin удаляем все таблицы в базе (но не удаляем саму базу!) и даем команду Import.
Только внимание – такие вещи лучше делать локально (Денвер, xampp и т.д.), т.к. если база большая, то на хостинге могут быть проблемы с импортом в связи с нехваткой памяти на эту операцию.
Может объяснить сразу, что такое дамп и как делается?
Дамп – это архив базы данных, чаще всего – в текстовом файле. Делается через phpMyAdmin -> экспорт
Согласен, поменял. Если кто-то хочет дополнить или расширить тему, то смело пишите. Я добавлю в первый пост, а лишнее потом потру.
Можно добавить скрипт который ищет прямо на сервере файлы и особенно содержимое в них.
Так же доступна функция найти и заменить, которая очень полезна когда к примеру на сайте заражено множество файлов, а открывать каждый и удалять часть кода займет много времени.
Записан
Во время спора в Интернете Ваш оппонент приводит неопровержимые доказательства своей точки зрения? Не отчаивайтесь. До…тесь до орфографии.
Можно добавить скрипт который ищет прямо на сервере файлы и особенно содержимое в них.
Так же доступна функция найти и заменить, которая очень полезна когда к примеру на сайте заражено множество файлов, а открывать каждый и удалять часть кода займет много времени.
Можно. Если кто-то его напишет – добавлю
Можно. Если кто-то его напишет – добавлю
Да, чуть позже отпишу с другого компьютера, т.к. этот скрипт лежит в нем =))
Записан
Во время спора в Интернете Ваш оппонент приводит неопровержимые доказательства своей точки зрения? Не отчаивайтесь. До…тесь до орфографии.
Find and Replace (сокращенно FAR) — скрипт для поиска и замены текста в файлах сайта. FAR можно использовать как для поиска вредоносного кода, так и для повседневной работы с файлами.
Чтоб запустить скрипт на своем сервере, нужно скачать его на компьютер, открыть в текстовом редакторе и поменять пароль на свой, строка 14 define(‘PASS’, ‘Dr57fd’); вместо Dr57fd введите свой пароль, сохраните и залейте его в корень сайта. В браузер введите адрес http://example.com/far.php?pass=Dr57fd, где example.com – адрес вашего сайта, Dr57fd – ваш пароль.
Здесь можно посмотреть подробное описание работы скрипта и поблагодарить автора.
« Последнее редактирование: 15.11.2013, 19:26:36 от Apoca1ypto »
Записан
Во время спора в Интернете Ваш оппонент приводит неопровержимые доказательства своей точки зрения? Не отчаивайтесь. До…тесь до орфографии.
извиняюсь, запостил по ошибке, сайт глючит( И стартовое сообщение я запоганил(
Ув. модератор: замените начальное сообщение текстом из аттачмента, а то оно почему-то обрезалось сильно! Я его начало решил подправить, внес FAR в раздел “инструменты” – и все, катастрофа
« Последнее редактирование: 25.11.2013, 20:08:21 от mark1 »
Записан
извиняюсь, запостил по ошибке, сайт глючит( И стартовое сообщение я запоганил(
Ув. модератор: замените начальное сообщение текстом из аттачмента, а то оно почему-то обрезалось сильно! Я его начало решил подправить, внес FAR в раздел “инструменты” – и все, катастрофа
Да уж Исправил.
Что-то я не понял про это место
4) Поиск места в PHP файлах, где нужно что-то править
Ищем нужный текст по файлам, находим:
а) текст напрямую в БД, или в php-файле.
Как это содержимое php-файла может находиться в БД?
Что-то я не понял про это место
Как это содержимое php-файла может находиться в БД?
Сам озадачен) Я что-то видно не то имел в виду) Но кстати, такое легко может быть, если человек использует Sourcerer или Jumi (плагины для вставки PHP/JS кода в тело Custom-HTML модуля и статей) Ах да! Есть еще один случай для этого: если вас взломали, и я видел не раз, что в базе прописан шелл со всеми сопутствующими свистелками и текстовками.
Да уж Исправил.
Спасибо!) А чего оно обрезалось? Есть лимит размера сообщения? Я пробовал влепить тот текст в новый пост – и с тем же результатом…
« Последнее редактирование: 26.11.2013, 12:23:25 от mark1 »
Записан
mark1, раз уж завели тему для “чайников”, то давайте чётко всё разжевывайте.
Не надо вводить в заблуждение пользователей.
Содержимое php-файла не может находиться в БД.
В БД находятся значения, переменные и т.д.
Я не сверх-профи, но лично выпиливал шеллы из БД у некоторых пострадавших чайников. А шеллы написаны большей частью на PHP. А еще есть вставка кода через Jumi/Sourcerer, изредка народ юзает такое. И поскоку вставка идет в Custom-HTML/статью, то по итогу вставленный PHP попадает в БД.
В норме – разумеется, PHP не может находиться в БД. Но я привел 2 примера (актуальных именно для чайников, о к-рых и речь), когда может.. не встречались с таким?
Править стартовое сообщение я не хочу: оно у меня обрезается при сохранении. Может, b2z подправит, если оно того потребует
« Последнее редактирование: 26.11.2013, 14:14:04 от mark1 »
Записан
Ребят, помогите, пожалуйста! В поисках файла, в котором то же, что и в исходном коде отображаемой страницы, перелопатила все index.php и index.html. Там что-то вроде:
или того хуже
Как их раздобыть, если требуемые операции через админку сделать никак?
Задайте вопрос в отдельной теме. Это тема про инструменты поиска, а не про решение проблем!
NetBeans IDE
Создать проект с существующим PHP скриптом.
В окне результата поиска можно открыть файл, а кликнув по строке выдачи, и строка подсвечивается.
В инструментарий стоит добавить WebDrive. Прога платная, но того стоит. Позволяет примонтировать к винде сайт по FTP или SSH (будет просто ещё один диск) и искать куда быстрее, чем тоталом.
NetBeans IDE
Создать проект с существующим PHP скриптом.
В окне результата поиска можно открыть файл, а кликнув по строке выдачи, и строка подсвечивается.
Ну тут можно любое IDE использовать – все ищут.
В инструментарий стоит добавить WebDrive. Прога платная, но того стоит. Позволяет примонтировать к винде сайт по FTP или SSH (будет просто ещё один диск) и искать куда быстрее, чем тоталом.
Почему быстрее?
Почему быстрее?
Сложный вопрос. Быстрее кажется чисто визуально, объективных причин не знаю. Потому провёл эксперимент. Искал все файлы со словом «foreach» в папке HTML шаблона.
Файлы:
Результаты:
Total — FTP
1:12
WebDrive — FTP
1:14
WebDrive — SFTP
0:44
Очевидно, что с SFTP-соединением ищет быстрее. По-FTP одинаковое время, две секунды — видимо погрешность опыта.
Ниже добавил описание возможностей проги. Рекламировать, так по-полной
Описание раз:
Описание два:
« Последнее редактирование: 02.12.2013, 14:57:39 от Shustry »
Записан
ок, добавил в первый пост
А можно ли (ну уж прям для совсем чайников) например по коду элемента определить, где искать и править этот самый элемент?
На уже работающем сайте без необходимости копирования структуры, можно искать с помощью extplorer-компонента.
Записан
Я рифме друг словесной. Тут
Свой упражняю словоблуд:
Блог Ecolora
Можно добавить скрипт который ищет прямо на сервере файлы и особенно содержимое в них.
Так же доступна функция найти и заменить, которая очень полезна когда к примеру на сайте заражено множество файлов, а открывать каждый и удалять часть кода займет много времени.
Записан
Во время спора в Интернете Ваш оппонент приводит неопровержимые доказательства своей точки зрения? Не отчаивайтесь. До…тесь до орфографии.
В инструментарий стоит добавить WebDrive. Прога платная, но того стоит. Позволяет примонтировать к винде сайт по FTP или SSH (будет просто ещё один диск) и искать куда быстрее, чем тоталом.
Так и не смог найти нужный текст в компоненте или на сайте! Вообщем компонента “Easybook Reloaded” хочу переделать ее для FIQ не могу найти где русский текст – “Перейти к отзывам” например
да и вообще если понять как находить русский текст во всех этих CSS js и других расширения то жизнь станет проще!! Спасибо!
Вопросы задавайте в отдельной теме.
Это тема про инструменты поиска, а не про решение проблем!
« Последнее редактирование: 26.03.2014, 18:36:11 от b2z »
Записан
Умные люди напишите пошагово где находятся файлы. Мне нужно отредактировать цены в интернет магазине Tupperware-sale.ru В данный момент там выводится по две цены сразу на товар, который идет без скидки. А нужно чтоб была зачеркнута старая и указана новая. А там где нет скидки, чтоб была указана одна цена, а не две как у меня. И нужно чтоб еще была указана скидка в %.
Благодарю.
Приветствую, друзья! Села писать о том, как найти файл сайта легко и просто, но не могу удержаться – похвастаюсь, хотя от многих поздравление уже получила: 23 января 2016 года блог зарегистрирован в разделе «Поисковая оптимизация» Каталога трастовых сайтов. И теперь у меня в футере красуется кнопочка, по которой можно перейти и даже оставить комментарий.
Теперь к делу. Всем, кто ведет блоги или сайты, приходится вносить какие-то правки в код, например, чтобы отредактировать дизайн. У меня сейчас стоит задача другая: избавиться от ошибок в валидности HTML. Техническое состояние веб-ресурса влияет на его авторитет не меньше полезного оптимизированного контента и других составляющих. Сначала валидатор выдавал всего 5 ошибок, и я обратилась на форуме sbup.com к специалисту с ником Старый, который дает бесплатные консультации, а также работает на коммерческой основе. Им была обнаружена глобальная ошибка, из-за которой остальные не обнаруживаются. После устранения глобальной у меня вылезло ошибок и предупреждений уже около сорока.
Исправить некоторые труда не составило, например, вставить исчезнувшие пробелы в ссылках. А чтобы устранить другие, требовалось найти место, которое нужно отредактировать. В поиске файлов клиенты Бегета могут обойтись без таких программ, как Notepad++. Искать по тексту или названию файла можно непосредственно в файловом менеджере. По возможности, область поиска нужно сузить, но если мы даже не предполагаем, где может находиться искомый объект, ищем в public_html (корне сайта).
На практике это выглядит так: мне нужно удалить некий фрагмент, выбираю поиск по тексту и в строку вставляю выражение. Осталось запустить поиск и получить результат.
К моему счастью, в результате оказался один файл, а их может быть много. В окне поиска, которое по умолчанию свернуто, указан путь к файлу. Чтобы увидеть его целиком, окно нужно развернуть.
Итак, файл в файловом менеджере хостинга найден. Следующий шаг — его открыть и найти требуемый участок кода, чтобы исправить.
Но не спешите! Самое время загрузить файл на компьютер, чтобы в случае чего заменить тот, который подвергся истязаниям. При таком подходе не потребуется делать резервного копирования всего сайта – существенная деталь, если папки с бэкапом выкладываются на аккаунт, а места лишнего не очень много.
Вот и все. Я рассказала, как найти файл сайта на хостинге Бегет, но, думаю, и на других современных хостингах есть функция поиска.