File Upload 취약점이란
파일을 업로드할 때, 파일에 대한 충분한 검증을 하지 않아서 발생하는 보안 취약점입니다.
예를 들어 서버가 특정 파일 유형(예:. php,. jsp 등)을 실행할 수 있도록 허용할 경우, 공격자는 서버 측 코드 파일을 업로드하여 웹 셸을 실행할 수 있습니다. 이는 공격자가 서버를 완전히 제어할 수 있게 만듭니다
DVWA 실습으로 알아보기
File Upload 취약점은 주로 웹셸을 업로드하여 서버에 접근하고 권한을 획득하는 공격과 같이 사용됩니다.
아래 2023년 8월에 발생한 파일업로드 공격사례에서도 파일업로드 취약점을 이용해 웹셸을 업로드하는 것을 볼 수 있었습니다.
DVWA활용하여, 실제 공격 방식과 유사하도록 파일 업로드 취약점을 활용해 웹셸 업로드를 하는 실습을 진행해 보겠습니다.
보안 수준은 Low로 진행합니다.
로컬에서 P0 wny Shell을 다운로드합니다.
wget https://raw.githubusercontent.com/flozz/p0wny-shell/master/shell.php -O p0wny-shell.php
다운로드한 웹셸파일을 업로드해줍니다.
해당 경로로 접속 시, 웹셸 업로드가 성공한 것을 확인할 수 있습니다.
또한 민감한 정보인 etc/passwd도 확인할수 있는 것을 볼 수 있습니다.
대응방안
해당 취약점이 발생하는 원인은 적절한 검증 없이 악성파일이 업로드되는 것입니다.
따라서 악성파일인지에 대한 충분한 검증을 할 수 있는 시큐어 코딩을 작성합니다. 또한 불가피하게 업로드가 되었을 때의 조치도 마련해두어야 합니다.
정리하자면, 아래와 같습니다.
1. 파일 업로드 시 확장자, 크기, 콘텐츠 유형등에 대한 검증 및 필터링을 수행하는 로직을 구현합니다.
2. 파일을 즉시 서버에 저장하지 않고, 임시저장소에서 검증하는 로직을 구현합니다.
3. 업로드된 파일의 이름을 무작위 문자열로 변경하여 업로드된 경로로 이동하지 못하도록 합니다.