11. FileUpload & FileDownload
1) FileUpload
▣ FileUpload
- 공격 난이도에 비해 파급력은 큼.
- 자료실과 같은 사용자들의 업로드가 가능한 웹 애플리케이션을 이용.
- 서버 사이드 언어로 작성된 WebShell 업로드를 통한 서버 권한 탈취.
- 반드시 웹쉘만 올려야하는 것은 아님. 올린 파일이 무조건 웹 서버에 저장만 되면 됨.
- 업로드 되는 파일의 확장자 필터링이 되지 않을 시 쉽게 가능.
▣ 실습
1. 웹 서버에 웹 쉘 파일을 올림. (웹 쉘 파일은 구글링하면 많이 나옴)
2. 올라간 파일의 위치를 찾기. (올라간 파일에 마우스를 올리기만 해도 밑에 위치가 뜸.)
3. 해당 위치로 들어가서 웹 쉘을 실행시킴.
4. CD로 위치를 바꿔보려해도 계속 해당 위치에 있음.
☞ TCP를 이용하지만 연결지향적 성격은 버렸기 때문..
5. 현재 사용하고 있는 HTTP 80포트는 감시가 강하기 때문에 새로운 포트에 붙어야함.
☞ 리버스 텔넷 (NC사용)
6. NC 파일을 다시 업로드함.
7. 공격자의 컴퓨터에서 NC파일을 이용하여 8080포트로 붙길 기다림.
d
8. 웹 서버의 nc파일을 이용하여 붙어줌.
====> 대부분 이런 식으로 FileUpload 공격이 성공하면 리버스텔넷을 이용하여 새 포트에 붙음.
▣ 방어
1. 업로드 폴더의 스크립트 실행 권한을 제거
2. 화이트리스트 방식 허용
3. 파일이름을 난수화 하여 저장
4. 확장자를 강제로 변경시켜 저장 (cmd.xaspx)
5. Database에 저장. (실행할 수 없는 단지 하나의 파일임)
6. 웹서버와 물리적 분리 (파일서버 : 물리적 분리. 링크로 연결만 해주면서 실행은 불가)
▣ 웰쉘 실행가능 확장자
ASP : cer, cdx, asa
PHP : php3, html, htm
JSP : war
Attach_File = LCase(Attach_File) idx = Instr(Attach_File,".") If (idx=0) Then Response.Write "I can't understand you..." Response.End End if ext = Mid(Attach_File, idx+1) If((StrComp(ext, "jpg") <> 0) and (StrComp(ext, "bmp") <> 0) and (StrComp(ext, "png") <> 0) and (StrComp(ext, "jpeg") <> 0)) Then Response.Write "You can't upload this file!" Response.Ends End if
▣ apache 서버에서만 가능한 우회법.
- .htaccess 파일을 이용하여 읽을 수 없는 확장자명을 우회.
2) FileDownload
▣ FileDownload
- 다른 공격들이 하다하다 안될때 시도하는 경우가 많음.
- 방문자에게 허용된 파일외의 다운로드
- 웹 서버의 소스 및 기밀 문서 다운로드
- FileDownload 기능의 웹 애플리케이션에서 파일명 필터링을 못할 경우.
- OS부터 판별! (URL에 대소문자 섞어써서 오류나면 Linux)
- 파일 다운로드 기능을 가진 웹 어플리케이션에서 파일명이 제대로 검사되지 않는 경우
- Directory Traversal 등에 의해 다른 위치에 있는 파일도 다운로드 가능
- 부적절한 환경설정에 의해 Source code 파일이나, backup 파일등이 다운로드 가능
- 정상 url : http://127.0.0.1/download.php?path=/1.jpg
- 우회 url : http://127.0.0.1/download.php?path=../../../../../../../../etc/passwd
▣ 파일다운로드 로직
1. 절대경로 - 개발자의 부주의
2. 상대경로 - 애플리케이션의 취약점
윈도우의 경우 : ../../../../../boot.ini
..%2F..%2F..
..%5C..%5C
▣ 방어
1. 다운로드 경로 입력받을시에 서버에서 문자열 필터링을 함. (../ 문자열이 들어가면 차단)
2. 물리적으로 웹 소스가 존재하는 서버와 분리하여 격리.
i2sec 대구지점 23기 수료생.
'해킹&보안 > 웹 해킹&보안' 카테고리의 다른 글
[D+13] SQL Injection (0) | 2017.05.22 |
---|---|
[D+12] Session Management Vulnerabilities (0) | 2017.05.22 |
[D+10] CSRF (Cross Site Request Forgery) (0) | 2017.05.21 |
[D+9] XSS (Cross Site Scripting) (2) (0) | 2017.05.17 |
[D+8] XSS (Cross Site Scripting) (0) | 2017.05.15 |