📄 2026.01.13 (Day 54) - 웹 취약점 진단 실습


1. 핵심 개념 정리

웹 취약점 진단 방법론

# 핵심 개념 설명 실무/보안 관점
1 정보 수집 대상 시스템의 URL, 파라미터, 기능 파악 공격 표면 분석의 시작점
2 취약점 점검 항목 주요정보통신기반시설 기술적 취약점 가이드 28개 항목 ISMS-P 인증 시 참조하는 표준 체크리스트
3 모의해킹 시나리오 발견된 기능에 대한 공격 시나리오 도출 단순 스캔이 아닌 실제 공격 경로 분석
4 점검 도구 활용 Burp Suite, DirBuster 등 전문 도구 사용 수동 점검과 자동화 도구 병행
5 결과 보고서 작성 취약점 상세 내역 및 개선방안 문서화 컨설팅 산출물의 핵심

SQL Injection 취약점

# 핵심 개념 설명 실무/보안 관점
6 동적 쿼리 위험 사용자 입력값을 직접 쿼리에 결합하여 실행 쿼리 변조 위험 존재
7 Blind SQL Injection TRUE/FALSE 응답 차이로 정보 추출 에러 메시지 없이도 공격 가능
8 Prepared Statement 쿼리와 데이터를 분리하여 처리 근본적인 방어 대책
9 입력값 검증 특수문자 필터링 및 화이트리스트 검증 추가적인 방어 레이어
10 DB 권한 최소화 애플리케이션 계정의 DB 권한 제한 공격 성공 시 피해 최소화

파일 다운로드 취약점

# 핵심 개념 설명 실무/보안 관점
11 경로 조작 (Path Traversal) ../를 이용한 상위 디렉토리 접근 서버 내부 파일 노출 위험
12 화이트리스트 검증 허용된 파일만 다운로드 가능하도록 제한 파일명 검증 필수
13 절대 경로 사용 사용자 입력값을 경로에 직접 사용 금지 안전한 파일 접근 방식
14 민감 파일 노출 설정 파일, 소스코드 등 유출 가능 2차 공격의 발판
15 접근 권한 검증 파일 다운로드 전 권한 확인 인가된 사용자만 접근

Vim Swap File 취약점

# 핵심 개념 설명 실무/보안 관점
16 .swp 파일 노출 Vim 에디터의 임시 파일이 웹 루트에 남음 소스코드 전체 유출 가능
17 백업 파일 노출 .bak, .old, .tmp 등 임시 파일 개발 과정의 민감 정보 포함
18 .git 디렉토리 노출 Git 저장소가 배포 환경에 포함됨 전체 소스코드 이력 유출
19 배포 전 정리 임시 파일 및 개발 도구 파일 제거 CI/CD 파이프라인에 점검 추가
20 디렉토리 인덱싱 차단 웹 서버 설정에서 인덱싱 비활성화 파일 목록 노출 방지

2. 실습 내용 정리

실습 1: SQL Injection 취약점 진단

목표: Blind SQL Injection을 통한 데이터베이스 정보 추출

실습 환경:

  • 대상: /challenges/sql200/index.php
  • 도구: Burp Suite, Python 스크립트
  • 취약 파라미터: no (메모 번호)

SQL Injection 가능 여부 확인:

TRUE 쿼리 요청: ?no=1 and 1=1 -> 정상 메모 내용 출력

FALSE 쿼리 요청: ?no=1 and 1=2 -> 메모 내용 미출력 (다른 응답)

결과: TRUE/FALSE에 따라 응답이 달라짐 -> Blind SQL Injection 가능

Blind SQL Injection 자동화 스크립트 구조:

  • requests 라이브러리를 사용하여 Python 스크립트 작성
  • 1단계: length(flag)=N 페이로드로 플래그 문자열 길이 확인 (1~50 순차 탐색)
  • 2단계: substr(flag,position,1)='c' 페이로드로 문자 하나씩 추출
    • 알파벳 소문자 a-z, 숫자 0-9, 특수문자 _{} 순서로 비교
  • 3단계: TRUE 응답 패턴 확인 시 해당 문자를 플래그에 누적
  • 최종 플래그: this_is_flag

