File Download
Last updated
Was this helpful?
Last updated
Was this helpful?
파일 다운로드 취약점은 웹 애플리케이션에서 파일을 다운로드 하는 기능이 존재할 때,
공격자가 이를 악용하여 본래 의도를 벗어난 파일을 다운로드 하는 공격 기법입니다.
간혹 LFI 공격과 파일 다운로드 공격이 유사하여 두 공격을 동일시 여기는 경우가 있으나
파일 다운로드와 LFI는 본질적으로 다른 공격입니다.
파일 다운로드 공격은 단순히 서버의 자원을 다운로드 하는 행위에 불과하지만
LFI는 해당 위치의 파일을 실행하여 읽는 것이기 때문입니다.
따라서 웹쉘 확장자가 png로 되어있으며, 웹 디렉토리 하위에 스크립트 실행 권한이 없는 상태에서도
png 확장자의 스크립트 코드가 담긴 파일을 올린다음 LFI 취약점을 이용하여
해당 파일을 읽게 되면 스크립트가 실행되는 것을 확인할 수 있습니다.
파일 다운로드 취약점 중 가장 흔하게 떠올릴 수 있는 형태의 로직입니다.
공격자는 http://target.com/download.php?file=../../../etc/passwd
와 같이
파일 이름을 요구하는 파라미터에 경로이동 문자 등을 삽입하여 경로를 변조한 뒤,
서버에서 의도하지 않는 민감한 파일까지 다운로드를 하는 공격 형태입니다.
DBMS를 이용한 파일 다운로드 로직은 다운로드 할 파일의 이름을 파라미터에 직접 삽입하는 대신
데이터베이스의 파일 목록에서 인덱스 컬럼의 값을 가져와서 파일을 찾는 방식입니다.
일반 사용자들은 http://target.com/download.php?file=98
과 같이
서버에 파일 이름이 아닌 98이라는 인덱스 값을 요구합니다.
그러면 데이터베이스에서 98번 인덱스와 매치되는 파일의 이름 혹은 경로를 찾은 뒤,
업로드 디렉토리에서 해당 파일을 가져오는 형식입니다.
만약 이 과정에서 파라미터를 입력하는 부분에 적절한 보안 조치가 이뤄지지 않아
SQL Injection 공격이 발생한다면, 공격자는 UNION 공격 등을 통해서
상위 경로로 이동하는 문자를 입력할 수 있습니다.
화이트리스트를 통한 입력값 검증
다운로드 허용 확장자 설정
파일 다운로드 공격을 방어하기 위해서는 근본적으로 경로 이동 문자를 차단할 수 있습니다.
화이트리스트 방식을 적용하여 사용자들이 이용에 불편함이 없는 선에서
공격에 악용 가능한 모든 특수문자를 차단하거나, 다운로드 할 수 있는 파일 확장 형태를 정의합니다.
예를 들어, 사용자 게시판에서 업로드 로직을 png, jpg 등의 사진 파일 확장자만 허용했다면
게시판에서 다운로드 하는 기능 역시 png, jpg만 구현해도 이용에 불편함이 없을 것입니다.