На заметку
*
payload + unlink = stealth mode
payload не ищется, антивирусу нечего сканировать, а процесс живёт !
*
*
mmap + unlink = призрачные данные
Пока процесс жив - данные доступны (вместе с shellcode) и даже дамп памяти их покажет, но диск чист
#РубрикаНаЗаметкуХакеру
$USERNAME@hacker.wtf - part 2*
payload + unlink = stealth mode
payload не ищется, антивирусу нечего сканировать, а процесс живёт !
payload + unlink = stealth mode
fd = open("/tmp/.x", O_CREAT|O_RDWR);
unlink("/tmp/.x");
execve("/proc/self/fd/3", ...);
*
*
mmap + unlink = призрачные данные
Пока процесс жив - данные доступны (вместе с shellcode) и даже дамп памяти их покажет, но диск чист
fd = open("secret", O_RDWR);
mmap(...)
unlink("secret");#РубрикаНаЗаметкуХакеру
👍21🔥18
From Automation to Infection (Part II):
*
Reverse Shells, Semantic Worms, and Cognitive Rootkits in OpenClaw Skills
*
Reverse Shells, Semantic Worms, and Cognitive Rootkits in OpenClaw Skills
👍8🔥6
Рубрика На заметку
*
Zombie FD - файл закрыт, но mmap то жив !
Файла нет, FD закрыт, lsof ничего не покажет, но данные всё ещё доступны. Тут только
*
*
process_vm_readv - читаем невидимое.
Смоделируем сценарий - файл удален, fd закрыт и даже mmap’нут, НО ПРОЦЕСС пока ЖИВ.
Тогда другим процессом (ну с правами) можно вытащить payload, ключи, shellcode etc.
Ну или наоборот — заинжектить данные без файлов
#РубрикаНаЗаметкуХакеру
$USERNAME@hacker.wtf - part 3*
Zombie FD - файл закрыт, но mmap то жив !
fd = open("secret", O_RDONLY);
ptr = mmap(fd);
close(fd);
unlink("secret");Файла нет, FD закрыт, lsof ничего не покажет, но данные всё ещё доступны. Тут только
/proc/<pid>/maps руками смотреть, людям из форензики плохеет.*
*
process_vm_readv - читаем невидимое.
Смоделируем сценарий - файл удален, fd закрыт и даже mmap’нут, НО ПРОЦЕСС пока ЖИВ.
process_vm_readv(pid, ...)Тогда другим процессом (ну с правами) можно вытащить payload, ключи, shellcode etc.
Ну или наоборот — заинжектить данные без файлов
#РубрикаНаЗаметкуХакеру
🔥23👍7
Рубрика На заметку
*
ptrace + удалённый ELF = живое и моргает
Как я уже писал выше если ELF уже подгружен в память (через
В итоге безфайловый процесс живёт как паразит, код которого можно модифицировать / расширять на лету.
как это выглядит:
ну а дальше через ptrace (и да, обычно от rootины)
тут процесс тормозится и ядро разрешает нам: читать память, писать в память, менять регистры, рулить потоками исполнения.
В
А еще можно ЗАИНЖЕКТИТЬ НОВЫЙ КОД ! Для этого надо:куриный кубик магги найти свободную память
(ну или вызвать mmap внутри процесса), залить
Fileless persistence они такие.
Кстати отлично комбинируется с
А вот тут можно спалиться:
В мире *nix имя файла — это вообще иллюзия. Реальность — это память, так то.
#РубрикаНаЗаметкуХакеру
$USERNAME@hacker.wtf - part 4*
ptrace + удалённый ELF = живое и моргает
Как я уже писал выше если ELF уже подгружен в память (через
execve, memfd, mmap) — удаление файла ничего не меняет, бинаря нет, inode удалён. За то ptrace позволяет подрубиться к такому процессу и управлять его памятью / регистрами.В итоге безфайловый процесс живёт как паразит, код которого можно модифицировать / расширять на лету.
как это выглядит:
./evil & #процесс стартует как обычно
rm evil #удаляем, inode остаётся в памяти, код уже mmap’нут
ls -l /proc/<pid>/exe #чекаем, увидим что то вроде # -> evil (deleted)
ну а дальше через ptrace (и да, обычно от rootины)
PTRACE_ATTACH
тут процесс тормозится и ядро разрешает нам: читать память, писать в память, менять регистры, рулить потоками исполнения.
ptrace нужен только PID.В
/proc/<pid>/maps можно почитать код удалённого ELF, увидеть адреса сегментов, r-xp области, дампить, модифицировать и тд.А еще можно ЗАИНЖЕКТИТЬ НОВЫЙ КОД ! Для этого надо:
(ну или вызвать mmap внутри процесса), залить
payload в эту область, посохранять старые регистры, изменить RIP > на payload, вернуть управление обратно. Fileless persistence они такие.
Кстати отлично комбинируется с
LD_PRELOADА вот тут можно спалиться:
cat /proc/sys/kernel/yama/ptrace_scope
В мире *nix имя файла — это вообще иллюзия. Реальность — это память, так то.
#РубрикаНаЗаметкуХакеру
👍17🔥6
Рубрика На заметку
*
SSH agent hijacking
Если есть доступ к сокету
То можно использовать ключ жертвы и знание приватного ключа - тут вообще не нужно.
*
*
*
systemD - ExecStart без правки файла
cоздаёт drop-in override автоматически. Это значит что хацкер может изменить поведение сервиса. Тут важно то что основной
*
*
*
systemD - Оскорбительный Type
Если сервис:
Можно указать "свой веселый"
А
*
*
*
systemD - CapabilityBoundingSet
В unit можно задать:
И даже если процесс не root — он получит capability !
Вообще
#
DynamicUser=yes # =временный user без записи в /etc/passwd
ExecStartPre=/tmp/evil # если основной бинарь чист, то до его старта стартанем shell
systemctl mask auditd # cоздаётся
systemd-run --unit=evil --on-boot=5m /tmp/evil # получим рантайм unit, такой fileless persistence
KillMode=process # systemD грохнет только основной PID, а вот дочерние процессы могут выжить, ну а вних уже payload
#РубрикаНаЗаметкуХакеру
$USERNAME@hacker.wtf - part 5*
SSH agent hijacking
Если есть доступ к сокету
SSH_AUTH_SOCK=/tmp/agent.sock
То можно использовать ключ жертвы и знание приватного ключа - тут вообще не нужно.
*
*
*
systemD - ExecStart без правки файла
systemctl edit nginx
cоздаёт drop-in override автоматически. Это значит что хацкер может изменить поведение сервиса. Тут важно то что основной
systemD unit останется нетронутым - file monitoring может ничего не заметить.*
*
*
systemD - Оскорбительный Type
Если сервис:
Type=forking
Можно указать "свой веселый"
PIDFile или запустить другой процесс.А
Systemd будет считать его самым легитимным на свете.*
*
*
systemD - CapabilityBoundingSet
В unit можно задать:
CapabilityBoundingSet=CAP_SYS_PTRACE
И даже если процесс не root — он получит capability !
Systemd может выдает привилегии куда веселее, чем дядька sudo.Вообще
systemD сундук чудес, всего и не упомнить:#
DynamicUser=yes # =временный user без записи в /etc/passwd
ExecStartPre=/tmp/evil # если основной бинарь чист, то до его старта стартанем shell
systemctl mask auditd # cоздаётся
symlink на /dev/null = сервис не запускается, админ думает, что все ОК, а на самом деле service IS DEADsystemd-run --unit=evil --on-boot=5m /tmp/evil # получим рантайм unit, такой fileless persistence
KillMode=process # systemD грохнет только основной PID, а вот дочерние процессы могут выжить, ну а вних уже payload
#РубрикаНаЗаметкуХакеру
🔥23👍7😱4
This media is not supported in your browser
VIEW IN TELEGRAM
Firefox RCE
*
Это выглядит как сильно улучшенный вариант дыры от 2024 года (0.0.0.0 Day: Exploiting Localhost APIs From the Browser)
*
автор PoC заявляет:
Понаблюдаем
*
Это выглядит как сильно улучшенный вариант дыры от 2024 года (0.0.0.0 Day: Exploiting Localhost APIs From the Browser)
*
автор PoC заявляет:
Самое крутое в этом — это даже не RCE.
Дело в том, что я решил проблему с "универсальным маршрутизатором".
Созданный мной инструмент позволяет мне сканировать вашу домашнюю сеть с веб-страницы, которую я контролирую.
Я вижу устройства и порты.
Я вижу ваш роутер и его модель.
какой локальный IP-адрес у маршрутизатора
Понаблюдаем
👍23😱19🔥7