[week_9] 파일 업로드(File Upload) 취약점
0. 들어가기
오버로딩 : 같은 이름의 함수(메서드)를 여러 개 정의하고 매개변수의 유형과 개수를 다르게 설정하여 다양한 유형의 호출 응답을 가질 수 있도록 하는 기술 (== 새로운 메서드 정의)
오버라이딩 : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용하는 기술(==상속받은 메서드의 내용만 변경)
1. 파일 업로드 취약점
공격자가 웹사이트의 파일 업로드 기능을 악용하여 인가받지 않은 파일을 서버에 임의로 업로드할 수 있는 취약점
[-] 발생 가능한 위치
게시판, 서류제출, 프로필 사진 및 업데이트
==> 파일을 선택하고 올릴 수 있는 모든 곳에서 발생 가능
[+] 공격 시나리오
1. 웹 서버에 실행 가능한 파일 업로드(웹 셀)
2. deface 공격
<?php echo system($_GET['cmd']);?>
링크 경로 확인 방법
1) 마우스 오른쪽 클릭하여 주소 확인
2) 마우스를 업로드한 파일 위에 올려놓을 경우 하단에 표기됨(일부 웹 브라우저에서만 확인 가능)
3) 프로그램(Burp Suote)을 활용하여 경로 확인 가능
4) 크롬의 경우 개발자 도구(option+command+i)

2. 우회 기법
1) 파일 검증 우회
Content type을 확인해서 확장자 변경
2) 확장자 검증
개발자들이 막아놓은 파일 확장자를 우회!

구글에서 web shell (언어)를 검색
PHp처럼 대소문자 구분도 가능
.php%00.jpg와 같은 특수문자를 사용
(%00,%zz)는 종단 문자(\0,NULL)이며, 파일 서버가 리눅스 시스템일 경우 우회하는 기법으로 사용된다고 합니다.
파일 업로드시 서버에서 확장자 체크를 할 때 종료문자로 인식하여 뒷부분을 날려버림!
즉, 주석처리와 비슷한 방법
3) 서버측 파일 오버라이드
.htaccess활용
.htaccess이란?
먼저 , .이 있다는 것은 시스템파일 또는 숨김파일이라고 할 수있다.htaccess는 hypertext acces의 약자
4) 파일 시그니쳐
파일마다 헤더 값이 있는데 헥스에디터를 사용하여 확인가능
5) 파일 업로드를 따른 매서드를 이용
6. 개발자의 실수 + 클라이언트 측에서 검증할 경우 발생!!!.