목표 : Socket, BurpSuite
유저 콘솔이라는 이름으로 빈페이지에 문자열을 보낼 수 있는 구조가 있다.
일반적인 명령어는 안 먹는 것 같다. 소스코드를 보자.
index에서 socket.io.js를 부르는데 각 경로에 추가적인 해당 파일들이 있다.
우선 index 코드부터 살펴본다
<!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>
PHP
복사
socket.io.js(웹 클라이언트와 서버 간의 실시간 양방향 통신 라이브러리)와
jquery.min.js(jQuery 라이브러리의 축소 버전) 스크립트를 불러오고
username은 Guest로 고정, socket.io() 로 소켓과 입출력 통신을 열어둔다.
메시지를 입력하고 보내기 버튼을 클릭하면 해당 메시지는 Socket.IO의 "emit"을 통해 서버로 전송된다.
이벤트 이름 "cmd", 사용자 이름, 메시지 순으로 발송된다.
서버 측에서 이 메시지는 이벤트 이름이 "cmd"인 들어오는 메시지를 수신하고 기존 li 리스트에다가 해당 메시지를 추가해 업데이트한다.
admin으로 명령어를 실행시킬 수 있다면 될 것 같다.
소스 코드를 보니 flag 명령어가 있는 듯 하다.
burpsuite로 패킷을 잡아 guest를 admin으로 바꾸고 전송했다.
플래그 획득