구글링을 활용한 웹 취약점 조사 (2)

LGE·2026년 2월 23일

1. 취약한 파일 존재 취약점

서버 내에 민감한 파일이나 디렉터리가 노출되어 외부에서 접근 가능한 상태일 때 발생하는 취약점.

주요 대상

  • 문서, 인사, 계약서, 급여, 명단 등의 서류.
  • 백업(backup), 테스트(test), 관리자(admin)
  • 설정(config), 환경변수(env), phpinfo, json 파일 등.

노출 사례

구글 해킹(Google Dorking)을 통해

  • intitle:"index of" "사본" site:*.kr
  • intitle:"index of" "phpinfo" site:*.kr

등의 키워드를 검색 시, 실제 사업자등록증 사본이나 서버 환경 설정 파일(phpinfo.php)이 무방비로 노출된 것을 확인할 수 있었다.

대응 방안

  • 웹 루트 디렉터리 내 불필요한 파일 제거.
  • 디렉터리 리스팅 기능 비활성화 (Options -Indexes).
  • .git, .svn, backup 폴더 등은 웹 서버 접근제어를 통해 반드시 외부 접근 차단


2. 계정 관리 취약점

관리자 및 사용자 계정에 대한 보안 정책이 미흡하여 발생하는 취약점입니다.

발생 원인

단순한 계정 사용, 중복 로그인 허용, 계정 잠금 정책 미비.

노출 사례

초기 설정된 기본 관리자 계정이나 로그인 페이지가 그대로 방치되거나, 구글링을 통해 장비 매뉴얼(설명서)이 노출되면서 초기 관리자 ID/PW가 유출되는 경우.

대응 방안

  • 계정 비밀번호 복잡도 강화 (영문, 숫자, 특수문자 조합으로 최소 8자리 이상).
  • MFA 다중 인증 적용.
  • 인가된 사람만 로그인해야 하는 관리자 페이지의 경우 화이트 리스트 방식으로 검증, 만일 화이트리스트 방식이 어려운 환경이면 블랙리스트를 적절히 혼용하여 검증.
  • 로그인 실패 횟수 초과 시 (보통 5회) 계정 잠금 정책 적용.
  • 동일 계정의 동시 로그인 차단 정책 도입.
  • 중요 페이지는 한번 더 로그인 할 수 있도록 재검증


3. 실명 인증 취약점

회원가입이나 비밀번호 찾기 등에서 본인 확인 인증 절차가 미흡하거나 우회 가능한 경우 발생

발생 원인: 서버 측의 검증 없이 클라이언트(브라우저) 단에서만 인증 여부를 검증하거나, 본인 확인 API의 응답값을 조작하여 우회하는 경우.

대응 방안:

  • NICE, KCB 등 공식 본인확인 기관의 인증 API 사용.
  • 클라이언트 검증에 의존하지 않고 반드시 서버 측에서 교차 검증 수행.
  • 주민번호 등 민감한 정보는 저장하지 않으며, 필요 시 해시 처리 또는 암호화 적용


4. 전송 시 주요정보 노출 취약점

로그인 시 입력하는 ID/PW나 개인정보 등 민감한 데이터를 암호화하지 않고 평문으로 전송할 때 발생.

노출 사례

HTTPS가 아닌 비암호화 통신(HTTP)을 사용할 경우 , 패킷 스니핑 도구(예: Wireshark)를 통해 전송되는 패킷을 캡처하면 사용자의 ID(test)와 비밀번호(1234), 그리고 세션 ID가 평문으로 그대로 노출되는 것을 확인.

대응 방안:

  • 웹 서비스 전체 영역에 HTTPS(TLS/SSL) 암호화 통신 적용.
  • 민감한 정보는 전송 구간뿐만 아니라 데이터 자체도 암호화하여 처리.
  • 세션 탈취 방지를 위해 쿠키에 Secure, HttpOnly, SameSite 속성 설정.
  • 중요 정보는 세션 기반으로 관리하고, URL 파라미터(GET 방식)에 노출되지 않도록 설계

파이썬 점검 스크립트 (본인 연습용)

import requests

# 점검 대상 리스트
target_paths = [
    "/phpinfo.php",
    "/.env",
    "/config.json",
    "/admin/login.php",
    "/.git/config"
]

def check_vulnerability(base_url):
    print(f"[*] {base_url} 점검 시작...")
    
    for path in target_paths:
        url = base_url + path
        try:
            response = requests.get(url, timeout=5)
            
            # 200 OK 응답이 오면 파일이 존재할 가능성 높음
            if response.status_code == 200:
                print(f"[!] 취약점 발견 위험: {url} (응답 코드: 200)")
                
                # 특정 키워드로 디렉터리 리스팅 여부 추가 확인
                if "Index of" in response.text:
                    print(f"    -> [위험] 디렉터리 리스팅 활성화 확인!")
                    
        except requests.exceptions.RequestException as e:
            print(f"[-] {url} 접속 실패")

# 실행 예시
check_vulnerability("http://example.com")
profile
안녕하세요

0개의 댓글