Перейти к содержимому
Максиметер

🐚 172 байта, которых нет: пишем null-free reverse shell на ARM64

🐚 172 байта, которых нет: пишем null-free reverse shell на ARM64 Финал моего цикла про shellcode на голом ассемблере. Сегодня - самое практичное: reverse shell, который умещается в 172 байта и не содержит ни одного нулевого байта. Тот самый payload, который можно зашить куда угодно Зачем null-free и зачем reverse? 🔍 Нулевой байт (\x00) - терминатор строк. Один такой в shellcode - и при копировании в строковый буфер payload обрежется на середине. А reverse shell вместо bind - потому что он сам стучится наружу, и NAT с входящими фильтрами ему не помеха. И вот тут ARM64 устроил мне весёлую неделю 😅 Оказывается, на этой архитектуре NULL-байт прячется там, где его не ждёшь вообще - в самих опкодах: 🔸 mov x0, #2 - безобидная строка? А вот нет: опкод содержит нулевой байт, потому что номер регистра-получателя x0 = 0. Сам РЕГИСТР даёт NULL! 🔸 cmp x14, #3 - маленькая константа → опять ноль в опкоде 🔸 mov x19, x0 - и тут ноль 😤 Решения - чистый underground: ✅ Константы собираем сдвигами в scratch-регистре: mov x15, #0x200; lsr x15, x15, #8 - вот вам двойка без единого нуля ✅ Сравнение - только регистровое ✅ Данные - на стеке через stp (кстати, sockaddr_in влез целиком в ОДНО 64-битное слово) ✅ svc #0xffff вместо svc #0 - ядру без разницы, а опкод чистый Бонус-грабля из комментариев в мою же лабу 🤦‍♂️ Запустил слушатель в фоне nc -lvnp 4444 & - и после первой команды он «умер» со статусом Stopped. Паника, дебаг... а это просто job control: фоновый процесс, читающий клавиатуру, получает сигнал SIGTTIN и встаёт на паузу. Лечится командой fg %1. Не все страшные строки в терминале - ошибки! Итог цикла (всё проверено на живом aarch64): 1️⃣ hello world на сисколлах - 2 вызова ядра 2️⃣ execve shellcode - 40 байт 3️⃣ bind shell - полный сетевой стек 4️⃣ reverse shell - коннект наружу 5️⃣ XOR-декодер - полиморфизм (привет, кэши ARM64!) 6️⃣ null-free reverse shell - 172 байта, шьётся куда угодно От «hello world» до зашифрованного сетевого шелла - своими руками, без Metasploit. Теперь я точно знаю, что происходит, когда msfvenom генерит payload 😎 Локальная лабораторная VM, educational only. Ломайте только своё! ⚠️

1 просмотров

Канал в каталоге Максиметера

254 подписчиков · Образование

Другие публикации канала

Популярные публикации канала

Ещё по теме «Образование»

Читать дальше

Два раза в неделю свежие посты этого канала — на почту и в личную ленту. Без повторного поиска канала вручную.