📗 self-study/📗 inflearn

[웹 해킹 & 시큐어 코딩] 08. 파일 업로드 취약점

천재강쥐 2023. 12. 8. 03:00

 

 

 

🔥 웹 개발자와 정보보안 입문자가 꼭 알아야 할 웹 해킹 & 시큐어 코딩

 

위아래 1줄씩 띄우고 중요한 부분은 볼드 효과

 

 

 

 

📍 파일 업로드 취약점이란?

👉🏻 File Upload Vulnerability: 서버 사이드 스크립트에 적힌 코드가 비정상적인 파일을 업로드하여 사용자를 공격함

👉🏻 해당 공격을 당하게 되면 OS Command 공격처럼 서버에 명령어를 실행할 수 있게 됨

👉🏻 파일 업로드나 다운로드의 경우 웹 사이트에서 반드시 필요한 필수 기능에 속하기 때문에 많은 사용자가 해당 위험에 노출될 수 있음

👉🏻 방화벽이나 웹 쉘 솔루션을 통해 방어 가능

 

 

📍 공격 원리 분석

👉🏻 1) 파일 경로 + 파일 이름으로 이루어진 경로 파악

👉🏻 2) 파일 출력(File Output)

👉🏻 3) 웹 쉘 접근 및 실행을 하게 됨

 

 

 

📍 웹쉘이란 무엇인가?

👉🏻 Web(월드 와이드 웹) + Shell(사용자와 커널 간의 대화를 하기 위한 인터페이스)

👉🏻 즉, 웹 페이지상에서 원격지 서버의 시스템 명령어를 실행할 수 있는 도구이며 시스템 명령뿐 아니라 파일 업/다운로드, 조회 및 수정도 가능함

 

언어별 시스템 함수

언어 함수
PHP passthru, system, `(백 쿼터), excl, popen, escapeshellcmd, eval, shell_exec, assert ...
JSP Runtime.getRuntime().exec("").processBuilder("")
ASP CreateObject("wscript.shell").exec("cmd/c"&cmd), eval, Execute ...
ASPX WinExec(), ShellExecute() ...

 

 

 

📍 검증 로직 구현

👉🏻 확장자 검증

👉🏻 이미지 검증

👉🏻 파일 사이즈 검증

 

 

 

📍 확장자 검증 로직에 대한 이해

      // ____ 확장자로 확인하여 업로드 불가한 확장자를 등록해 놓음
webshell.jsp

 

방식 장점 단점 알맞은 기능
블랙 리스트 방식
: 허용하지 않은 확장자만 막음
다양한 파일 업로드 가능 다양한 우회 가능성 존재 다수 파일 업로드
(예: 자료실)
화이트 리스트 방식 (추천)
: 허용한 확장자만 업로드 가능
우회 가능성이 제한적 다양한 파일 업로드 불가능 특정 파일 업로드
(예: 이미지 업로드)

 

👉🏻 업로드(운동화.jsp) > 확장자 파싱 (.jsp) > 검증 (jsp가 업로드 가능한가?) > 통과/return

 

 

 

📍 대응 방안

👉🏻 파일명에 대한 검증

1) 확장자 검증

2) 서버 측에서 파일명 생성

 

crehacktive.png 라는 파일명이 있으면 > 시간-밀리세컨드나 랜덤 문자열로 서버에서 파일명 따로 생성하여 저장함!

위와 같이 진행하게 되면 사용자가 파일명 변조 불가능하여 아래 관점에 대해서 안전해짐

1) 보안적 관점

2) 예외상황 관점

 

👉🏻 올바른 업로드 경로(서브 사이드 스크립트가 실행되지 않는 경로) 설정

1) 웹 디렉터리 이외의 경로 - WEB-INF의 경우 서브 사이드 스크립트가 실행되지 않는 경로이므로 해당 경로로 설정하면 좋음

2) 스크립트 실행 권한 제거

...
String gubun = request.getParameter("gubun");

// \(역 슬래시) 문자를 /(슬래시) 문자로 치환
gubun = gubun.replace("\\", "/");

// gubun 변수에 대해 /, .. 문자 존재 시 경고창 출력 및 어플리케이션 종료
if(gubun.indexOf("/") != -1 || gubun.indexOf("..") != -1) {
	out.println("<script>alert('허용되지 않은 문자 존재함'); history.back(-1);</script>");
    return;
}

// 업로드 로직 진행
...