파일 내에서 파일 이름 검색

파일 내에서 파일 이름 검색

누군가 내 서버의 모든 WordPress 인스턴스에 대량의 악성 코드를 배치했습니다. 두 번째. (적어도) 모든 js 파일이 수정됩니다. 하지만 패턴이 있습니다. 코드는 항상 다음과 같습니다.

/*[file-name]*/[malicious code]/*file-name*/

grep 및 sed를 사용하여 이러한 조각을 제거할 수 있는 방법이 있습니까? 이전 공격에서 유사한 코드가 파일에 배치되었으나 ​​다음을 사용하여 제거했습니다.

grep -rnwl './' -e "[/*]d754948f7cc08347e64716505bd652ae[*/].*[/*]d754948f7cc08347e64716505bd652ae[*/]" | xargs sed -i "s/[/*]d754948f7cc08347e64716505bd652ae[*/].*[/*]d754948f7cc08347e64716505bd652ae[*/]//g"

"d754948f7cc08347e64716505bd652ae"와 같은 고정 문자열 대신 각 파일 이름을 사용하도록 이 표현식을 수정하는 방법이 있습니까?

답변1

단계별로 최종 코드를 생성합니다. 먼저 모든 js 파일을 찾습니다.

find <project_dir> -type f -name '*.js'

그런 다음 다음 파일을 반복합니다.

find <project_dir> -type f -name '*.js' | while read file_path; do
    # Code here run once for every file
done

그런 다음 파일 이름을 사용하여 패턴을 생성하고 이를 사용하여 sed파일에서 악성 코드를 제거합니다.

find <project_dir> -type f -name '*.js' | while read file_path; do
    file_name=$(basename "$file_path")
    pattern="/\*$file_name\*/.*/\*$file_name\*/"
    sed -ri "s:$pattern::g" "$file_path"
done

몇 가지 참고사항:

  • 0단계는 파일을 백업하는 것입니다.
  • 검색 패턴에 이미 "/"가 있어서 혼란스러울 수 있기 때문에 대신 sed명령을 사용 합니다 ."s:$pattern::g""s/$pattern//g"sed
  • 이 코드는 공백이 포함된 파일 이름을 처리합니다. 적어도 저는 이를 처리하려고 합니다.

관련 정보