파일업로드 편집하기

이동: 둘러보기, 검색

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 아이디(ID)으로 기록되고, 다른 장점도 있습니다.

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
1번째 줄: 1번째 줄:
'''파일업로드'''<!--파일 업로드-->(File Upload)란 파일 데이터를 하류 노드에서 상류 노드로 전송하는 것을 말한다. 전송할 때는 파일 전송 프로토콜(FTP)을 사용한다.
+
'''파일업로드'''란 파일 데이터를 하류 노드에서 상류 노드로 전송하는 것을 말한다. 전송할 때는 파일 전송 프로토콜(FTP)을 사용한다.
 
 
 
==구조==
 
==구조==
[[파일:파일업로드구조.PNG|800픽셀|섬네일|가운데|'''파일업로드 흐름''']]
+
[[파일:파일업로드구조.PNG|1000픽셀|섬네일|가운데|'''파일업로드 구조''']]
  
파일 업로드는 위와 같은 과정으로 이루어진다. 일단 제일 처음에 파일업로드를 구성하기 위한 화면이 제공되고 해당 페이지에서 업로드 기능을 수행한다면 업로드 서비스가 진행이 되며 데이터베이스와 통신을 통한다. 데이터페이스는 리스트를 출력하는 쿼리에 대한 반환을 해주고 리스트에 대한 출력을 지원한다. 해당 기능은 보통 서버 내부에서 관리자의 입장에서 사용하는 기능이므로 사용자 페이지에선 전체 파일 목록에 대한 출력을 구현하지 않는다. 항목이 추가 되었다면 다시 한번 업로드 서비스를 거쳐 파일 전송을 완료한다. 만약 이미지 파일 이라면 해당 항목에 이미지 파일을 미리보기 화면으로 출력하는 기능을 지원하게 구현할 수도 있다.<ref> 털 업, 〈[https://kutar37.tistory.com/entry/%EC%9B%B9%EC%97%90%EC%84%9C-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0-1 웹에서 파일 업로드 구현하기 -1]〉, 《티스토리》, 2017-11-24</ref>
+
==라이브러리==
  
==라이브러리==
 
 
===com.oreilly.servlet===
 
===com.oreilly.servlet===
 
[[파일:Cos.jar사이트.PNG|700픽셀|섬네일|가운데|'''com.oreilly.servlet 다운로드 사이트]]
 
[[파일:Cos.jar사이트.PNG|700픽셀|섬네일|가운데|'''com.oreilly.servlet 다운로드 사이트]]
87번째 줄: 85번째 줄:
  
 
==취약점==
 
==취약점==
* '''피해 범위''' : 웹사이트에 악성 스크립트를 이용하여 해당 서버에서 시스템 쉘 명령을 실행하여 시스템의 구조를 파악할 수 있다. [[웹셸]](Web Shell)을 통해 공격을 진행하며 백도어(Backdoor)를 업로드해 사용자 인증없이 서버나 다른 계정에 접속 가능하게 만들어 치명적인 결과를 만들어낼 수 있다.<ref>Luuii , 〈[https://tar-cvzf-studybackup-tar-gz.tistory.com/54 백도어(Backdoor)]〉, 《티스토리》, 2017-11-27</ref>
+
* '''피해 범위''' : 웹사이트에 악성 스크립트를 이용하여 해당 서버에서 시스템 쉘 명령을 실행하여 시스템의 구조를 파악할 수 있다. 웹쉘(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>
* '''대응방법''' : 시큐어 코딩을 하고 취약점 패치를 진행해야한다. 대표적으로 악성 스크립트에 포함될 수 있는 키워드나 명령어에 대한 문장을 필터링할 수 있게 만들고 업로드 파일의 확장자 및 실행권한을 제한하는 방법이 있다. 항상 검증된 웹셀만을 올려야 하며 웹셸 취약점 점검 이후 후속 조치를 통해 업로드 했던 웹셀은 반드시 삭제 해야한다. 업로드 기능이 불필요할 경우 개발단계에서 완전히 제거해야하며 소스코드단에서 편의흫 위해 주석처리하는 등 지양해야한다. 파일 업로드 기능이 필요한 경우에는 서버측에서 파일명을 검사해야한다. 업로드되어 있는 저장되는 파일의 타입, 크기, 개수, 실행 권한을 제한 하고 업로드 되어 저장되는 파일은 외부에서 식별 되지 않아야한다. 프레임워크의 종류를 고려하여 목적에 부합하지 않는 파일은 필터링한다.
+
* '''대응방법''' : 시큐어 코딩을 하고 취약점 패치를 진행해야한다. 대표적으로 악성 스크립트에 포함될 수 있는 키워드나 명령어에 대한 문장을 필터링할 수 있게 만들고 업로드 파일의 확장자 및 실행권한을 제한하는 방법이 있다. 항상 검증된 웹셀만을 올려야 하며 웹쉘 취약점 점검 이후 후속 조치를 통해 업로드 했던 웹셀은 반드시 삭제 해야한다. 업로드 기능이 불필요할 경우 개발단계에서 완전히 제거해야하며 소스코드단에서 편의흫 위해 주석처리하는 등 지양해야한다. 파일 업로드 기능이 필요한 경우에는 서버측에서 파일명을 검사해야한다. 업로드되어 있는 저장되는 파일의 타입, 크기, 개수, 실행 권한을 제한 하고 업로드 되어 저장되는 파일은 외부에서 식별 되지 않아야한다. 프레임워크의 종류를 고려하여 목적에 부합하지 않는 파일은 필터링한다.
  
 
{{각주}}
 
{{각주}}
109번째 줄: 107번째 줄:
 
* [[FTP]]
 
* [[FTP]]
 
* [[업로드]]
 
* [[업로드]]
 
+
{{솔루션|토막글}}
{{솔루션|검토 필요}}
 

해시넷에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 사항은 해시넷:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 | 편집 도움말 (새 창에서 열림)