
배경
BYUCTF 2025 웹해킹 Willy Wonka Web 문제 풀이입니다.
요약
apache http
가 URL 인코딩 된 띄어쓰기를 인식하지 못해,GET
이나POST
등의 메소드가 오고 난 뒤다음 띄어쓰기가 올 때까지의 모든 문자
를 경로로 인식하던 취약점
문제 상황
요청 헤더에 a
값이 오면 플래그를 출력하는 문제지만, apache http 서버
의 RewriteEngine
, RewriteRule
를 이용해 a
헤더를 unset
하고 있었습니다.
점수 - 241점, 푼 팀 - 191/894팀
분석 과정
관련 CVE 내용을 확인해보니 apache httpd 2.4.55
버전까지 HTTP
메소드 이후 캐리지 리턴이 올 때까지 전부 하나의 경로로 인식한다는 내용이 있었습니다.
원하는 요청은 다음과 같았습니다.
GET /name/anything HTTP/1.1
Host: 127.0.0.1
a: admin
해당 요청 GET
이후 부분을 전부 UrlEncoding
하여 진행했으나 내부 오류가 계속 났었습니다.
’ ‘ 및 ‘\r\n’만을 UrlEncoding
하니 정상적으로 실행되었습니다.
두개 요청을 합쳐야 해서 다음처럼 요청을 보냈습니다.
GET /name/anything HTTP/1.1
Host: 127.0.0.1
a: admin
GET /name/anything HTTP/1.1
이를 두번째 쿼리 HTTP/1.1
부분 앞까지 %20
, %0d
, %0a
로 치환하여 다음처럼 쿼리가 나왔고
GET /name/anything%20HTTP/1.1%0d%0aa:%20admin%0d%0a%0d%0aGET%20/anything HTTP/1.1
위 코드는 apache http 웹서버
에서 헤더가 하나도 없는 /name...anything
경로를 가진 GET
요청으로 처리가 될 것이며, 백엔드에서는 a: admin
헤더를 가진 요청, 헤더 없는 요청, 총 두개로 처리가 됩니다.
다음처럼 코드 실행해 공격 성공했습니다.
작성자의 글
Smuggling
공격 실습을 해보아 재밌었습니다.- 소켓 관련 내용을 다루느라 힘들었습니다. 관련 툴을 미리 제작해둬야겠습니다.