웹/웹 보안

Arachni를 이용한 파일 다운로드 취약점 스캔 및 검증

비니화이팅 2018. 3. 25. 22:09

이번에도 이어서 Arachni를 이용하여 스캐닝을 하고 그에 대한 검증까지 해보는 시간을 갖도록 하겠습니다.


1. 파일 다운로드(Path Traversal)취약점의 개념

일단 스캐닝을 하기 앞서 간단하게 파일 다운로드 취약점의 개념을 이해하고 가도록 하겠습니다.


먼저 게시판에 첨부된 파일을 사용자에게 제공하는 방식에는 정적방식, 동적방식이 있습니다.

정적방식은 디렉터리에 파일 링크를 걸어 사용자에게 제공하기 때문에 파라미터 변조 가능성이 없는 안전한 구조인 반면, 동적 방식은 파라미터 값 조작(file=../../../../../../../../etc/passwd) 등의 취약점으로 시스템 파일 등의 접근 시도가 가능합니다.


즉, 파일 다운로드 취약점은 상대경로나 절대경로 문자를 이용해 경로를 조작하여 파일 다운로드가 가능하게되는 취약점을 말합니다.


파일 다운로드 취약점을 이용한 공격은 상대경로나 정대경로 문자를 이용하여 이루어지므로 ..\와 ../등 의 문자를 제한함으로써 대응할 수 있겠습니다.


2. Tip

1) 파일 다운로드 취약점은 스캔시 거의 오탐이 없습니다.

2) 보통 검증시 다섯개에서 일곱개의 디렉토리까지 올라갑니다. (file=../../../../../../../../etc/passwd)

3) 윈도우는 보통 ../../../../../../../windows/system32/drivers/etc/hosts를 주로 사용합니다.

4) 리눅스는 보통 ../../../../../../../etc/hosts를 주로 사용합니다.

5) 육안으로도 취약점 식별이 어느정도 가능합니다.

   예를들면, /hello.aspx?name=1은 파라미터에 파일명처럼 보이는 값이 없기 때문에 취약점 가능성이 낮다고 볼  수 있습니다. /hello.aspx?file=test.txt는 파라미터에 파일명처럼 보이는 값이 있기 때문에 취약점 가능성이 높다고 볼 수 있습니다.

6) 다음과 같이 burp suite에서 대상 사이트를 클릭한 후 'Spider this host'를 눌러 수집을 할 수 있습니다.



3. Arachni를 이용한 스캐닝

저는 http://demo.testfire.net을 대상으로 진행하였습니다. 

1개의 페이지에 대하여 Path Traversal 취약점이 발견되었습니다. 


4. 검증

스캐닝 결과 발견한 1개의 페이지에 대해서 정탐인지 검증해보도록 하겠습니다.


4-1.

http://demo.testfire.net/default.aspx 페이지에 대한 스캔 정보입니다.


HTTP Request에 밑줄 친 패턴을 넣었더니 아래와 같이 파일의 내용이 그대로 보입니다.

따라서 정탐임을 알 수 있습니다.


5. 실습

이번에는 4.1에 이어서 다른 파일도 내용이 보이는지 실습을 진행해보도록 하겠습니다.


5-1. hosts파일

우선 아래와 같이 파라미터에 값을 넣어봅니다. 

결과를 보니 확장자를 txt나 htm으로 해야한다고 에러 메시지가 나옵니다.


그래서 확장자를 .txt로 해봤습니다.

그러나 500에러코드가 보입니다. 파일을 찾을 수 없다고 나옵니다.


따라서 널 바이트 문자열(%00)을 삽입하여 txt확장자를 숨겨보았습니다.

파일의 내용이 잘 보입니다.


5-2. account.aspx

2. Tip의 6)에서 수집한 파일중에서 account.aspx에 대해서 실습을 진행해보겠습니다.


우선 아래와 같이 파라미터에 값을 넣어봅니다. 

결과를 500 에러 코드가 보입니다. 

summary를 보니 현재 경로가 C:\bank\account.aspx로 되어있는 것을 눈치챌 수 있습니다.


경로가 잘못된 거 같으니 한 단계 하위로 가봅니다.

이번에는 현재 경로가 C:\downloads\bank\account.aspx로 되어있는 것을 눈치챌 수 있습니다.


더 하위로 가봅니다.

마찬가지로 500에러 코드가 보입니다.


한 단계 더 하위로 가니 소스코드가 보입니다.

CodeFile의 이름이 보입니다.


account.aspx.cs를 넣어보니 실제 소스코드가 잘 보입니다.



본 글은 '웹 모의해킹 및 시큐어코딩 진단가이드' 서적을 참고하여 작성하였습니다.