여러 파일의 복잡한 문자열 바꾸기

여러 파일의 복잡한 문자열 바꾸기

해커가 웹 서버에 침입하여 다음 문자열을 추가했습니다. (보안상의 이유로 일부 문자가 제거되었습니다.개행 문자 추가가독성을 위해) 모든 index.php파일에서:

<?php 
eval(gzuncompress(base64_decode('eF5Tcffxd3L0CY5WjzcyNDGGMV4+1dSwqSqzU0LQGAJCPCMM='))); 
eval(gzuncompress(base64_decode('eF5LK81LLsnMzKx+JjNW0rgUAqDUUxQ==')));  
eval(gzuncompress(base64_decode('eF6VlMmy/3sMxOez/iJOojHFT0Ig/8jlTymmN/I='))); 
?>

나는 sed명령을 사용하여 그것을 제거하려고 시도했지만(다른 것으로 대체) 그렇게 큰 문자열로 유효한 정규식을 정의하는 것은 거의 불가능합니다.

.txt 파일에서 문자열을 읽는 것과 같은 다른 방법이 있습니까?

답변1

이러한 트릭을 어디에서나 사용하지 않는다고 가정하면 이렇게 해보는 것은 어떨까요? ( sed -i및 Maybe 를 사용하여 올바르게 수행하는 find -exec ...것은 질문의 일부가 아닙니다. 그렇죠?)

$ sed 's/eval(gzuncompress(base64_decode(.*)));//' << EOF                     
> <?php eval(gzuncompress(base64_decode('eF5Tcffxd3L0CY5WjzcyNDGGMV4+1dSwqSqzU0LQGAJCPCMM=')));eval(gzuncompress(base64_decode('eF5LK81LLsnMzKx+JjNW0rgUAqDUUxQ=='))); eval(gzuncompress(base64_decode('eF6VlMmy/3sMxOez/iJOojHFT0Ig/8jlTymmN/I=')));?>
> EOF
<?php  ?>

...나중에 빈 s를 처리할 수 있습니다 <?php ?>(별로 아프지 않죠?).

편집하다설명된 상황에 맞는지 확인하려면 개행 문자를 제거하세요.

편집 2모든 것을 (좋은 것으로 알려진) 백업(있는 경우).

편집 3방금 "모든 index.php 파일" 비트를 확인했습니다. 그래서 당신은 다음과 같은 것을 시도해 볼 수 있습니다

find /path/to/wwwroot -name "index.php" -exec sed -i regex {} \;

관련 정보