분석 포인트:

  • 파라미터에 SQL 구문 삽입 시 응답 변화 확인
  • TRUE/FALSE 조건에 따른 응답 차이 식별
  • 에러 메시지 노출 여부 확인
  • Blind 방식으로 데이터 추출 가능성 검증

보안 인사이트:

  • 동적 쿼리 방식은 쿼리 변조 위험 존재
  • 에러 메시지가 없어도 Blind 방식으로 정보 추출 가능
  • 단순 필터링이 아닌 Prepared Statement 사용 필수
  • DB 계정의 권한을 최소화하여 피해 범위 제한

안전한 코드 (Prepared Statement):

  • 취약한 코드: $query = "SELECT * FROM memos WHERE no = $no" (동적 쿼리 직접 결합)
  • 안전한 코드: $stmt = $pdo->prepare("SELECT * FROM memos WHERE no = ?")$stmt->execute([$no])

실습 2: 파일 다운로드 취약점 진단

목표: 경로 조작을 통한 서버 내부 파일 다운로드

실습 환경:

  • 대상: /challenges/down1/
  • 취약 기능: 파일 다운로드 (down.cgi)
  • 취약 파라미터: file

실습 단계:

  1. 정상 요청 확인: /challenges/down1/?file=document.txt -> document.txt 다운로드 성공

  2. 경로 조작 시도: /challenges/down1/?file=../down -> down.cgi 파일 다운로드 성공

    • 파일 내용: Perl CGI 스크립트, conf1g.cgi를 require하는 구조 확인
  3. 설정 파일 다운로드: /challenges/down1/?file=../conf1g -> conf1g.cgi 다운로드 성공

    • 내용 확인: $db_password = "admin1234!@#$", $api_key = "sk-1234567890abcdef" 등 민감 정보
  4. 추가 파일 탐색: /challenges/down1/?file=../../etc/passwd -> 시스템 파일 접근 가능성 확인

발견된 취약점:

  1. 경로 조작 문자열 필터링 미흡

    • ../ 구문이 제한 없이 처리됨
    • 상위 디렉토리로 이동 가능
  2. 파일명 화이트리스트 미적용

    • 허용된 파일 목록이 정의되지 않음
    • 임의의 파일 요청 가능
  3. 민감 정보 하드코딩

    • 설정 파일에 DB 패스워드, API 키 등 평문 저장
    • 소스코드 유출 시 2차 피해 발생

탐지 패턴 및 방어 방법:

탐지 패턴:

  • ../ 를 포함한 파일 요청
  • 설정 파일(.conf, .config, .cgi) 접근 시도
  • 시스템 파일(/etc/passwd 등) 다운로드 시도

방어 방법:

  • 파일명 화이트리스트 적용
  • 절대 경로 사용 및 경로 정규화 (realpath 함수 사용)
  • 사용자 입력값을 경로에 직접 사용 금지
  • 민감 정보는 환경 변수 또는 별도 관리

안전한 파일 다운로드 구현:

  • 화이트리스트로 허용 파일 목록 정의 후 in_array() 로 검증
  • base_dir를 realpath()로 절대 경로화 후 요청 경로와 비교
  • strpos($file_path, $base_dir) !== 0 이면 Path traversal로 거부

실습 3: Vim Swap File 취약점 진단

목표: .swp 파일을 통한 소스코드 복원 및 정보 추출

실습 환경:

  • 힌트: vim, black out (read_me 문제의 주석에서 발견)
  • 대상 파일: .index.php.swp

실습 단계:

  1. 힌트 분석: read_me 문제 풀이 시 발견한 주석

    • <!-- vim editor used -->
    • <!-- black out... -->
    • 추론: Vim 에디터로 작업 중 비정상 종료되어 .swp 파일이 남았을 가능성
  2. .swp 파일 경로 유추: Vim swap 파일 명명 규칙 = .{원본파일명}.swp

    • 대상 파일이 index.php라면: .index.php.swp
  3. .swp 파일 다운로드: http://target/.index.php.swp -> 파일 다운로드 성공

  4. .swp 파일 분석

    • 방법 1: strings 명령어로 내용 확인 (flag, password, key 키워드 grep)
    • 방법 2: vim -r .index.php.swp 로 복구 모드 사용 -> 원본 소스코드 복원
  5. 복원된 index.php 내용:

    • PHP 코드에 $flag = "this_is_secret_flag" 하드코딩
    • password 파라미터로 비교하는 인증 로직 발견
    • -> 플래그 획득 또는 password 파라미터로 인증 우회

