777 권한으로 PHP 파일 내에 코드가 삽입되었습니다.

777 권한으로 PHP 파일 내에 코드가 삽입되었습니다.

나는 잠에서 깨어나 777 권한을 가진 공유 웹 호스트의 모든 폴더에 두 개의 새로운 PHP 파일이 있다는 것을 발견했습니다. 파일 내부의 코드를 읽을 수 없습니다. 디코딩된 버전은 다음과 같습니다.http://pastie.org/779226(뭐...?) 해당 코드는 일부 PHP 파일 내부에도 삽입되었습니다.

누군가가 이것을 어떻게 할 것인지 나는 당황스럽습니다. 777 권한을 갖는 것이 가장 현명한 것은 아니지만 처음에 어떻게 777 권한이 내 폴더 시스템에 들어왔는지 알 수 있습니다.

저는 단지 클라이언트 측 프로그래머일 뿐입니다. 앞으로 이런 일이 발생하지 않도록 하는 방법에 대한 조언이 있으면 좋을 것 같습니다.

건배.

답변1

난독화되지 않은 스크립트 버전은 다음과 같습니다.http://pastie.org/private/iobgt7aetg8mezoepucsg

이 코드에는 다른 웹사이트의 외부 PHP 코드가 포함되어 있는 것으로 보이며 그렇게 하는 동안 방문자에 대한 정보를 수집합니다.

이런 일이 발생할 수 있는 한 가지 방법은 외부에서 액세스할 수 있는 디렉터리에 파일 업로드를 허용하는 것입니다. 적절한 유효성 검사 없이 그렇게 하면 악의적인 사용자가 악성 코드가 포함된 PHP 파일(이미지 업로드 사용)을 업로드할 수 있으므로 위험합니다. 웹 서버가 제대로 구성되지 않은 경우 요청 시 코드가 실행됩니다.

이러한 문제를 방지하려면 다음을 확인하십시오.

  • PHP 프로세스는 제한된 사용자에 의해 실행됩니다.
  • 편집할 필요가 없는 파일은 소유자만 쓸 수 있도록 설정됩니다(실행 비트가 필요한지 여부에 따라 0644 또는 0744).
  • 업로드 디렉터리만 쓰기 가능으로 설정하세요.
  • 웹루트 외부에 있는 업로드 디렉터리를 사용해 보세요. 그런 다음 사용readfile()파일을 제공합니다.
  • 파일의 유효성을 검사합니다. 양식에서 이미지만 허용하도록 하려면 매직 비트의 유효성을 검사하고 이미지가 유효한지 확인하세요. 이것은 매우 간과되는 단계입니다. 다른 형식에도 동일하게 적용됩니다. 클라이언트가 보낸 파일 확장자나 MIME 유형에 의존하지 마십시오. 실제 파일 내용을 확인하세요.

답변2

내가 생각할 수 있는 가능성은 최소한 2가지입니다.

  1. FTP 비밀번호를 찾았습니다
  2. 그들은 당신의 PHP 소프트웨어에서 결함을 발견했습니다

이런 일이 발생하지 않도록 하려면 다음을 수행하세요.

  1. 복잡한 비밀번호를 사용하세요(최소 9자, 대소문자 혼합, 숫자, 특수문자)
  2. 777부터 마치 짐승의 수인 것처럼 달려라. 웹 서버를 제공하려고더 이상은 없어스크립트에 대한 읽기 권한을 부여하는 것보다 쓰기가 필요한 폴더/파일에 특별한 권한을 부여하십시오.

일부 로그(Apache의 액세스 로그 및 웹 사이트가 실행하는 FTP 서버의 FTP 로그)에 액세스할 수 있는 경우 무슨 일이 일어났는지 확인하는 데 도움이 될 수 있습니다.

실제로 광범위한 결함(예를 들어 사용자가 좋아하는 것에 대해 fopen()만 래핑하는 보호되지 않은 스크립트가 있는 경우)이 아니라면 스크립트의 단순한 결함으로 그렇게 많은 변경을 수행할 수 있었는지 의심스럽습니다. FTP 로그인 우선순위.

관련 정보