인프런 커뮤니티 질문&답변
CRLF 질문 있습니다
해결된 질문
작성
·
33
0
CRLF Injection 문제에서
header=header1 \r\n\r\n &value=<script>alert(1)</script> 로 payload 작성하시던데 그럼
header1 (header 쪽)
\r\n
\r\n
:<script>alert(1)</script>(body 쪽)
이렇게 되는 거 아닌가요? 근데 그러면 header 부분에는 header1 만 덩그러니 남는데 이거는 문제없는건지 궁금합니다. (원래 header에는 Content-Type : ~~ 처럼 키-값쌍이 있어야 하지않나요? )
그리고 body 부분에는 :가 포함된 <script>문이 되는데 (물론 이번 문제에서는 조건이 충족되서 상관없지만) : <- 없이 그냥 <script>alert(1)</script> 처럼 쓸 수 있도록
header=header1&value= \r\n\r\n<script>alert(1)</script> 이렇게 쓰는 거는 안되나요?
이 구문으로 쓰면 정답이 안 나오더라구요
답변 2
1
안녕하세요! CRLF Injection에서 header의 value에서는 가능하지 않은 점을 말해주셨네요 ㅎㅎ
일단 Falsk에서 CRLF Injection이 가능한 이유를 먼저 찾아보아야 합니다.
현재 취약점이 트리거 되는 코드는 해당 부분입니다.
response = make_response(f'I\'t is very good day to walk out. Power thourgh!!!!')
response.headers.set(header, user_input)
headers.set 에서 CRLF를 발생시키기 위해서는 Value가 아닌 key에 임의의 값을 넣을 수 있어야 됩니다.
실제로 직접 빌드해서 로그를 보면, value에 crlf를 입력할 경우 프레임워크 단에서 차단하는 것을 확인할 수 있습니다.
https://github.com/pallets/werkzeug/issues/1080
https://werkzeug.palletsprojects.com/en/stable/changes/
따라서 Key값에 CRLF를 진행해야 되며, value의 값이 비어 있어도, CRLF 두번을 기준으로 헤더와 바디가 나뉘기 때문에 브라우저에서는 이를 body로 인식하여 XSS가 가능하게 됩니다.
0
안녕하세요, 인프런 AI 인턴입니다. 신예준님.
CRLF 삽입(Injection) 문제를 다루실 때 여러모로 헷갈릴 수 있는 부분이 많으신 것 같습니다. 질문 주신 부분에 대해 답변 드리겠습니다.
CRLF(Carriage Return Line Feed)는 헤더와 본문(body)의 경계를 형성하는데 사용되며, 이를 통해 헤더와 본문을 구분할 수 있습니다. 때문에 의도한대로 모의해킹을 적용하기 위해선 CRLF 주입의 정확한 위치와 구성 요소가 중요합니다.
이 문제에서 사용된 페이로드는 다음과 같은 역할을 합니다:
1. 헤더 단절: \r\n\r\n를 사용해 헤더가 끝났음을 서버에 알립니다. 이 부분이 없을 경우, 헤더와 본문이 올바르게 구분되지 않을 수 있습니다.
2. 본문 시작: \r\n\r\n 이후의 내용은 HTTP 요청의 본문(Body)로 해석됩니다. 본문의 시작 위치가 명확해야 정확하게 데이터를 전달할 수 있습니다.
질문하신 부분에서 header1 \r\n\r\n<br><script>alert(1)</script>는 헤더를 종료하고 본문에 자바스크립트 코드를 삽입하는 일련의 작업입니다. 이때, 헤더 부분에는 키-값 쌍이 들어가야 한다는 말씀은 맞습니다. 특정 웹 서버나 애플리케이션에서는 올바른 헤더 구성이 중요하며, 그렇지 않을 경우 쿼리를 무시하거나 오류가 발생할 수도 있습니다.
마지막으로 두번째 방법(header=header1&value= \r\n\r\n<script>alert(1)</script>)을 사용해도 CRLF Injection이 가능하지만, 이 때는 웹 서버가 어떻게 헤더와 본문을 구분하고 해석할지를 명확히 이해해야 합니다. 첫 번째 방식이 정답으로 제시된 이유는 서버의 특성상 명확한 경계 설정을 위해 그런 것일 수 있습니다.
유사 질문이나 관련된 다른 사용자들의 경험을 통해 추가 학습을 원하신다면 아래 링크를 확인해 보세요:
- CRLF Injection 관련 사례와 해결 방안
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해 드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




