파일 업로드 취약점 공격은 웹 서비스 첨부 파일, 환경 설정 미흡을 이용하여 악의적인 스크립트가 포함된 파일을 업로드한 후에 웹 서버에 침투를 하는 공격이다. 공격자는 서버 사이드 스크립트(PHP, JSP, .NET 등)을 이용하여 웹쉘(WebShell)을 제작한다.
칼리리눅스는 기본적으로 웹쉘을 가지고 있다.
PHP로 작성된 이 백도어 스크립트는 공격자가 서버에 원격으로 접속하고 명령을 실행할 수 있게 해준다.
파일을 찾아서 업로드
'?cmd=cat+/etc/passwd'를 복사하여 URL에 붙여넣기하면 민간함 정보들이 그대로 유출된다.
보안 레벨을 한 단계 높여서 파일을 업로드하려니 막혔다. 한 번의 우회가 필요하다.
하지만 확장자만 바꿔주면 쉽게 우회할 수 있다.
'hack_shell.php' 파일 또한 PHP 웹셸 파일로 서버에 업로드되어 원격에서 명령을 실행하거나 시스템을 제어하는데 사용될 수 있다.
이 사이트는 악성코드, 바이럿, 트로이목마 등 다양한 유형의 악성 소프트웨어를 탐지하고 분석하기 위한 온라인 서비스다. 여러 보안 벤더와 도구를 이용하여 파일과 URL을 분석한다.
아까 난독화가 되어있던 'hack_shell.php' 파일 업로드을 해본다.
아래 분석 결과에 따르면 모두 'Undetected' 상태로 표시하고 있다. 이는 해당 파일이 데이터베이스에 있는 알려진 악성 코드나 위협으로 탐지되지 않았음을 의미힌다. 이것은 파일이 난독화 기술을 사용하였기 때문에 탐지가 되지 않았다.
보안 방법
- 파일 타입 검증:
- 확장자 검사: 사용자가 업로드하는 파일의 확장자를 검토하고 허용된 확장자만 허용한다. 예를 들어, 이미지 파일의 경우 .jpg, .png, .gif만 허용할 수 있다.
- MIME 타입 검사: 파일의 MIME 타입을 확인하여 실제 파일의 내용과 확장자가 일치하는지 검증한다.
- 파일 내용 검사:
- 파일 검사: 파일을 실제로 분석하여 악성 코드나 스크립트가 포함되어 있지 않은지 확인한다. 예를 들어, 이미지 파일에 스크립트가 삽입되어 있을 수 있으므로, 이미지 파일의 실제 내용을 검사해야 한다.
- 파일 이름 및 경로 검증:
- 파일 이름 필터링: 사용자 입력으로 받은 파일 이름에 특수 문자, 경로 탐색 문자 (../ 등)가 포함되어 있지 않도록 필터링한다.
- 파일 저장 위치: 업로드된 파일을 웹 루트 외부의 안전한 위치에 저장하여 웹 서버에서 직접 접근할 수 없도록 한다.
- 파일 크기 제한:
- 파일 크기 제한: 업로드할 수 있는 파일의 크기를 제한하여 서버 자원을 보호하고 대용량 파일의 업로드를 방지한다.
- 업로드 후 처리:
- 검증 및 스캐닝: 업로드된 파일을 서버에서 처리하기 전에 추가적인 보안 검사를 수행한다.
- 파일 접근 제어:
- 권한 설정: 업로드된 파일에 대한 접근 권한을 설정하여 인증된 사용자만 접근할 수 있도록 한다.
- 파일 다운로드 링크 보호: 파일 다운로드 링크를 인증된 사용자에게만 제공하고, 링크에 유효 기간을 설정하여 악용을 방징한다.
- 제한된 권한으로 실행:
- 서버 권한 설정: 파일을 저장하는 서버의 권한을 제한하여 업로드된 파일이 서버에서 직접 실행되거나 시스템에 영향을 미치지 않도록 한다.
- 의심스러운 파일 처리:
- 파일 백업 및 로그 기록: 업로드된 파일의 변경 내역 및 로그를 기록하여 문제가 발생했을 때 추적할 수 있도록 한다.
이러한 보안 조치를 통해 파일 업로드 기능의 취약점을 최소화하고, 시스템의 전반적인 보안을 강화할 수 있다.
'Study records > Web hacking' 카테고리의 다른 글
[Beebox] 검증되지 않은 리다이렉트와 포워드 (0) | 2024.07.31 |
---|---|
[Beebox] Buffer Overflow(Local) (0) | 2024.07.26 |
[Beebox] ShellShock 취약점(CVE-2014-6271) (0) | 2024.07.25 |
[Beebox] PHP CGI RemoteExecution(CVE-2012-1823) (0) | 2024.07.25 |
[Beebox] 크로스 사이트 요청 변조(비밀번호 변경/비밀번호 힌트 변경/계좌 이체) (0) | 2024.07.25 |