<공백 문자열 관련 주요 취약점>
1. 빈 문자열 비밀번호 취약점
사용자가 비밀번호 필드에 아무 값도 입력하지 않고 제출할 경우, 이를 허용하면 인증 우회가 발생할 수 있다.
OWASP는 빈 문자열 비밀번호를 심각한 보안 문제로 간주하며, 반드시 입력 검증을 통해 방지해야 한다고 권장한다.
2. 입력 검증 실패로 인한 예외 처리 오류
사용자가 필수 입력 필드를 비워두었을 때, 이를 적절히 처리하지 않으면 애플리케이션에서 예외가 발생하거나 예상치 못한 동작을 할 수 있다.
<취약점 예방 방안>
1. 입력 검증 강화
모든 입력 필드에 대해 빈 문자열을 허용할지 여부를 명확히 정의하고, 필요에 따라 null로 변환하거나 오류를 반환하도록 한다.
예를 들어, Java에서는 StringUtils.isEmpty() 또는 StringUtils.isBlank()를 사용하여 빈 문자열을 검증할 수 있다.
=> 공백 문자열은 단순한 입력 누락처럼 보일 수 있지만, 적절한 검증이 이루어지지 않으면 심각한 보안 취약점으로 이어질 수 있다. 따라서 입력 검증 로직을 강화하고, 프론트엔드와 백엔드에서 일관된 처리를 통해 이러한 취약점을 예방하는 것이 중요하다.
<%00 Null 바이트 공백 취약점의 의의 및 우회 예시>
1. 서버 측 입력 검증 우회 기법 이해
%00은 URL 인코딩된 Null 바이트로, 일부 백엔드 언어나 파일 처리 함수에서는 문자열 종료(\0)로 해석된다.
이를 통해 파일 확장자 검증 우회, 스크립트 주입 우회, 경로 우회 등이 가능하다.
2. 입력 필터 우회 실습
예를 들어, hello.php에서 .php 외의 확장자를 필터링하고 있지만, 공격자가 hello.php%00.jpg와 같이 요청하면 서버가 %00을 문자열 끝으로 인식하여 hello.php를 실행하게 된다.
<실습 : Python으로 Null Byte 테스트하기 >
- 아래 코드로 실습
- Python 코드 준비 : 위에 제공한 Null Byte 문자열 처리 코드를 주피터나 Python 실행 환경에 붙여넣기
- 코드 실행 : 각 줄 출력 결과를 확인하면서 Null Byte(\x00)가 문자열 처리에 어떤 영향을 주는지 눈으로 직접 확인
- 결과 해석 : Null Byte 포함 문자열은 길이는 길지만, C 스타일 처리(Null Byte 앞까지 자르기)하면 문자열이 짧아짐을 이해
filename = "evil.php.jpg"
# 정상적인 파일 이름을 문자열로 저장함 (확장자가 .jpg인 파일임)
print("정상 filename:", filename)
# 위에 저장한 정상 파일 이름을 출력함
filename_with_null = "evil.php\x00.jpg"
# 문자열 중간에 Null Byte(\x00)를 넣은 파일 이름을 만듦
# \x00은 컴퓨터에서 공백, 즉 문자열 종료를 의미할 때 쓰임
print("Null Byte 포함 filename:", filename_with_null)
# Null Byte가 포함된 문자열을 출력함
# 화면에는 보이지 않지만 실제로는 문자열에 Null Byte가 포함되어 있음
print("정상 filename 길이:", len(filename))
# 정상 문자열 길이를 출력 (문자 개수를 셈)
print("Null Byte 포함 filename 길이:", len(filename_with_null))
# Null Byte 포함 문자열 길이 출력
# 실제로 Null Byte도 한 글자임을 확인 가능
def c_style_string_cut(s):
# 문자열 s에서 Null Byte가 있으면 그 앞까지 자르는 함수 정의 시작
cut_index = s.find('\x00')
# 문자열 내에서 Null Byte 위치를 찾음
# 없으면 -1 반환
if cut_index == -1:
return s
# Null Byte가 없으면 원래 문자열 그대로 반환
return s[:cut_index]
# Null Byte가 있으면 그 앞까지 문자열을 잘라서 반환
print("C 스타일 문자열 처리 결과:", c_style_string_cut(filename_with_null))
# 위 함수로 Null Byte 앞까지만 자른 결과 출력
<출력>
정상 filename: evil.php.jpg
Null Byte 포함 filename: evil.php.jpg
정상 filename 길이: 12
Null Byte 포함 filename 길이: 13
C 스타일 문자열 처리 결과: evil.php
<의의>
- Null Byte 작동 원리 이해 가능
- \x00 Null Byte가 문자열 길이에 포함되지만, C 언어나 오래된 시스템은 이 Null Byte를 문자열의 끝으로 인식해서 그 뒤는 무시한다는 걸 알 수 있음.
'SWUFORCE 워게임👊🏻' 카테고리의 다른 글
| [워게임 실습] Heartbeat (1) | 2025.09.24 |
|---|---|
| [Dreamhack] LEVEL1 ; web ; Disgusting Ads (0) | 2025.09.23 |
| [Webhacking] old - 23 ; web (0) | 2025.05.19 |
| [워게임 추가 실습] Log Injeciton (0) | 2025.05.13 |
| [Webhacking] old - 38 ; web (0) | 2025.05.13 |