Search

WebHacking.kr Challenge old-58

목표 : 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으로 바꾸고 전송했다.
플래그 획득

✓ 다른 [워게임] 포스트

WebHacking.kr Challenge Write-Up (70/80)
In progress
WebHacking.kr Challenge Write-Up (70/80)
In progress
Load more
︎ 더 많은 게시물을 보려면
︎ 작성자가 궁금하면?
 2023. absolroot all rights reserved.