librex 0.0.53 → 0.0.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@
3
3
  A non-official re-packaging of the Rex library as a gem for easy of usage of the Metasploit REX framework in a non Metasploit application. I received permission from HDM to create this package.
4
4
 
5
5
  Currently based on:
6
- SVN Revision: 13810
6
+ SVN Revision: 13882
7
7
 
8
8
  # Credits
9
9
  The Metasploit development team <http://www.metasploit.com>
@@ -7,9 +7,30 @@ module Railgun
7
7
  module Def
8
8
 
9
9
  class Def_advapi32
10
+
11
+ CREDENTIAL = [
12
+ [:Flags, :DWORD],
13
+ [:Type, :DWORD],
14
+ [:TargetName, :LPTSTR],
15
+ [:Comment, :LPTSTR],
16
+ [:LastWritten, :FILETIME],
17
+ [:CredentialBlobSize, :DWORD],
18
+ [:CredentialBlob, :LPBYTE],
19
+ [:Persist, :DWORD],
20
+ [:AttributeCount, :LPTSTR],
21
+ [:Attributes, :PCREDENTIAL_ATTRIBUTE],
22
+ [:TargetAlias, :LPTSTR],
23
+ [:UserName, :LPTSTR]
24
+ ]
10
25
 
11
26
  def self.create_dll(dll_path = 'advapi32')
12
27
  dll = DLL.new(dll_path, ApiConstants.manager)
28
+
29
+ dll.add_function('CredEnumerateA', 'BOOL', [
30
+ ['PCHAR', 'Filter', 'in'],
31
+ ['DWORD', 'Flags', 'in'],
32
+ ['PDWORD', 'Count', 'out'],
33
+ ['PBLOB', 'Credentials', 'out']])
13
34
 
14
35
  #Functions for Windows CryptoAPI
15
36
  dll.add_function( 'CryptAcquireContextW', 'BOOL',[
@@ -181,7 +202,7 @@ class Def_advapi32
181
202
  ['LPVOID', 'hHash', 'in'],
182
203
  ['DWORD', 'dwParam', 'in'],
183
204
  ['PBLOB', 'pbData', 'out'],
184
- ['PDWORD', 'pdwDataLen', 'out'],
205
+ ['PDWORD', 'pdwDataLen', 'inout'],
185
206
  ['DWORD', 'dwFlags', 'in']])
186
207
 
187
208
  dll.add_function( 'CryptHashSessionKey', 'BOOL', [
@@ -179,6 +179,42 @@ module Socket
179
179
  end
180
180
  end
181
181
 
182
+ #
183
+ # Wrapper for Resolv.getaddress that takes special care to see if the
184
+ # supplied address is already a dotted quad, for instance. This is
185
+ # necessary to prevent calls to gethostbyaddr (which occurs on windows).
186
+ # These calls can be quite slow. This also fixes an issue with the
187
+ # Resolv.getaddress() call being non-functional on Ruby 1.9.1 (Win32).
188
+ #
189
+ def self.getaddresses(addr, accept_ipv6 = true)
190
+ begin
191
+ if dotted_ip?(addr)
192
+ return addr
193
+ end
194
+
195
+ res = ::Socket.gethostbyname(addr)
196
+ return nil if not res
197
+
198
+ # Shift the first three elements out
199
+ rname = res.shift
200
+ ralias = res.shift
201
+ rtype = res.shift
202
+
203
+ # Reject IPv6 addresses if we don't accept them
204
+ if not accept_ipv6
205
+ res.reject!{|nbo| nbo.length != 4}
206
+ end
207
+
208
+ # Make sure we have at least one name
209
+ return nil if res.length == 0
210
+
211
+ # Return an array of all addresses
212
+ res.map{ |addr| self.addr_ntoa(addr) }
213
+ rescue ::ArgumentError # Win32 bug
214
+ nil
215
+ end
216
+ end
217
+
182
218
  #
183
219
  # Wrapper for Socket.gethostbyname which takes into account whether or not
184
220
  # an IP address is supplied. If it is, then reverse DNS resolution does
@@ -228,6 +264,13 @@ module Socket
228
264
  self.gethostbyname(Rex::Socket.getaddress(host))[3]
229
265
  end
230
266
 
267
+ #
268
+ # Resolves a host to raw network-byte order.
269
+ #
270
+ def self.resolv_nbo_list(host)
271
+ Rex::Socket.getaddresses(host).map{|addr| self.gethostbyname(addr)[3] }
272
+ end
273
+
231
274
  #
232
275
  # Resolves a host to a network-byte order ruby integer.
233
276
  #
@@ -235,6 +278,13 @@ module Socket
235
278
  addr_ntoi(resolv_nbo(host))
236
279
  end
237
280
 
281
+ #
282
+ # Resolves a host to a list of network-byte order ruby integers.
283
+ #
284
+ def self.resolv_nbo_i_list(host)
285
+ resolv_nbo_list(host).map{|addr| addr_ntoi(addr) }
286
+ end
287
+
238
288
  #
239
289
  # Converts an ASCII IP address to a CIDR mask. Returns
240
290
  # nil if it's not convertable.
@@ -274,6 +324,13 @@ module Socket
274
324
  resolv_nbo_i(addr)
275
325
  end
276
326
 
327
+ #
328
+ # Converts a ascii address into a list of addresses
329
+ #
330
+ def self.addr_atoi_list(addr)
331
+ resolv_nbo_i_list(addr)
332
+ end
333
+
277
334
  #
278
335
  # Converts an integer address into ascii
279
336
  #
@@ -82,9 +82,8 @@ class RangeWalker
82
82
  elsif arg =~ /[^-0-9,.*]/
83
83
  # Then it's a domain name and we should send it on to addr_atoi
84
84
  # unmolested to force a DNS lookup.
85
- addr = Rex::Socket.addr_atoi(arg)
86
- ranges.push [addr, addr]
87
- elsif arg =~ /^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)-([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)$/
85
+ Rex::Socket.addr_atoi_list(arg).each { |addr| ranges.push [addr, addr] }
86
+ elsif arg =~ /^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})-([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})$/
88
87
  # Then it's in the format of 1.2.3.4-5.6.7.8
89
88
  # Note, this will /not/ deal with DNS names, or the fancy/obscure 10...1-10...2
90
89
  begin
@@ -681,14 +681,14 @@ module Text
681
681
  # Base64 encoder
682
682
  #
683
683
  def self.encode_base64(str, delim='')
684
- [str].pack("m").gsub(/\s+/, delim)
684
+ [str.to_s].pack("m").gsub(/\s+/, delim)
685
685
  end
686
686
 
687
687
  #
688
688
  # Base64 decoder
689
689
  #
690
690
  def self.decode_base64(str)
691
- str.unpack("m")[0]
691
+ str.to_s.unpack("m")[0]
692
692
  end
693
693
 
694
694
  #
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: librex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.53
4
+ version: 0.0.54
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,10 +10,10 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-10-02 00:00:00.000000000Z
13
+ date: 2011-10-11 00:00:00.000000000Z
14
14
  dependencies: []
15
15
  description: Rex provides a variety of classes useful for security testing and exploit
16
- development. Based on SVN Revision 13810
16
+ development. Based on SVN Revision 13882
17
17
  email:
18
18
  - hdm@metasploit.com
19
19
  - jacob.hammack@hammackj.com