Я собираюсь включить эту конкретную строку из строки 1 из более чем 16 000 файлов.
Начало инъекции:
<?php if(!isset($GLOBALS`
Middle of the injection is:
`7860msvd`
And end of the injection is:
`oqggbrtstz-1; ?>
Этот контент только в 1 строке (первый)
Не уверен, как это сделать, но вот что я имею в виду:
sed -i -e '1 s/.*<\?php if\(\!isset\(\$GLOBALS\.*7860msvd.*oqggbrtstz-1; ?>//g'
error: sed: -e expression #1, char 67: Unmatched ( or \(
Любая помощь будет потрясающей.
Вы пропускаете буквально какой-то специальный символ, такой как ?
и используя -r
получить ожидаемый результат
sed -ri '1 s/.*<\?php if\(\!isset\(\$GLOBALS.*7860msvd.*oqggbrtstz-1; \?>//g' File
-r, --regexp-extended
use extended regular expressions in the script.
@josifoski прав, не избегайте скобок. Небольшая поправка к его ответу, чтобы избежать удаления кода до инъекция:
sed -i -e '1 s/<\?php if(\!isset(\$GLOBALS.*7860msvd.*oqggbrtstz-1; \?>//g'
Один важный недостающий ответ — «не делай этого». Укрепите сайт, прежде чем делать что-либо еще. Затем восстановите сайт из заведомо исправных резервных копий или повторно разверните сайт из системы контроля версий.
Нахождение и исправление известен проблема не является правильным решением. Это уберет один очевидный симптом, но ничего не сделает, чтобы вас снова не взломали. И с любой существенной кодовой базой, есть вероятность, что злоумышленник оставил другие сюрпризы, которые вы просто еще не заметили.
исправление синтаксиса вашей команды
sed -i -e '1 s/.*<\?php if(\!isset(\$GLOBALS\.*7860msvd.*oqggbrtstz-1; \?>//g'
нет необходимости escape (), когда нет обратной ссылки и отсутствует экранирование?