.swp 파일 상세 분석:

보안 위험:

  1. 소스코드 전체 노출: 개발 중인 코드의 로직 및 알고리즘 유출, 주석에 남긴 TODO/디버그 정보 포함
  2. 하드코딩된 민감 정보: 데이터베이스 접속 정보, API 키/비밀 키, 테스트용 계정 정보
  3. 개발 환경 정보 노출: 사용한 에디터, 프레임워크, 파일 경로 및 디렉토리 구조

개선 방안:

배포 전 체크리스트:

  • .swp, .bak 파일 재귀 탐색 후 삭제
  • .git 디렉토리 웹 루트에서 제거

웹 서버 설정으로 접근 차단:

  • Apache: <FilesMatch "^\.|~$"> Require all denied </FilesMatch>
  • Nginx: location ~ /\. { deny all; }

CI/CD 파이프라인에 임시 파일 존재 여부 점검 스크립트 추가

실습 4: CTF 추가 문제 풀이

Guessing II (100 Point):

  • 페이지 소스 분석 -> Sources 탭에서 JavaScript 파일 내 정답 확인
  • 정답 직접 입력 또는 Console에서 검증 함수 우회 -> 플래그 획득

Proxy (100 Point):

  • Burp Suite Proxy > Intercept 활성화
  • 요청 가로채기 후 원본 파라미터 또는 헤더 변조
  • 변조된 요청 전송 후 플래그 확인

3. 웹 취약점 진단 vs 모의해킹 비교

점검 방식별 특징

항목 취약점 진단 모의해킹 실무 적용 SOC 관점
목적 체크리스트 기반 취약점 발견 실제 공격 시나리오 수행 ISMS-P는 진단 중심, PCI-DSS는 모의해킹 포함 진단 결과는 탐지 룰 작성 기반
범위 28개 표준 점검 항목 제한 없는 공격 경로 탐색 진단은 전수 조사, 모의해킹은 샘플링 진단 항목은 로그 모니터링 대상
도구 Burp Suite, DirBuster Metasploit, 커스텀 익스플로잇 도구 + 수동 점검 병행 도구 시그니처 기반 탐지 가능
결과 취약점 목록 및 개선방안 공격 성공 여부 및 침투 경로 컴플라이언스는 진단 중심 공격 시나리오는 SIEM 룰셋 생성

4. 실무/보안 적용

SOC 분석가 관점 - 웹 공격 탐지 포인트

단계/유형 탐지 포인트 로그 예시 대응 방안
SQL Injection SQL 구문 포함 파라미터, 반복적인 TRUE/FALSE 패턴 GET /board?no=1 and 1=1 WAF 룰 적용, 비정상 쿼리 패턴 탐지, DB 접근 로그 분석
Path Traversal ../ 포함 파일 요청, /etc/passwd 등 시스템 파일 GET /download?file=../../../etc/passwd 경로 조작 문자열 차단, 파일 접근 로그 모니터링
정보 노출 .swp, .bak 파일 요청, .git 디렉토리 접근 GET /.index.php.swp 임시 파일 접근 차단, 민감 파일 패턴 알림

5. 배운 점 및 인사이트

새로 알게 된 점

  • Blind SQL Injection 원리: 에러 메시지 없이도 TRUE/FALSE 응답 차이로 데이터 추출 가능
  • .swp 파일의 위험성: Vim 에디터의 임시 파일이 전체 소스코드를 포함하고 있음
  • 경로 조작 공격: ../를 이용해 서버 내부 파일에 접근 가능하며 민감 정보 유출 위험
  • 취약점 진단 방법론: 단순 도구 스캔이 아닌 기능 분석 -> 시나리오 도출 -> 수동 점검 프로세스
  • CTF와 실무의 연결: CTF 문제가 실제 취약점을 단순화한 형태이며 동일한 원리 적용

