Module: PWN::Plugins::IPInfo

Defined in:
lib/pwn/plugins/ip_info.rb

Overview

This plugin leverages ip-api.com’s REST API to discover information about IP addresses 1,000 daily requests are allowed for free

Class Method Summary collapse

Class Method Details

.authorsObject

Author(s)

0day Inc. <[email protected]>



125
126
127
128
129
# File 'lib/pwn/plugins/ip_info.rb', line 125

public_class_method def self.authors
  "AUTHOR(S):
    0day Inc. <[email protected]>
  "
end

.get(opts = {}) ⇒ Object

Supported Method Parameters

ip_info_struc = PWN::Plugins::IPInfo.get(

target: 'required - IP or Host to lookup',
proxy: 'optional - use a proxy',
tls_port: 'optional port to check cert for Domain Name (default: 443). Will not execute if proxy parameter is set.'

)



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/pwn/plugins/ip_info.rb', line 55

public_class_method def self.get(opts = {})
  target = opts[:target].to_s.scrub.strip.chomp
  proxy = opts[:proxy]
  tls_port = opts[:tls_port]
  tls_port ||= 443

  ip_info_resp = []
  if IPAddress.valid?(target)
    ip_resp_json = ip_info_rest_call(ip: target, proxy: proxy)
    ip_resp_json[:target] = target
    ip_info_resp.push(ip_resp_json)
  else
    Resolv::DNS.new.each_address(target) do |ip|
      ip_resp_json = ip_info_rest_call(ip: ip, proxy: proxy)
      ip_resp_json[:target] = target
      ip_info_resp.push(ip_resp_json)
    end
  end

  if proxy.nil?
    ip_info_resp.each do |ip_resp|
      tls_port_avail = PWN::Plugins::Sock.check_port_in_use(
        server_ip: target,
        port: tls_port
      )

      ip_resp[:tls_avail] = tls_port_avail
      ip_resp[:ca_issuer_uris] = nil
      ip_resp[:cert_subject] = nil
      ip_resp[:cert_issuer] = nil
      ip_resp[:cert_serial] = nil
      ip_resp[:crl_uris] = nil
      ip_resp[:extensions] = nil
      ip_resp[:not_before] = nil
      ip_resp[:not_after] = nil
      ip_resp[:oscsp_uris] = nil
      ip_resp[:pem] = nil
      ip_resp[:signature_algorithm] = nil
      ip_resp[:version] = nil
      next unless tls_port_avail

      cert_obj = PWN::Plugins::Sock.get_tls_cert(
        target: target,
        port: tls_port
      )

      next unless cert_obj.is_a?(OpenSSL::X509::Certificate)

      ip_resp[:ca_issuer_uris] = cert_obj.ca_issuer_uris.map(&:to_s) unless cert_obj.ca_issuer_uris.nil?
      ip_resp[:cert_subject] = cert_obj.subject.to_s
      ip_resp[:cert_issuer] = cert_obj.issuer.to_s
      ip_resp[:cert_serial] = cert_obj.serial.to_s
      ip_resp[:crl_uris] = cert_obj.crl_uris.map(&:to_s) unless cert_obj.crl_uris.nil?
      ip_resp[:extensions] = cert_obj.extensions.map(&:to_s) unless cert_obj.extensions.nil?
      ip_resp[:not_before] = cert_obj.not_before.to_s
      ip_resp[:not_after] = cert_obj.not_after.to_s
      ip_resp[:oscsp_uris] = cert_obj.ocsp_uris.map(&:to_s) unless cert_obj.ocsp_uris.nil?
      ip_resp[:pem] = cert_obj.to_pem.to_s
      ip_resp[:signature_algorithm] = cert_obj.signature_algorithm.to_s
      ip_resp[:version] = cert_obj.version.to_s
    end
  end

  ip_info_resp
rescue StandardError => e
  raise e
end

.helpObject

Display Usage for this Module



133
134
135
136
137
138
139
140
141
142
143
# File 'lib/pwn/plugins/ip_info.rb', line 133

public_class_method def self.help
  puts "USAGE:
    ip_info_struc = #{self}.get(
      target: 'required - IP or Host to lookup',
      proxy: 'optional - use a proxy',
      tls_port: 'optional port to check cert for Domain Name (default: 443). Will not execute if proxy parameter is set.'
    )

    #{self}.authors
  "
end