프론트엔드 소스 코드 분석
CTF 웹 문제 해결 시 가장 먼저 수행해야 할 작업은 페이지 소스 코드를 확인하는 것이다. 출제자는 종종 HTML 주석 형태로 힌트를 숨겨둔다.
때로는 자바스크립트를 통해 마우스 우클릭이나 개발자 도구 접근을 차단하는 경우가 있다. 이는 다음과 같은 방식으로 구현될 수 있다.
document.addEventListener('contextmenu', e => e.preventDefault());
document.addEventListener('selectstart', e => e.preventDefault());
window.addEventListener('keydown', e => { if(e.key === 'F12') e.preventDefault(); });
하지만 프론트엔드 단의 차단은 우회가 매우 쉽다. Ctrl+U 단축키, URL에 view-source: 접두어 추가, Burp Suite 등을 이용한 패킷 캡처, 브라우저 개발자 도구 강제 실행, 또는 웹페이지 로컬 저장 등으로 소스 코드를 확인할 수 있다.
또한, 소스 코드 내에 하드코딩된 인증 정보를 발견할 수 있다. 프론트엔드에서 암호화 로직을 수행하여 전송하는 경우, 소스에 노출된 값을 암호화된 형태 그대로 Burp Suite로 패킷을 변조하여 전송하면 인증을 우회할 수 있다. 자바스크립트 내에 유니코드 인코딩된 값이 존재한다면 브라우저 콘솔에서 디코딩하여 숨겨진 엔드포인트를 찾아낼 수 있다.
네트워크 패킷 및 헤더 분석
소스 코드에서 단서를 찾지 못했다면 통신 과정을 분석해야 한다. Burp Suite나 브라우저 네트워크 탭을 활용해 응답 헤더와 쿠키 값을 확인하는 습관이 중요하다. 종종 Set-Cookie 헤더나 요청 쿠키 값 내에 민감 정보가 포함된 경우가 존재한다.
디렉토리 스캐닝 및 민감 파일 노출
정보 수집 단계에서 디렉토리 스캐닝은 필수적이다. dirsearch는 대표적인 도구이며, 기본 실행 방법은 다음과 같다.
dirsearch -u http://target-domain.com -e php,html,txt
robots.txt
robots.txt는 검색 엔진 크롤러의 접근을 제어하는 파일이지만, 공격자에게 숨겨진 디렉토리 경로를 알려주는 지표가 된다.
소스 코드 및 백업 파일 유출
서버 측 소스 코드가 유출되면 화이트박스 테스트가 가능해져 취약점 분석이 매우 쉬워진다.
- PHP 소스 노출 (.phps): PHP 설정에 따라
.phps확장자를 통해 하이라이트된 소스 코드가 제공될 수 있다. 스캐너 기본 사전에 포함되지 않은 경우가 많으므로 수동 확인이 필요하다. - 압축 백업 파일 (.zip, .tar.gz):
www.zip등의 백업 파일이 노출될 수 있다. 다운로드한 압축 파일 내의 데이터뿐만 아니라, 해당 파일 구조를 통해 서버의 실제 경로를 유추하여 접근하는 것이 중요하다. - Git 유출 (.git): 버전 관리 시스템 설정 오류로 인해
.git디렉토리가 노출될 수 있다. 단순 접근 외에도git-dumper와 같은 도구를 사용하여 전체 리포지토리를 복구할 수 있다.
python3 git_dumper.py http://target-domain.com/.git ./repo_output
복구된 디렉토리에서 커밋 기록을 확인하여 민감 정보를 탐색한다.
cd repo_output
git log --all
git diff HEAD~1 HEAD
.svn 폴더가 노출된다.데이터베이스 백업 유출
SQL 덤프 파일이나 Access 데이터베이스 파일(.mdb)이 웹 루트에 존재할 수 있다. 하위 디렉토리까지 탐색하기 위해 재귀적 스캐닝 옵션을 적용해야 한다.
dirsearch -u http://target-domain.com --recursive
에디터 임시 캐시 파일 유출
Vim과 같은 텍스트 에디터는 비정상 종료 시 스왑 파일을 생성한다. 예를 들어 index.php의 경우 .index.php.swp 형태로 저장되며, 이를 다운로드하여 원본 내용을 복구할 수 있다. 일반적으로 스캐너는 속도 향상을 위해 임시 파일을 제외하므로 직관적인 추측이 필요하다.
서버 진단 스크립트(Probe) 유출
PHP 환경 설정 확인용으로 사용된 tz.php나 phpinfo.php 같은 프로브 파일이 삭제되지 않고 남아있을 수 있다. 이를 통해 서버의 상세 설정 정보 및 민감 데이터를 획득할 수 있다.
서드파티 에디터 기본 설정
웹 에디터의 기본 설정이 변경되지 않은 채 배포되면, 파일 브라우저 기능을 통해 서버의 루트 디렉토리까지 순회할 수 있는 취약점이 발생한다.
사회공학적 정보 수집
대상이 되는 개인이나 조직의 공개된 정보를 활용하는 방식이다.
- 민감 정보 노출: 웹 페이지에 공개된 전화번호나 생년월일은 관리자 페이지의 기본 비밀번호(Weak Credential)로 사용될 가능성이 높다.
- 기술 문서 유출: 내부용 매뉴얼이나 설정 가이드가 공개되어 기본 관리자 계정 정보가 노출될 수 있다.
- 비밀번호 재설정 취약점: 계정 복구 기능의 질문(예: 출신 지역)이 SNS 등의 공개 프로필을 통해 쉽게 유추 가능한 경우 인증을 우회할 수 있다.
인프라 및 자산 정보 수집
기업 대상 테스트 시 자산 범위를 확장하기 위해 DNS 기록을 조회한다. 과거의 DNS 레코드는 현재는 유효하지 않은 서브도메인이나 IP를 찾는 데 유용하다.
nslookup -type=any target-domain.com