이전 학습과의 연결고리

  • ISMS 컨설팅 (Day 51)과 연계: 취약점 진단 결과가 ISMS-P 인증의 보호대책 이행으로 연결
  • DNA Lab 프로젝트: 자동화 취약점 스캐너가 오늘 실습한 항목들을 점검하는 것
  • Burp Suite 실습 확장: 이론으로 배운 도구를 실제 취약점 발견에 활용

실무 적용 아이디어

SOC 분석가 관점:

  • SQL Injection 탐지 룰 작성: 파라미터에 SQL 구문 포함 여부 확인
  • Path Traversal 패턴 모니터링: ../를 포함한 파일 요청 로그 분석
  • .swp, .bak 파일 접근 알림: 임시 파일 다운로드 시도 즉시 탐지

보안 컨설턴트 준비:

  • 취약점 진단 보고서 작성 연습: 오늘 실습 내용을 보고서 형식으로 정리
  • 개선방안 도출 능력: 단순 지적이 아닌 구체적인 코드 레벨 개선안 제시

6. Quick Reference

웹 취약점 진단 Top 5 점검 항목

  1. SQL Injection

    • 동적 쿼리 사용 여부, Prepared Statement 적용 여부
  2. 파일 다운로드

    • 경로 조작 문자열 필터링, 화이트리스트 검증
  3. 임시 파일 노출

    • .swp, .bak, .git 파일 존재 여부, 디렉토리 인덱싱 활성화 여부
  4. XSS (Cross-Site Scripting)

    • 사용자 입력값 출력 시 인코딩, Content-Security-Policy 헤더
  5. CSRF (Cross-Site Request Forgery)

    • CSRF 토큰 검증, SameSite 쿠키 속성

Burp Suite 주요 기능

  • Proxy 탭: 요청/응답 가로채기 및 수정 (Intercept on/off)
  • Repeater 탭: 동일 요청 반복 전송, 파라미터 변조 테스트
  • Intruder 탭: 자동화 공격 (Fuzzing), Payload 리스트 설정
  • Scanner 탭 (Pro 버전): 자동 취약점 스캔, 수동 점검 보조

취약점 진단 보고서 구조

  1. 개요: 점검 목적, 점검 대상, 점검 기간
  2. 점검 방법론: 점검 기준 (28개 항목), 점검 도구, 수행 절차
  3. 점검 결과 요약: 취약점 개수 (상/중/하), 주요 발견 사항
  4. 취약점 상세 내역: 취약점명, 위험도, 현황 (스크린샷), 개선방안 (코드 예시)
  5. 결론 및 권고사항

7. 트러블슈팅

문제 원인 해결 방법
Blind SQL Injection 스크립트가 너무 느림 문자 하나씩 확인하는 방식 이진 탐색으로 최적화, 멀티스레딩 적용, 응답 시간 기반 방식 고려
.swp 파일을 Vim으로 복구할 수 없음 파일 손상 또는 버전 불일치 strings 명령어로 내용 확인, hexdump로 바이너리 분석
경로 조작이 필터링됨 ../ 문자열 차단 URL 인코딩 시도 (%2e%2e%2f), 이중 인코딩, 절대 경로 사용
Burp Suite가 HTTPS 트래픽을 가로채지 못함 인증서 신뢰 문제 Burp CA 인증서를 브라우저에 설치, Proxy 설정 확인 (127.0.0.1:8080)

Today’s Insight:

오늘은 웹 취약점 진단 실습을 통해 공격자 시점에서 웹 애플리케이션을 분석하는 방법을 체득했다. SQL Injection은 Blind 방식으로 TRUE/FALSE 응답 차이를 이용해 데이터를 추출하는 원리를 직접 스크립트로 구현하면서 이해했다. 파일 다운로드 취약점에서는 ../를 이용한 경로 조작으로 설정 파일(conf1g.cgi)에서 DB 패스워드와 API 키를 획득했다. 특히 .swp 파일 취약점은 read_me 문제의 vim, black out 힌트에서 시작해 실제 소스코드 전체를 복원하는 과정이 인상적이었다. 개발자가 남긴 작은 흔적이 어떻게 심각한 정보 유출로 이어지는지 직접 경험했다.