ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 해커 팩토리(Hacker Factory) - 웹 워게임 초급해킹 문제-4 풀이 과정
    워게임(Wargame)/해커 팩토리(Hacker Factory) 2020. 1. 24. 18:29

     

    해커 팩토리(Hacker Factory) - 웹 워게임 초급해킹 문제-4 풀이 과정

     

    워게임 사이트인 해커 팩토리의 초급해킹 문제-4에 대해 풀어보고자 한다.

    해커 팩토리의 정식 사이트는 https://hackerfactory.co.kr/ 이다.

     

    [그림 1] 풀이 대상인 초급해킹 문제-4

     

    풀이 과정은 다음과 같다.

     

    1. 문제유형을 확인한다.

    먼저 문제풀이에 앞서 문제를 확인한다.

    좌측의 [웹워게임] - [초급해킹] - [문제-4] 클릭하여 문제를 확인하면, 특정 경로의 파일(/temp/hacktory.txt)을 다운로드 하는 문제 유형임을 알 수 있다.

     

    [그림 2] 초급해킹 문제-4 확인

     

    하단의 [문제접속]을 클릭하면 아래와 같은 홈페이지를 확인할 수 있다.

     

    [그림 3] 문제-4 접속 화면

     

    2. 파일 다운로드가 가능한 부분(페이지)를 찾는다.

    위 [그림 3]에서 우측 상단의 [Board]를 클릭하면 아래와 같은 게시판을 확인할 수 있다.

     

    [그림 4] [Board] 메뉴 클릭 시 출력되는 게시판 페이지

     

    위 [그림 4]에서 3번 게시글을 클릭하면, 해당 게시글에 첨부된 파일을 확인할 수 있다.

     

    [그림 5] 3번 게시글 확인

     

    [다운로드] 버튼을 클릭하면 첨부된 파일이 정상적으로 다운로드 됨을 알 수 있다.

     

    [그림 6] 3번 게시글에 첨부된 파일 다운로드

     

    첨부파일 클릭 시 파일 다운로드를 위한 경로(URL)을 확인한다.

    [다운로드] 버튼에 마우스 커서를 위치시키면, 아래 [그림 7]과 같이 좌측 하단에 다운로드 경로(URL)을 확인할 수 있다.

    ( 다운로드 경로(URL)을 확인하는 이유 : 게시판, 공지사항 및 자료실 등에서 cgi, jsp, php 등의 프로그램을 이용하여 파일을 다운로드 받는 페이지 존재 시, URL 내 파라미터 조작을 통한 특정 파일을 다운로드 받을 수 있는 가능성이 존재할 수 있기 때문이다. 즉, 파라미터 값을  체크하지 않는 경우 임의의 문자(../.. 등) 나 주요 파일명의 입력을 통해 웹 서버의 홈 디렉터리 외에 존재하는 파일을 열람하거나 다운받을 수 있다.)

     

    [그림 7] 다운로드 경로(URL) 확인

     

    [다운로드]를 마우스 오른쪽 버튼 클릭 후, '링크 주소 복사(E)' 클릭을 통해 다운로드 경로(URL)을 복사한다.

     

    [그림 8] 다운로드 경로(URL) 복사

     

    복사된 다운로드 경로(URL)는 아래와 같다.

    https://hackerfactory.co.kr/wargame/war4/HackDownAct.php?FileName=Text.txt

     

    3. 파라미터 조작을 통한 특정 파일 다운로드를 시도한다.

    이제부터는 아래 경로에서 FileName 파라미터 값 조작을 통해 다른 파일을 다운로드 받을 수 있는지 확인 할 것이다.

     

    1) 상위경로(../)를 이용한 다운로드 시도

    상위 경로를 나타내는 ../ 가 포함된 아래 경로를 이용하여 다운로드를 시도해본다.

    https://hackerfactory.co.kr/wargame/war4/HackDownAct.php?FileName=../Text.txt

     

    FileName 파라미터 값에 ../ 를 추가하여 다운로드한 결과, 아래 [그림 9]와 같이 Text.txt 파일이 정상적으로 다운로드 된다.

    따라서 ../ 는 필터링되고 있음을 알 수 있다.

     

    [그림 9] ../ 를 이용하여 다운로드 시도

     

    2) ../ 패턴이 아닌, 다른 패턴을 이용하여 우회를 시도한다.

    ..//, ..../, ..//, .././, .//, ....\\, ....\/, ..../\, ./\, .\/, .\\ 등을 적용하여 파일이 다운로드 되는지 확인한다.

     

    아래 [그림 10]과 같이 ..../ 입력 시에는 해당 파일이 존재하지 않는다는 팝업 메시지를 확인할 수 있었으며, 상위 경로로 이동할 수 있는, 즉 우회가 가능한 패턴이 존재하는지 확인해본다.

     

    [그림 10] ..../ 패턴 사용 시 출력 화면

     

    아래와 같이 입력 시, 경로가 우회되어 파일이 정상적으로 다운로드 됨을 확인할 수 있다.

    https://hackerfactory.co.kr/wargame/war4/HackDownAct.php?FileName=.../...//.../...//temp/hacktory.txt 

    (또는 https://hackerfactory.co.kr/wargame/war4/HackDownAct.php?FileName=.../.../..//.../.../..//temp/hacktory.txt 를 이용해서도 우회가 가능하다.)

     

    [그림 11] .../...//.../...// 패턴 입력 시 정상적으로 다운로드되는 파일 확인

     

    4. 다운로드된 파일을 확인한다.

    다운로드된 파일을 실행시켜보면, 아래와 같이 인증키를 획득할 수 있다.

     

    [그림 12] 다운로드된 파일 내용 확인

     

    5. 획득한 인증키를 통해 인증을 시도한다.

    좌측의 [인증] 메뉴를 클릭 후, 인증키 입력을 통해 인증을 시도한다.

    인증이 정상적으로 완료되면 아래와 같은 화면을 확인할 수 있다.

     

    [그림 13] 초급문제-4 인증 완료 화면


    아래 내용은 본 문제를 풀기 위해 사용했던 방법들에 대해 정리한 부분이다.

     

    1. 웹 서버 종류 확인 방법

    동적 방식으로 파일 다운로드 가능 시, 파라미터 값 조작을 통해 웹 서버의 종류(윈도우 또는 리눅스)를 확인할 수 있다.

    윈도우는 대소문자를 구분하지 않지만, 리눅스는 대소문자를 구분하므로 이것을 통해 웹 서버가 윈도우 기반인지 리눅스 기반인지 알 수 있다.

     

    아래 [그림 14]과 같이 파라미터 값이 text.txt 일 경우에는 파일이 다운로드 되지 않으므로, 대소문자를 구분하고 있다. 따라서 웹 서버가 리눅스 기반임을 알 수 있다.

     

    [그림 14] 웹 서버 종류 확인

     

    2. 상위경로(../) 인코딩을 이용한 다운로드 시도

    상위경로를 나타내는 ../만 필터링 되게 설정되어 있을 수도 있으므로, 인코딩(URL, 더블URL, 유니코드, Base64 등)을 통해 우회할 수 있는지 여부를 확인한다.

    ① URL 인코딩을 이용한 다운로드 시도

    . → %2e, / %2f, \ %5c

    위와 같이 ../ 를 URL 인코딩 후, 다운로드를 시도한다.

    https://hackerfactory.co.kr/wargame/war4/HackDownAct.php?FileName=%2e%2e%2fText.txt

     

    파일이 정상적으로 다운로드 됨에 따라 URL 인코딩 또한 필터링 되고 있음을 알 수 있다.

    [그림 15] URL 인코딩 후 다운로드 시도

     

    ② 더블URL 인코딩을 이용한 다운로드 시도

    .  %252e, /  %252f, \  %255c

    위와 같이 ../ 를 더블 URL 인코딩 후, 다운로드를 시도한다.

    https://hackerfactory.co.kr/wargame/war4/HackDownAct.php?FileName=%252e%252e%252fText.txt

     

    더블URL 인코딩 시 해당 파일이 존재하지 않는다는 메시지가 출력되며, 정상적으로 파일이 다운로드 되지 않음을 확인하였다.

    즉, 일반적인 URL 인코딩 시에는 정상적으로 다운로드 되지만 더블URL 인코딩 시에는 정상적으로 다운로드 되지 않음에 따라, URL 인코딩은 필터링하고 있지만 더블URL 인코딩은 필터링하지 않고 파일명으로 그대로 인식하고 있음을 알 수 있다.

     

    [그림 16] 더블 URL 인코딩 후 다운로드 시도

     

    ③ 유니코드 인코딩을 이용한 다운로드 시도

    (※ 유니코드란 글자와 코드가 1:1매핑되어 있는 ‘코드표' → 국제표준 문자표)

    .  %u002e, /  %u2215, \  %u2216

    위와 같이 ../ 를 유니코드 인코딩 후, 다운로드를 시도한다.

    https://hackerfactory.co.kr/wargame/war4/HackDownAct.php?FileName=%u002e%u002e%u2215Text.txt

     

    유니코드 인코딩 또한 더블URL 인코딩과 동일하게 해당 파일이 존재하지 않는다는 메시지가 출력되며, 정상적으로 파일이 다운로드 되지 않음을 확인하였다. 따라서 유니코드 인코딩의 별도의 필터링 없이, 조작한 파라미터를 그대로 파일명으로 인식하고 있음을 알 수 있다.

     

    [그림 17] 유니코드 인코딩 후 다운로드 시도

     

    ④ Base64 인코딩을 이용한 다운로드 시도

    ../ 를 Base64 인코딩 후, 다운로드를 시도한다.

    https://hackerfactory.co.kr/wargame/war4/HackDownAct.php?FileName=Li4vText.txt

     

    Base64 인코딩 또한 해당 파일이 존재하지 않아, 정상적으로 파일을 다운로드 받을 수 없었다.

     

    [그림 18] Base64 인코딩 후 다운로드 시도

     

    3. 개행문자(%0a)를 이용하여 다운로드를 시도한다.

    특정 확장자만 다운로드 가능하도록 필터링되어 있을 경우 개행문자(%0a)를 이용한 우회가 가능하다.

    정상적인 파일에 개행문자를 나타내는 %0a를 삽입하여, 파일 다운로드를 시도한다.

    개행문자인 %0a는 유닉스(또는 리눅스)에서 사용 가능하며, 윈도우에서는 사용이 불가능하다.

     

    아래 예시는 .txt 확장자가 필터링 되어 있을 때, 개행문자(%0a)를 이용하여 우회가 가능하다.

    ex) https://hackerfactory.co.kr/wargame/war4/HackDownAct.php?FileName=../../temp/hacktory.txt%0a.jpg

     

    4. Null 바이트를 이용하여 다운로드를 시도한다.

    정상적인 파일에 Null 바이트를 나타내는 %00, 0x00을 삽입하여, 파일 다운로드를 시도한다.

    C/C++에서 Null 바이트 문자열(%00, 0x00)은 문자열의 끝을 의미하기 때문에, 특정 확장자를 숨기기 위해 사용될 수 있다. 

    해당 취약점은 C 루틴을 처리하거나, 내부의 C API를 호출하는 함수를 사용하는 경우에 발생 가능하며, Perl, PHP, Java, C/C++ 환경이 해당된다.


    댓글

Designed by Tistory.