이 글은 PHP에 대한 관련 지식을 제공하며, 파일 포함 취약점에 대한 관련 문제를 주로 소개합니다. 파일 포함 취약점이 발생하는 이유는 PHP 함수를 통해 파일이 도입될 때 들어오는 파일 이름으로 인해 합리적인 검증이 이루어지지 않았기 때문입니다. 예상치 못한 파일이 작동되었네요. 모두에게 도움이 되었으면 좋겠습니다.
추천 연구: "PHP Video Tutorial"
파일 포함 취약점은 PHP 함수를 통해 파일이 도입될 때 들어오는 파일 이름이 제대로 보정되지 않아 발생합니다. 따라서 예상치 못한 파일이 조작되어 예상치 못한 파일 유출이 발생하거나 악성 코드가 삽입될 수도 있습니다.
다음 네 가지 함수는 일반적으로 PHP에서 파일 포함 취약점을 발생시킵니다.
1. include()를 사용하여 파일을 포함하는 경우, include() 함수에 대한 코드가 실행될 때만 파일이 포함됩니다. 경고만 할게요. 계속하세요.
2. include_once()의 기능은 include()와 동일합니다. 동일한 파일을 반복해서 호출하면 프로그램이 한 번만 호출한다는 차이점이 있습니다.
3. require()는 프로그램이 실행되는 즉시 파일을 호출합니다. 오류가 발생하면 오류 메시지가 출력되고 스크립트가 종료됩니다.
4. require_once()는 require()와 동일한 기능을 갖습니다. ) 차이점은 동일한 파일에 대해 반복적으로 호출되면 프로그램이 한 번만 호출된다는 것입니다.
공격자는 이 취약점을 이용하여 임의의 파일을 읽고 서버에 있는 중요한 정보를 얻을 수 있습니다.
이 취약점의 존재는 버전과 관련이 없습니다
PHP로 POST 데이터 패킷을 보낼 때 데이터 패킷에 파일 블록이 포함되어 있으면 여부에 관계없이 파일 업로드 논리를 처리하기 위해 PHP는 이 파일을 임시 파일(보통 /tmp/php [임의의 6자])에 저장하고 파일 이름은 $_FILES에서 찾을 수 있습니다. 변하기 쉬운. 이 임시 파일은 요청이 완료된 후 삭제됩니다.
동시에 phpinfo 페이지는 현재 요청 컨텍스트의 모든 변수를 인쇄하므로 파일 블록이 포함된 데이터 패킷을 phpinfo 페이지에 보내면 반환에서 $_FILES 변수의 내용을 찾을 수 있습니다. 패킷에는 당연히 임시 파일 이름도 포함됩니다.
파일 포함 취약점으로 인해 악용 가능한 파일을 찾을 수 없는 경우 이 방법을 사용하여 임시 파일 이름을 찾아 포함할 수 있습니다.
하지만 취약점이 포함된 파일과 phpinfo 페이지는 일반적으로 두 페이지로 구성됩니다. 이론적으로는 먼저 phpinfo 페이지에 데이터 패킷을 보낸 다음 반환된 페이지의 임시 파일 이름을 일치시킨 다음 이 파일 이름을 로 보내야 합니다. 취약점 페이지가 포함된 파일입니다. 첫 번째 요청이 끝나면 임시 파일은 삭제되며, 당연히 두 번째 요청은 포함될 수 없습니다.
이때 조건부 경쟁을 사용해야 합니다.
1) webshell이 포함된 업로드 데이터 패킷을 phpinfo로 보냅니다. 이 데이터 패킷의 헤더, 가져오기 및 기타 위치는 정크 데이터로 채워져 있어야 합니다.
2) phpinfo는 이때 모든 데이터를 출력하게 되며, 정크 데이터로 인해 phpinfo가 매우 커지게 됩니다.
3) PHP의 기본 버퍼 크기는 4096입니다. 즉, PHP는 매번 소켓 연결에 4096바이트를 반환합니다.
4) 따라서 네이티브 소켓을 직접 조작하여 매번 4096바이트를 읽습니다. 읽은 문자에 임시 파일 이름이 포함되어 있는 한 두 번째 데이터 패킷이 즉시 전송됩니다.
5) 이때 첫 번째 데이터 패킷의 소켓 연결은 아직 종료되지 않았지만 PHP는 매번 4096바이트를 계속해서 출력하므로 임시 파일은 삭제되지 않았습니다.
6) 이 시차를 이용하여 임시 파일을 성공적으로 포함하고 마지막으로 getshell을 포함할 수 있습니다.
화이트리스트를 설정합니다.
추천 학습: "PHP 비디오 튜토리얼"
위 내용은 PHP 파일 포함 취약점에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!