최근 CTF 문제를 풀다가 CRLF Injection을 통해 HTTP Response Splitting으로 flag를 찾는 문제가 있었습니다.
개념 이해가 부족한거 같아 글로 작성하려고 합니다.
CRLF Injection
CRLF Injection
은 Carriage Return과 Line Feed를 Inject 하는 공격입니다. Carriage Return과 Line Feed는 줄의 종료를 의미합니다.
- Carriage Return : \r
- Line Feed : \n
Windows에서는 줄의 끝을 기록하기 위해 CR과 LF가 모두 필요하고 반면 Linux/UNIX에서는 LF만 필요합니다.
HTTP 프로토콜에서는 CR-LF 시퀀스는 항상 라인을 종료하는 데 사용됩니다.
RFC 문서를 보면 마지막 CRLF 시퀀스를 제외하고 CR or LF는 허용되서는 안된다고 적혀있습니다.
HTTP Response Splitting
HTTP Response Splitting(HTTP응답분할) 취약점은 데이터를 Request에 CR-LF 문자를 입력하여 Response에서 응답의 헤더와 본문을 제어할 수 있는 취약점입니다.
아래는 SK인포섹 HTTP 응답 분할 취약점에 있는 예시입니다.