expand_path (파일 .dirname (파일 이름), `. /.. /.. /`)) send_filefilename,:d isposition = > ` 인라인 ` 클래식 경로 순회 시퀀스는 “도트-도트-슬래시”로 알려져 있습니다. 그러나 path는 파일 개체를 만들기 전에 절대 경로 시퀀스가 포함 되지 않도록 하기 위해 유효성이 검사 되거나 수정 되지 않습니다. 이를 통해 system 속성을 제어할 수 있는 모든 사용자가 어떤 파일을 사용 하는지를 확인할 수도 있습니다. 이상적으로는 경로를 특정 종류의 응용 프로그램 또는 사용자 홈 디렉터리와 비교 하 여 확인 해야 합니다. .net 웹 응용 프로그램에 대 한 코드 기반 평가를 수행 하는 동안 최근에는 경로에 놀라운 기능을 찾았습니다. .net 코어의 결합 기능입니다. 는 두 개의 파일 경로를 인수로 사용 합니다. 이 두 가지를 연결 하 여 전체 경로를 가져온 다음 일반적으로 해당 파일에 읽기 또는 쓰기를 호출 합니다.
웹 응용 프로그램의 컨텍스트에서 첫 번째 매개 변수는 일반적으로 이미지 또는 사용자 문서의 저장 위치를 가리키는 절대 디렉터리 경로입니다. 두 번째 매개 변수는 종종 사용자가 어느 정도 제어할 수 있습니다. 예를 들어, 다음과 같은 요청: 공격자가 파일 이름에 경로 순회 시퀀스를 배치 하 여 현재 디렉터리에서 역 추적 하기 때문에 취약점이 발생 합니다. 웹 서버에서 웹 응용 프로그램의 오류에 대 한 정보를 반환 하면 공격자가 올바른 위치 (예: 소스 코드가 있는 파일 경로)를 추측 하는 것이 훨씬 쉽습니다. 사용자 데이터를 파일 또는 URL 경로에 배치 하는 것이 불가피 하다 고 판단 되 면 허용 되는 값의 허용 목록에 대해 데이터를 엄격히 확인 해야 합니다. 웹 루트 내의 리소스에 액세스할 때 파일 경로 순회 시퀀스가 포함 된 입력을 차단 하기만 하면 (예: 도트-슬래시) 일부 보호 된 항목에 액세스할 수 있으므로 중요 한 정보의 검색을 방지 하기에 충분 하지 않습니다. 통과 시퀀스를 사용 하지 않고 원래 경로에 있습니다. 우리는 절대적인 파일 경로를로 대체 했다. /..
/.. /.. /etc/passwd. [그림 2] 자, 우리가 본 예제를가지고, 우리는 여기에 큰 차이를 볼 수 있습니다. lfi/rfi를 사용 하 여 리소스는 현재 응용 프로그램의 컨텍스트에서 로드 되 고 실행 됩니다. 그러나 임의의 파일 다운로드의 경우, 우리는 기본적으로 특정 디렉토리에 사용자 입력을 제한 하는 데 실패 웹 응용 프로그램의 다운로드 기능을 남용 하 고 있습니다. 사용자 입력은 디렉터리를 벗어나서 시스템의 다른 중요 한 파일을 다운로드할 수 있습니다. 다음 코드는 Java 서블릿과 경로 통과 취약점이 있는 파일의 무제한 업로드를 보여 줍니다. HTML 양식의 action 속성은 업로드 파일 요청을 자바 서블릿으로 보낸다. 임의의 파일 다운로드와 lfi/rfi 간의 차이 아래 예제에서는 시스템 속성에서 사전 파일의 경로를 읽고 file 개체를 초기화 하는 데 사용 합니다. basename = expand_path (파일.
디렉터리 이름 (__file__), `. /.. /파일 `)) 파일 이름 = expand_path (basename, @file. public_filename))이 메서드는 사용자의 입력을 사용 하 고 값을 ` filename ` 매개 변수에 할당 합니다.