Это знаменует собой вызов 18 из 24 от Advent of CTF. Конечная цель этой задачи — злоупотребить функцией eval JavaScript для чтения удаленного файла на сервере.

При переходе на веб-страницу нам предоставляется форма отправки, где мы можем отправлять данные. После отправки случайных числовых данных они возвращаются нам, как показано ниже.

Что, если мы, например, добавим математическую операцию в нашу панель поиска, будет ли она вычисляться? Давайте выясним это с помощью Burpsuite и мощного повторителя. При вводе "333+333" мы получаем следующий ответ от веб-сервера:

В ответе, изображенном выше, мы видим, что сервер сделал за нас некоторые вычисления. Многие веб-приложения работают на JavaScript, в данном конкретном случае похоже, что функция eval JavaScript используется для оценки нашего ввода. Давайте проведем дальнейшее исследование, оценив два одинаковых целых числа.

Как видно выше, наша оценка вернулась как истина, это подтверждает, что функция eval JavaScript проверяет наш ввод. Краткое объяснение функции eval: «Функция eval оценивает или выполняет аргумент. Если аргумент является выражением, eval вычисляет выражение. Если аргумент является одним или несколькими операторами JavaScript, eval выполняет операторы. Это означает, что мы можем внедрить собственный вредоносный код JavaScript».

Теперь мы знаем, что можем внедрить собственный вредоносный код JavaScript благодаря функции eval, флаг находится в текущем каталоге и называется flag.txt. Попробовав несколько полезных нагрузок, я смог прочитать файл /etc/passwd со следующей полезной нагрузкой: {root.process.mainModule.require('child_process').spawnSync('cat' , ['/etc/passwd']).stdout}.

Теперь мы подтвердили, что можем читать произвольные файлы на сервере, теперь давайте установим наш флаг, чтобы мы могли набрать заслуженные очки. Для этого мы немного изменим нашу полезную нагрузку, чтобы распечатать содержимое файла flag.txt: {root.process.mainModule.require('child_process').spawnSync('cat ', ['flag.txt']).stdout}.

А вот и наш флаг! Большой вывод из этой проблемы заключается в том, чтобы не использовать функцию eval, потому что может быть внедрен вредоносный код, что приведет к RCE. Спасибо за чтение и счастливого взлома!