개요
보안 사고 사례를 살펴보면, 공격자들은 관리되지 않는 페이지나 에디터 샘플 페이지와 같은 경로에서 취약점을 찾아내어 서버 내부로 침투하는 경우가 있다. 이러한 페이지들은 종종 담당자나 개발자가 인지하지 못해 문자열 필터링과 같은 보안 메커니즘 적용이 미약한 경우가 많다. 필자 또한, 웹 취약점 진단 시 이와 같은 케이스를 통해 파일 업로드, SQL 인젝션(SQLi) 등의 취약점을 익스플로잇하여 서버 내부까지 침투하는 경우가 있었다. 다만, 이처럼 불필요한 페이지들은 웹 페이지 내에서 직접 노출되지 않으므로, 디렉터리 및 파일 브루트 포스 공격을 통해 찾아야 한다. 이번 포스팅은 이와 같이 불필요한 페이지들(Sample Page 등)을 찾을 때 유용하게 활용할 수 있는 URL 브루트 포스 도구들을 소개하고자 한다.
URL 브루트 포스란?
웹 서버의 리소스 즉, URL 경로를 대상으로 임의의 문자열이 작성된 사전 파일을 이용해 디렉터리 및 파일 이름을 브루트 포스(무차별 대입 공격)하여 웹 서버나 웹 응용 프로그램에 숨겨진 디렉터리나 파일을 찾는 행위를 말한다. 이를 통해 웹 사이트에서 보안 설정이 적절하게 이루어지지 않은 경우에 숨겨진 정보(히든 파일)나 취약한 디렉터리에 접근할 수 있게 된다.
아래 [표 1]은 대표적인 URL 브루트 포스 도구이다.
도구 이름 | 설명 |
dirb | URL 브루트 포스 도구로 HTTP 요청 시 확장자 타입, 쿠키, 인증서 등의 커스텀 설정을 지원한다. |
gobuster | 전반적인 기능은 dirb와 유사하며, URL 외에 DNS, s3, tftp, vhost 브루트 포스 기능을 지원한다. |
DirBuster | OWASP 프로젝트 중 하나로 Windows, Unix/Linux 등 다양한 플랫폼을 지원한다. |
autorecon | URL 브르투 포스 기능뿐만 아니라 포트 스캔, 서브 도메인 검색, Nikto를 활용한 취약점 스캔 등의 기능을 통합적으로 제공한다. |
[표 1] URL 브루트 포스 도구
dirb
"dirb" 도구는 Kali Linux 디폴트 패키지로, 콘솔행 명령어를 통해서 실행 가능하며, 가장 많이 사용되는 명령어는 아래와 같다.[그림 1]은 명령어 실행 결과를 보여주고 있으며, HTTP 응답 코드가 200인 페이지를 대상으로 사용자에게 출력해 준다. 추가로 명령행의 두 번째 인자는 URL 브루트 포스 공격 수행 시 참조하는 사전 파일로 Kali Linux에서는 dirb 기본 디렉터리인 "/usr/share/dirb/wordlists" 경로에 사전 파일을 제공하고 있다.
// 사전 파일은 common.txt를 사용하며, "html" 확장자를 가진 파일을 탐색해 그 결과를 dirb_output.txt 파일로 저장한다.
dirb [URL 주소] /usr/share/dirb/wordlists/common.txt -X .html -w -o dirb_output.txt >/dev/null
"dirb" 도구에서 사용되는 옵션은 아래와 같다.
-a <에이전트_스트링> : 사용자 지정 USER_AGENT를 지정한다.
-b : 경로를 그대로 사용한다.
-c <쿠키_스트링> : HTTP 요청에 대한 쿠키를 설정한다.
-e <인증서> : 클라이언트 인증서 경로 지정
-f : NOT_FOUND(404) 페이지 패턴을 지정한다.
-H <헤더_스트링> : HTTP 요청에 사용자가 정의한 헤더 옵션을 추가한다.
-i : 대소문자를 구분하지 않는다.
-l : 페이지 발견 시 Location 헤더를 출력한다.
-N <nf_code> : 이 HTTP 코드가 포함된 응답을 무시한다.
-o <출력_파일> : 저장할 파일 이름을 지정한다.
-p <프록시[:포트]> : 프록시를 사용하나. (디폴트 포트 1080)
-P <프록시_사용자명:프록시_암호> : 프록시 사용자 인증 설정
-r : 재귀 검색을 허용하지 않는다.
-R : 재귀 검색을 허용한다.
-t : URL에 '/' 끝을 강제하지 않는다.
-u <사용자명:비밀번호> : 사용자 로그인 인증
-v : NOT_FOUND 페이지를 출력한다.
-w : 경고 메시지 출력 시에도 검색을 중지하지 않는다.
-X <확장자> / -x <exts_파일> : 특정 확장자를 가진 파일을 검색한다.
-z <밀리초> : 과도한 Flood를 유발하지 않도록 시간 지연을 추가한다.
gobuster
"gobuster" 또한, "dirb"와 같이 콘솔행 명령어로 실행할 수 있으며, URL 브루트 포스 외에 [그림 2]와 같이 DNS 하위 도메인 조회, AWS s3 버킷 등에 대한 스캔 기능을 제공한다.
사용 모드는 명령행의 첫 번째 인자에 지정해주며, URL 브루트 포스 기능을 사용하고자 하는 경우에는 "dir"를 명시해주면 된다. [그림 3]은 "gobuster" 실행 결과를 보여주고 있으며, 사용자가 설정한 HTTP 응답 코드를 가진 페이지를 출력해준다.
// URL 브루트 포스 모드(dir)를 사용하고 사전 파일은 common.txt이며, "html" 확장자를 가진 파일만을 탐색한다. 명령어 실행 결과는 gobuster_output.txt 파일로 저장하며, 에러가 발생하여도 도구를 중지시키지 않는다.
gobuster dir -u [URL 주소] -w /usr/share/dirb/wordlists/common.txt -x html -o gobuster_output.txt --no-error
"gobuster" 도구에서 사용되는 옵션은 아래와 같다.
--debug : 디버그 출력 사용
--delay duration : 스레드 간 지연 시간 설정 (예: 1500ms)
-h, --help : 도구 설명
--no-color : 색상 출력을 사용하지 않음
--no-error : 오류를 표시하지 않음
-z, --no-progress : 진행 상황을 표시하지 않음
-o, --output string : 명령어 실행 결과를 저장할 파일 지정
-p, --pattern string : 패턴이 포함된 파일 지정
-q, --quiet : 배너를 출력하지 않음
-t, --threads int : 동시 스레드 수 (기본값 10)
-v, --verbose : 자세한 출력(오류)
-w, --wordlist string : 사전 파일 지정
--wordlist-offset int : 사전 파일의 지정된 위치에서 다시 시작(기본값은 0)
DirBuster
"DirBuster"는 OWASP 프로젝트 중 하나로 Windows, Unix/Linux 등의 다양한 OS 플랫폼을 지원한다. 그리고 "dirb", "gobuster"와 달리 콘솔행 명령어가 아닌 GUI를 제공해주기 때문에 편의성이 좋고 사용 방법 또한 쉬운 편이다.
[그림 4]는 DirBuster를 실행하면 사용자에게 출력되는 화면으로 ①에서는 타겟 URL를 지정해주고 ②는 디렉터리 및 파일 탐색 속도 즉, 스레드를 설정할 수 있다. ③에서는 사전 파일을 선택해주며, ④에서는 파일 확장자와 시작 위치 등을 지정할 수 있다.
[그림 5]는 "DirBuster" 수행 결과로 사용자가 결과를 한 눈에 파악할 수 있도록 표 형식으로 출력해준다.
추가로 더 다양한 사전 파일을 사용하고자 하는 경우 아래의 링크에서 다운로드 받아 사용하면 된다.
https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content
'웹(WEB)' 카테고리의 다른 글
버그 바운터들의 공격 도구 nuclei(뉴클리어) (0) | 2023.07.06 |
---|---|
Apache-Tomcat Bruteforce 도구 추천 (0) | 2023.05.26 |