파일업로드 편집하기
최신판 | 당신의 편집 | ||
1번째 줄: | 1번째 줄: | ||
− | '''파일업로드''' | + | '''파일업로드'''란 파일 데이터를 하류 노드에서 상류 노드로 전송하는 것을 말한다. 전송할 때는 파일 전송 프로토콜(FTP)을 사용한다. |
− | |||
==구조== | ==구조== | ||
− | + | ==라이브러리== | |
− | |||
− | |||
− | |||
===com.oreilly.servlet=== | ===com.oreilly.servlet=== | ||
[[파일:Cos.jar사이트.PNG|700픽셀|섬네일|가운데|'''com.oreilly.servlet 다운로드 사이트]] | [[파일:Cos.jar사이트.PNG|700픽셀|섬네일|가운데|'''com.oreilly.servlet 다운로드 사이트]] | ||
* '''특징''' : 스트림으로 구현하는 파일업로드 기능에서 입출력스트림 기능을 간편하게 제공해준다. JSP 이외에 자바 파일에서도 사용이 가능하다. | * '''특징''' : 스트림으로 구현하는 파일업로드 기능에서 입출력스트림 기능을 간편하게 제공해준다. JSP 이외에 자바 파일에서도 사용이 가능하다. | ||
* '''주요 기능''' : 보통 웹 프로젝트에서 라이브러리 디렉토리에 넣고 사용하며 파일 업로드 처리 뿐만 아니라 매개변수 구문 분석, 멀티 파트 응답 생성, 파일반환, 소켓 연결관리, 원격 함수 호출 서버 역할을 할 수 있도록 그리고 애플릿과 통신할 수 있도록 도와주는 클래스이다. | * '''주요 기능''' : 보통 웹 프로젝트에서 라이브러리 디렉토리에 넣고 사용하며 파일 업로드 처리 뿐만 아니라 매개변수 구문 분석, 멀티 파트 응답 생성, 파일반환, 소켓 연결관리, 원격 함수 호출 서버 역할을 할 수 있도록 그리고 애플릿과 통신할 수 있도록 도와주는 클래스이다. | ||
− | * '''활용''' : cos.jar 파일을 라이브러리 디렉토리에 추가한 후 라이브러리를 활용하여 파일 업로드를 하기 위해선 form 태그에 enctype="multipart/form-data" 부분이 명시되어야 한다. 또한 인풋타입을 지정할때 파일로 지정해 주면된다. | + | * '''활용''' : cos.jar 파일을 라이브러리 디렉토리에 추가한 후 라이브러리를 활용하여 파일 업로드를 하기 위해선 form 태그에 enctype="multipart/form-data" 부분이 명시되어야 한다. 또한 인풋타입을 지정할때 파일로 지정해 주면된다. |
예제 | 예제 | ||
28번째 줄: | 24번째 줄: | ||
|align=left|Enumeration params = multi.getParameterNames(); | |align=left|Enumeration params = multi.getParameterNames(); | ||
|align=left|생성된 MultipartRequest 객체는 multi 레퍼런스를 통해서 생성된 MultipartRequest 객체가 가지고 있는 메소드를 사용할 수 있다. getParameterNames() 메소드는 폼에서 전송한 파라미터들의 이름을 Enumeration 타입으로 반환한다. 폼에 있는 input 태그중 file 속성이 아닌 모든 파라미터들의 이름을 반환하는 메소드 이다. | |align=left|생성된 MultipartRequest 객체는 multi 레퍼런스를 통해서 생성된 MultipartRequest 객체가 가지고 있는 메소드를 사용할 수 있다. getParameterNames() 메소드는 폼에서 전송한 파라미터들의 이름을 Enumeration 타입으로 반환한다. 폼에 있는 input 태그중 file 속성이 아닌 모든 파라미터들의 이름을 반환하는 메소드 이다. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
===Apache Commons Upload=== | ===Apache Commons Upload=== | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
===GUUpload=== | ===GUUpload=== | ||
87번째 줄: | 42번째 줄: | ||
==취약점== | ==취약점== | ||
− | * '''피해 범위''' : 웹사이트에 악성 스크립트를 이용하여 해당 서버에서 시스템 쉘 명령을 실행하여 시스템의 구조를 파악할 수 있다. | + | * '''피해 범위''' : 웹사이트에 악성 스크립트를 이용하여 해당 서버에서 시스템 쉘 명령을 실행하여 시스템의 구조를 파악할 수 있다. 웹쉘(Web Shell)을 통해 공격을 진행하며 백도어(Backdoor)를 업로드해 사용자 인증없이 서버나 다른 계정에 접속 가능하게 만들어 치명적인 결과를 만들어낼 수 있다.<ref>Luuii , 〈[https://tar-cvzf-studybackup-tar-gz.tistory.com/54 백도어(Backdoor)]〉, 《티스토리》, 2017-11-27</ref> |
* '''공격조건''' : 일단 당연하게도 파일이 업로드 가능한 환경에서 일어나며 파일이 업로드된 디렉토리의 경로를 알아야한다. 또한 디렉토리 경로를 알았다면 업로드된 디렉토리에 대한 실행 권한이 있어야 공격이 가능하다. | * '''공격조건''' : 일단 당연하게도 파일이 업로드 가능한 환경에서 일어나며 파일이 업로드된 디렉토리의 경로를 알아야한다. 또한 디렉토리 경로를 알았다면 업로드된 디렉토리에 대한 실행 권한이 있어야 공격이 가능하다. | ||
* '''원인''' : 웹 서비스를 이용하여 서버측의 명령을 실행할 수 있는 악의적인 목적의 스크립트 파일인 웹셀을 실행할 수 있다. php나 jsp는 서버측에서 동적인 처리를 위하여 사용하는 언어인데 php나 jsp를 활용해 데이터베이스와 통신할 수 있게 만들어준다. 이렇게 할 수 있는 원인은 php나 jsp 언어를 사용하면 리눅스 시스템 명령을 실행할 수 있기 때문이다.<ref>기르르, 〈[https://girrr.tistory.com/99 파일 업로드/다운로드 취약점 - 업로드]〉, 《티스토리》, 2020-04-08</ref> | * '''원인''' : 웹 서비스를 이용하여 서버측의 명령을 실행할 수 있는 악의적인 목적의 스크립트 파일인 웹셀을 실행할 수 있다. php나 jsp는 서버측에서 동적인 처리를 위하여 사용하는 언어인데 php나 jsp를 활용해 데이터베이스와 통신할 수 있게 만들어준다. 이렇게 할 수 있는 원인은 php나 jsp 언어를 사용하면 리눅스 시스템 명령을 실행할 수 있기 때문이다.<ref>기르르, 〈[https://girrr.tistory.com/99 파일 업로드/다운로드 취약점 - 업로드]〉, 《티스토리》, 2020-04-08</ref> | ||
− | * '''대응방법''' : 시큐어 코딩을 하고 취약점 패치를 진행해야한다. 대표적으로 악성 스크립트에 포함될 수 있는 키워드나 명령어에 대한 문장을 필터링할 수 있게 만들고 업로드 파일의 확장자 및 실행권한을 제한하는 방법이 있다 | + | * '''대응방법''' : 시큐어 코딩을 하고 취약점 패치를 진행해야한다. 대표적으로 악성 스크립트에 포함될 수 있는 키워드나 명령어에 대한 문장을 필터링할 수 있게 만들고 업로드 파일의 확장자 및 실행권한을 제한하는 방법이 있다. |
{{각주}} | {{각주}} | ||
==참고자료== | ==참고자료== | ||
− | |||
− | |||
* 업로드 위키백과 - https://ko.wikipedia.org/wiki/%EC%97%85%EB%A1%9C%EB%93%9C | * 업로드 위키백과 - https://ko.wikipedia.org/wiki/%EC%97%85%EB%A1%9C%EB%93%9C | ||
− | |||
* SW 개발이 좋은 사람, 〈[https://forest71.tistory.com/196 3. 파일 업로드 라이브러리: gu-upload 2019버전]〉, 《티스토리》, 2019-07-28 | * SW 개발이 좋은 사람, 〈[https://forest71.tistory.com/196 3. 파일 업로드 라이브러리: gu-upload 2019버전]〉, 《티스토리》, 2019-07-28 | ||
* Luuii , 〈[https://tar-cvzf-studybackup-tar-gz.tistory.com/54 백도어(Backdoor)]〉, 《티스토리》, 2017-11-27 | * Luuii , 〈[https://tar-cvzf-studybackup-tar-gz.tistory.com/54 백도어(Backdoor)]〉, 《티스토리》, 2017-11-27 | ||
106번째 줄: | 58번째 줄: | ||
==같이 보기== | ==같이 보기== | ||
− | |||
− | |||
− | |||
− | {{솔루션| | + | {{솔루션|토막글}} |