HTTP는 기본적으로 비연결 통신이다.
즉, 웹서버가 클라이언트에 웹페이지를 한번 전송하고 나면, 연결이 끊긴다.
채팅과 같이 실시간으로 메시지를 빨리 주고받아야 하는 통신에서는 적합하지 않은 프로토콜이다.
Spring은 Message를 주고받는 등의 실시간 통신을 위해 WebSocket 프로토콜을 지원한다.
WebSocket 통신은 클라이언트와 서버가 한번 연결하면, 자동으로 연결이 종료되지 않는다.
연결을 유지하면서 데이터를 주고받을 수 있기 때문에 실시간 양방향 통신에 적합하다.
그런데 Internet Explorer 10 미만의 구형 브라우저에서는 WebSocket 통신을 지원하지 않는다.
그래서 SockJS라는 것이 탄생했는데, SockJS는 WebSocket과 원리가 비슷하지만, HTTP 프로토콜을 사용한다.
쉽게 말해, HTTP를 이용하여 WebSocket과 같은 양방향 통신 모델을 만든 것이 SockJS이다.
Stomp는 Broker를 통해 Message를 더 쉽게 다룰 수 있게 한다. Stomp는 명령어, 헤더, 데이터 구조로 이뤄져 있으며, 대표적인 명령어로는 Connect(연결), Subscribe(구독), Send(전송), Disconnect(연결 해제)가 있다.
CVE-2018-1270은 Stomp Subscribe(구독) 명령어에 SPEL(Spring Expression Language)를 삽입하여 원격 명령어를 실행할 수 있는 취약점이다.
WebSocket 연결 후,
SUBSCRIBE 명령어를 이용해서 SPEL을 삽입하면, RCE 공격을 할 수 있다.
SEND 명령어까지 전송한 후, 도커 컨테이너 안에서 success 파일을 확인했다.
이 내용은 칼리!도커를해킹하다 2부의 아주 일부입니다. 책에서 더 자세히 다룹니다. 2부는 2019년 5월 출간 예정입니다.
칼리!도커를해킹하다 1부는 2부를 공부하기 전에 알아야 할 내용으로 이미 전자책으로 출간되었습니다.
칼리! 도커를 해킹하다
이 책은 총 3부로 기획했다. 입문자나 초급자가 중급 정도의 수준까지 끌어올릴 수 있도록 다소 욕심을 부렸다. 1부는 입문자나 초급자에게 맞췄고...
ridibooks.com
예스24 http://www.yes24.com/Product/Goods/71536932?scode=032&OzSrank=4
알라딘 https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=187404326