본문 바로가기
Web/Webhacking

파일 다운로드 공격 및 우회 기법

by jjudy 2022. 4. 13.
  • 윈도우는 대소문자를 구분하지 않지만,  리눅스는 대소문자를 구분한다. → 서버가 윈도우 기반인지 리눅스 기반인지 알 수 있다. → 대문자를 바꿔도 그대로 다운로드 받아진다면 윈도우 기반
  • 또한, jsp나 php일 시 리눅스일 가능성이 높음
  • boot.ini 파일 존재시 윈도우 계열(버전에따라 다름), passwd 파일 존재시 Linux 계열
  • 상위 폴더 이동 명령어는, 리눅스에서는 ../ 만을 사용하고, 윈도우에서는 ../ 또는 ..₩를 사용한다.

 

 

파일 다운로드 공격 기법

①  멀티 파라미터 변조

예시 URL)   www. example.com/view.php?file=mango.jpg&file_path=/test

 

* /etc/passwd 파일에 접근하기

 

  view.php?file=passwd&file_path=../../../../../../../etc

  view.php?file=../../../../../../etc/passwd&file_path=/test

  view.php?file=mango.jpg&file_path=../../../../../../../etc/passwd

 

 

②  웹 로그를 통한 관리자 권한 획득

*  시스템 파일(passwd, .profile, .cshrc 등)의 접근을 통해서 웹 로그 파일의 위치를 추측할 수 있다.

계정과 암호가 GET 메소드를 통해 전송하는 경우, 입력된 모든 정보가 웹 로그에 남게된다.

*  웹 로그에는 접속한 모든 디렉토리 및 페이지 정보도 확인할 수 있으므로 디렉토리 전체를 보는 것과 동일한 공격효과를 가질 수 있다.

 

 

 

파일 다운로드 우회 기법

 

①  NULL 바이트 인젝션

*   C언어에서 문자열의 끝은 널(%00) 문자로 나타낸다.

 

*   특정 확장자를 숨기는데에 사용할 수 있다

 

예)  www.example.com/view.php?file=123.jpg

      www.example.com/view.php?file=../../../../../../../etc/passwd%00.jpg 널바이트와 .jpg 삽입 시 우회가 가능하다. 

 

 

②  변조한 파일 경로에 인코딩 적용

 

 

 

③  경로 문자 필터링 우회

*  먼저 파일이름 중간에 경로 문자를 삽입 요청하여 응답을 확인한다.

   예)   test.jpg → te/st.jpg

 

*   / 전부 필터링 시,

  path = ..₩..₩..₩..₩..₩..₩..₩..₩test.jpg

 

*   ../ 필터링 시(/ 와 ./ 는 필터링 x),

  path=....//....//....//....//....//....//....//test.jpg               ../가 필터되면서 ....// → ../

 

*  ../는 가능하나, ../../ 부터 사용안될 시,

  path=.././.././.././.././.././.././.././test.jpg                     ./는 아무 의미 없는 경로로 .././../ → ../../로 바뀜

 

 

 

파일 다운로드 취약점 대응 방안

 

①   다운로드 파일 이름을 데이터베이스에 저장하고 다운로드 수행 시,  요청 파일 이름과 비교하여 적절한지 확인해 사용자가 조작할 수 있는 변수를 제거한다.

 

②   파일을 다운받을 수 있는 디렉터리를 특정 디렉터리로 제한한다.

 

③   다운로드 경로 정보를 자바스크립트나 js 소스에서 확인할 수 없게 제한한다.

 

④   PHP 사용 시, php.ini에서 magic_quotes_gpc를 On으로 설정해  .₩./  와 같은 문자 입력 시 치환되도록 설정한다.

 

⑤   다운로드 시 사용되는 파라미터 값 대상으로 아래 특수 문자를 필터링하도록 웹 방화벽 룰셋 적용한다.

 

댓글