WEB2 study 6주차

File 취약점 문서화 및 대응방안 정리

File Vulnerability: 파일로 인해 웹 어플리케이션에 명령 실행하는 취약점

1. File Upload Vulnerability

파일을 웹서비스에 업로드하는 과정에서 발생하는 취약점

  • 파일 시스템 특정 경로에 원하는 파일 업로드
  • 악성 확장자를 갖는 파일 업로드

조건: 이용자가 파일 이름을 정할 수 있을 때 발생 웹 쉘(웹을 통해 시스템 명령 가능) 파일 업로드 후 시스템 명령 실행 1) Path Traversal: 원하는 디렉토리에 파일을 업로드할 수 있을 때 발생하는 취약점 2) 악성 파일 업로드: 악성 파일인지 제대로 검사하지 않을 때 발생하는 취약점

개발 언어에 따른 공격 가능 확장자 정리

환경 공격 가능 확장자
ASP asp,aspx,htm,html,asa,cer,cdx
PHP phtml,html,htm,php,php3,php4,php5,inc
JAVA, JSP jsp,jspx,jsw,jsv,jspf,htm,htm,war

파일 확장자 제한 우회 1) 확장자 검사를 우회해 파일 업로드 -> Burp suit 사용하여 content-type 변조 2) NULL byte 문자 사용 -> OS에서 파일 %00까지만 읽는 특징 이용

대응방안

  1. 화이트리스트 방식 필터: 안전한 파일 확장자만 허용
  2. 파일명 길이와 크기 제한
  3. 파일 Magic Number 검사
  4. 파일 Content-Type 헤더값 확인

2. File Download Vulnerability

웹서비스에 있는 파일을 다운로드하는 과정에서 발생하는 취약점

조건: 이용자가 파일 이름을 정할 수 있을 때 발생 파일의 경로 및 파일명을 파라미터로 받음-> 임의의 위치에 있는 파일 접근 - Path Traversal: 파일 이름을 직접 입력 받아 원하는 디렉토리에 있는 파일 다운로드가 가능할 때 발생하는 취약점 ../ 같은 구문으로 상위 디렉토리 접근 -> etc/passwd, etc/shadow 등 시스템 파일 접근

대응방안

  1. 파일 정보값 암호처리
  2. 특정 입력 값 제한: ../ 같은 구문 필터링
  3. 파일 확장자 제한: 위험한 파일을 다운받을 수 없게 특정 확장자들만 허용

File upload – MIME type writeup

문제 접근하는 법을 모르겠어서 라이트업을 참고했다

위와 같이 웹쉘을 만들어준다. 저장할 때 확장자를 php로 설정한다.

이후 upload한다. 이때 burp suite 프록시 설정을 하여 전송 직전 burp suite를 경유하게 한다.

중간에 Content-Type을 확인한다. application/octet-stream으로 설정되어 있다.

이것을 image/png로 수정하면

파일이 업로드 가능하다.

업로드된 webshell을 클릭한다.

?cmd=필요한 명령 을 입력하여 시스템 명령을 실행할 수 있다.

?cmd=id를 입력하였을 때

?cmd=ls -al /challenge/web-serveur/ch21/ 위 경로에 .passwd 파일이 존재하는 것을 확인할 수 있다

?cmd=cat /challenge/web-serveur/ch21/.passwd cat 명령어로 flag값을 읽어준다

image-storage writeup

위 문제를 참고해서 똑같은 파일 넣었는데 그냥 바로 stored in되었다

?cmd=id 작동이 되는지 확인해봤는데 아주 잘된다.

flag.txt를 찾으러 cd ../../;ls를 이용해서 여기저기 찾으러 다닌다 결론적으로 flag.txt파일은 상대경로로 ../../../../에 존재했다.

?cmd=cd ../../../../;cat flag.txt flag.txt를 cat명령어를 사용해서 읽어준다

[webhacking.kr] 43번 문제 writeup

또 웹쉘 파일 그대로 넣어줬다 이번엔 wrong이라고 뜨길래 1번 문제처럼 burp suite를 거치도록 설정했다

아까와 같이 content-type application/octet-stream을

image/png로 수정한다

Done!이 뜨면서 파일이 업로드된다

이후 ?cmd=cat /flag 를 입력하면 flag값이 나온다 다만 이 flag를 어디에 입력해야되는지 몰라서 라이트업을 참고했다…

그냥 webhacking.kr의 auth 카테고리에 입력하면 된다.