2.0Kпросмотров
5 ноября 2024 г.
Score: 2.3K
#psexec #nxc
PsExec с низкопривилигированной УЗ PsExec загружает на удаленный хост исполняемый файл 10-ти летней давности и создает службу, которая его запускает от имени системы - для этого и необходимы права администратора.
Сам файл в свою очередь это бинарь из https://github.com/kavika13/RemCom/, хранимый в виде хекса в Импакете.
При запуске он поднимает пайп RemCom_Communication и после подключения со стороны Импакета к этому пайпу создается еще три: RemCom_stdin, RemCom_stdout и RemCom_stderr*, через которые уже и ведется дальнейшее выполнение команд и передача вывода. При нормальном выходе (через exit) будет выполнена зачистка - остановлена служба, удалены файл и служба, в результате чего пайпы удалятся. Однако если из командной оболочки выйти "классическим" способом через Ctrl+C, то зачистка не происходит - в системе продолжает висеть запущенный сервис и наш бинарь. Будет висеть до следующей перезагрузки компа, поскольку сервис создается без автостарта. Это можно использовать для повторной компрометации машины с низкопривилегированной УЗ. Готовый скрипт лежит тут: https://github.com/MzHmO/psexec_noinstall По сути, мы просто пропускаем этап установки службы и сразу переходим к работе с имеющимися пайпами. Для обнаружения уязвимых хостов написал модуль для NetExec - https://github.com/beaverdreamer/nxc-modules
Принцип работы прост: мы с предоставленной учеткой запрашиваем доступные пайпы (через IPC$) и выводим сообщение, если в списке видим RemCom_communication. Стоит подсветить, что это имя пайпа можно изменить, и если оно было изменено, то этот модуль не сработает. Учитывая, что сервис не поднимается после рестарта ПК, то имеет смысл запускать на инфраструктуре после недавнего пентеста, либо на скоупе постоянно работающих серверов.