
내 웹사이트가 최소 3135개 파일(내 모든 WordPress 사이트)에 악성 코드를 삽입한 악성 악성 코드에 감염되었습니다.
다음은 감염된 파일 중 하나입니다.http://pastebin.com/FXU1ht4R
이것이 내가 원하는 결과입니다:http://pastebin.com/YPJwjiWH
find
나는 몇 가지 간단한 명령 외에는 grep
Unix 명령에 대해 아무것도 모릅니다 .
약간의 조사 끝에 이 명령을 찾았 sed
지만 내 경우에는 이 명령을 사용하는 방법을 모르겠습니다.
위의 코드에서 볼 수 있듯이 일반적인 패턴은 코드가 각 파일의 상단, 즉 원래 태그 앞 <?php
(이제 원래 <?php
태그가 두 번째라는 의미)에 삽입된다는 것입니다.
cnajwp =
그래서 그 앞에 두 번째 태그가 포함된 모든 파일을 찾아서 모두 삭제할 수 있다고 생각했습니다 <?php
.
cnajwp
다음을 사용하여 포함된 파일을 찾을 수 있습니다.
find * -type f -name "*.php" -exec grep -l "cnajwp =" {} \;
<?php
하지만 이러한 이벤트의 두 번째 레이블 이전의 모든 항목을 바꾸는 방법을 모르겠습니다 .
여기 누구든지 나를 도와줄 수 있나요?
답변1
그러면 명령을 사용하여 감염된 파일을 찾고 첫 번째 줄에서 표현식을 실행하는 xargs에 목록을 제공합니다.
find * -type f -name "*.php" -exec grep -l "cnajwp =" {} \; |
xargs sed -i -E '1s/^(<\?php) \$ocnajwp =.*$/\1/'
입력 파일 예제를 기반으로 하면 이것이 트릭을 수행해야 합니다.
동시에 감염이 약간 다른 위치에 있는 파일을 발견하고 첫 번째 줄에 둘 다 포함된 일부 파일이 생겼으므로 <?php
다음 명령을 실행하여 해당 파일을 치료할 수 있습니다.
find * -type f -name "*.php" -exec \
gawk -i inplace 'NR==2 && /^<\?php$/ {next} 1' {} \;
답변2
이 솔루션은 악성 스크립트가 여러 줄에 걸쳐 있을 때 작동하며 내부 편집을 사용하여 서버의 파일을 직접 변경합니다.
find /base/path/here -type f -name "*.php" -exec \
sed -Ei '/<\?php/{:l1;/.*\?><\?php/!{N;bl1};s/<\?php.*\?>(<\?php)/\1/}' {} \;
이것이 법안에 맞기를 바랍니다.
답변3
제가 아는 한, 제거하려는 악성코드는 모두 1번째 줄에 배치되어 있습니다. 그러나 마크업도 해당 줄에 배치되므로 첫 번째 줄 을 제거하는 대신 <?php
전체 첫 번째 줄을 변경해야 합니다 .<?php
필요한 것은 다음 명령을 사용하는 것입니다.
sed -i '1 s/^.*$/<?php/g' yourFile.php
-i
옵션은 파일을 제자리에서 변경합니다.
따라서 find 명령의 경우 다음을 사용합니다.
find * -type f -name "*.php" -exec sed -i '1 s/^.*$/<?php/g' {} \;
첫 번째 줄과 두 번째 줄에 두 개의 라벨이 포함된 파일의 경우 <?php
위의 find 명령어를 실행한 후 다음 명령어를 실행해야 합니다.
find * -type f -name "*.php" -exec perl -ni -e 'print if $. < 1 or $. > 3 or !$seen{$_}++' {} \;
따라서 행 1에서 행 3까지 발견된 중복 행을 제거합니다. -i
옵션은 파일을 제자리에서 변경합니다.