본문 바로가기

old/Cyber Security

웹 해킹 예제: 쿠키 변조, 디렉토리 명 추측, 세션 하이재킹, 인증 우회, 브루트 포스 공격

반응형

웹 해킹은 공격자가 웹 어플리케이션의 취약점을 이용하여 공격하는 일반적인 기술입니다. 이 글에서는 쿠키 변조, 디렉토리 명 추측, 세션 하이재킹, 인증 우회, 브루트 포스 공격과 같은 일반적인 웹 공격 유형을 살펴보겠습니다.

쿠키 변조(Cookie Tampering)

정의

웹 애플리케이션에서 사용하는 쿠키값을 악의적으로 변경하는 것을 말합니다.

사용이유

쿠키는 클라이언트 측에서 저장되며, 서버와 클라이언트 간의 상태(클라이언트와 서버 간의 인증, 세션 관리, 사용자 식별 등)를 유지하기 위해 사용됩니다.

방지법

  • 쿠키에 대한 인증과 암호화
  • 입력 값에 대한 필터링 및 검증
  • 출력 값 필터링
  • 쿠키 사용의 목적과 기간을 고려한 적절한 쿠키 설정

예제

Burp Suite를 사용함

정상적으로 로그인하는것을 확인해봅시다. Response의 status code가 302임을 알수 있습니다.

300번대 status code라는 뜻은 리다이렉션. 즉 다른 웹페이지로 이동되었다는 뜻입니다. 이동되어진 싸이트를 확인해 봅시다.

쿠키를 보면 세션을 이용해서 아이디를 구분하는게 아니라, 쿠키에서 받은 유저네임을 사용하는것을 볼수 있습니다. 저 loginUser를 admin으로 바꿔주면 쿠키변조로 권한을 탈취할수 있습니다.

디렉토리 명 추측 (Directory Traversal)

Another name

  • 파일 경로 추측 (File Path Traversal)

정의

웹사이트 내부에 존재하는 파일이나 디렉토리 경로를 추측하여 이를 이용하여 해당 파일이나 디렉토리에 직접 접근하는 공격입니다.

방지법

이 기법은 이러한 취약점을 방지하기 위해서는,

  • 파일 또는 디렉토리에 대한 접근 권한을 제한
  • 입력 값에 대한 필터링 및 검증
  • 출력 값 필터링

예제

Burp Suite를 사용함

홈페이지가 step1, step2이라면, step2에서 인증을 하지 않고 바로 step3으로 접속을 시도해볼수 있습니다.

세션 하이재킹 (Session Hijacking)

Another name

  • 세션 위조 (Session Fixation)

정의

공격자가 이미 유효한 세션을 획득한 후, 해당 세션을 다른 사용자에게 사용하도록 유도하거나, 해당 세션을 사용하여 다른 계정으로 로그인하는 등의 공격을 수행합니다.

방지법

적절한 세션 관리가 필요합니다.

  • 세션 ID를 랜덤하고 예측 불가능한 값으로 생성하기
  • 적절한 기간 이후에 세션을 만료시키기
  • 세션 ID를 SSL 또는 TLS와 같은 암호화된 프로토콜을 사용하여 전송

예제

  1. 공격자가 네트워크 트래픽을 모니터링하여 사용자의 세션 ID를 탈취합니다.
  2. 공격자가 탈취한 세션 ID를 사용하여 웹 사이트에 인증된 사용자로 로그인합니다.
  3. 공격자는 이제 사용자의 권한으로 악의적인 작업을 수행할 수 있습니다.

인증 우회 (Authentication Bypass)

Another name

  • 로그인 우회 (Login Bypass)

정의

로그인 시 아이디와 비밀번호를 검증하지 않아도 로그인이 가능한 경우, 또는 다른 방법으로 로그인할 수 있는 경우에 이용됩니다.

방지법

  • 로그인 시 인증과 검증

예제

  1. 공격자가 취약한 인증 메커니즘을 발견합니다 (예: 약한 비밀번호 정책, 입력 값 검증 누락 등).
  2. 공격자가 인증 메커니즘을 우회할 수 있는 방법을 찾습니다 (예: SQL 인젝션, 기본 비밀번호 사용, 인증 토큰 변조 등).
  3. 공격자는 인증 과정을 우회하여 시스템에 무단으로 접근합니다.
  4. 이제 공격자는 인증되지 않은 상태에서 시스템의 정보를 탈취하거나 시스템을 조작할 수 있습니다.

브루트 포스 공격 (Brute Force Attack)

정의

가능한 모든 경우의 수를 대입해보면서 비밀번호를 추측하는 공격입니다.

방지법

  • 사용자들이 안전한 암호를 사용하도록 유도
  • 블랙리스트 기능을 사용하여 일정 횟수 이상의 로그인 실패 시 계정 잠금을 설정
  • CAPTCHA와 같은 보안 기능을 추가

예제

Burp Suite를 사용함

Burp suite의 인트루더 기능을 사용해도 되지만, 파이썬으로 따로 짜서 사용하는게 훨씬 빠릅니다.

import httplib2

# example.php?otpNum=0000 으로 GET요청을 한다고 했을떄.
# 대상 웹 사이트 URL (여기서는 example.php)
url = "<http://example.php>"

# httplib2 인스턴스 생성
http_obj = httplib2.Http()

# otp_num의 범위 (0000부터 9999까지)
for otp_num in range(10000):
    # otp_num을 4자리 숫자로 포맷팅합니다. (예: 0035)
    otp_num_formatted = f"{otp_num:04d}"

    # GET 요청에 otp_num 매개변수를 추가합니다.
    request_url = f"{url}?otpNum={otp_num_formatted}"
    response, content = http_obj.request(request_url, method="GET")

    # 원하는 결과를 찾는 방법에 따라 처리를 변경할 수 있습니다.
    # 예를 들어, 서버에서 특정 메시지를 반환한다면 이를 확인할 수 있습니다.
    # print(content)를 사용해서 확인을 하고 성공 조건을 설정합니다.
    if not b"Login Fail" in content:
        print(f"Success! OTP number is: {otp_num_formatted}")
        break
    else:
        print(f"Failed for OTP number: {otp_num_formatted}")
반응형