Skip to content

Commit 4d3611c

Browse files
committed
Added MIPSBE support to Samba exploit. Added a MIPSBE nop generator
1 parent 7266ebf commit 4d3611c

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed

modules/nops/mipsbe/better.rb

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
##
2+
# This module requires Metasploit: http://metasploit.com/download
3+
# Current source: https://github.com/rapid7/metasploit-framework
4+
##
5+
6+
7+
require 'msf/core'
8+
9+
10+
###
11+
#
12+
# MixedNop
13+
# ----------
14+
#
15+
# This class implements a mixed NOP generator for MIPS (big endian)
16+
#
17+
###
18+
class MetasploitModule < Msf::Nop
19+
20+
21+
def initialize
22+
super(
23+
'Name' => 'Better',
24+
'Alias' => 'mipsbe_better',
25+
'Description' => 'Better NOP generator',
26+
'Author' => 'jm',
27+
'License' => MSF_LICENSE,
28+
'Arch' => ARCH_MIPSBE)
29+
30+
register_advanced_options(
31+
[
32+
OptBool.new('RandomNops', [ false, "Generate a random NOP sled", true ])
33+
], self.class)
34+
end
35+
36+
def get_register()
37+
return rand(27) + 1
38+
end
39+
40+
def make_bne(reg)
41+
op = 0x14000000
42+
43+
reg = get_register()
44+
offset = rand(65536)
45+
46+
op = op | ( reg << 21 ) | ( reg << 16 ) | offset
47+
return op
48+
end
49+
50+
def make_or(reg)
51+
op = 0x00000025
52+
53+
op = op | ( reg << 21 ) | ( reg << 11 )
54+
return op
55+
end
56+
57+
def make_sll(reg)
58+
op = 0x00000000
59+
60+
op = op | ( reg << 16 ) | ( reg << 11 )
61+
return op
62+
end
63+
64+
def make_sra(reg)
65+
op = 0x00000003
66+
67+
op = op | ( reg << 16 ) | ( reg << 11 )
68+
return op
69+
end
70+
71+
def make_srl(reg)
72+
op = 0x00000002
73+
74+
op = op | ( reg << 16 ) | ( reg << 11 )
75+
return op
76+
end
77+
78+
def make_xori(reg)
79+
op = 0x38000000
80+
81+
op = op | ( reg << 21 ) | ( reg << 16 )
82+
return op
83+
end
84+
85+
def make_ori(reg)
86+
op = 0x34000000
87+
88+
op = op | ( reg << 21 ) | ( reg << 16 )
89+
return op
90+
end
91+
92+
def generate_sled(length, opts)
93+
94+
badchars = opts['BadChars'] || ''
95+
random = opts['Random'] || datastore['RandomNops']
96+
nop_fn = [ :make_bne, :make_or, :make_sll, :make_sra, :make_srl, :make_xori, :make_ori ]
97+
sled = ''
98+
99+
for i in 1..length/4 do
100+
n = nop_fn.sample
101+
sled << [send(n, get_register())].pack("N*")
102+
end
103+
104+
return sled
105+
end
106+
107+
end
108+

0 commit comments

Comments
 (0)