Commit Graph

8406 Commits

Author SHA1 Message Date
RageLtMan deef4a94fe Allow DNS::Server::Cache to find '*' names
Allow retrieval of '*' from stored static entries for spoofing
all domains to any IP using wildcard names. Replace the wildcard
response with the name submitted to the search in the response.

Fix improper checks in DNS::Packet for Resolv objects from decode
to encode.

Misc cleanup for records not responding to :address, convenience
methods, and packet structure.
2017-06-23 19:59:01 -04:00
RageLtMan f24448c73a Add :client accessor to Remote::DNS::Client
Add convenience method for using the @dns_resolver instance var
via call to :client, which also performs resolver setup if none
exists when called.
2017-06-23 19:58:42 -04:00
RageLtMan dafadb94ff Address Egypt's GH comments
Remove redundant convenience accessors.
Clean up conditional logic.
Use Egypt's clean process_nameservers method.
2017-06-23 19:58:40 -04:00
RageLtMan de0867aaba Address wchen-r7's initial comments
Advanced options are now camel cased
Use :blank? on datastore options instead of serial checks for :nil?
and :empty?
Rex::Proto::DNS::Server :on_client_data updated to ask the tcp_sock
to close this client if it exists in the rescue clause.
2017-06-23 19:58:38 -04:00
RageLtMan 2347c8df99 Create basic packet manipulation modules
Create Rex::Proto::DNS::Packet and Packet::Raw to allow common
parsing, validation, and raw data operations across both Rex and
Msf namespaces.

The modules contain class methods and do not need to be mixed in
to use their functionality Packet.method is enough, and reduces GC
strain since new objects are not constantly being instantiated, and
these modules contain no internal state.

Clean up UDP socket leak from Rex::Proto::DNS::Server under certain
conditions.

Create Msf::Exploit::DNS::Common mixin to provide descendants with
access to Packet and the hostname Regex.

-----

Testing:
  Tested running the RC provided in the pull request
  Manual testing in IRB/Pry while porting PoC for CVE-2015-7547
2017-06-23 19:58:37 -04:00
RageLtMan 2679c26e88 Create and implement Rex::IO::GramServer mixin
Rex::IO::StreamServer provides consistent methods and accessors
for TcpServer type consumers, but includes logic for client actions
which are not relevant in a datagram context - connect and
disconnect actions, as well as any notion of stateful session
persistence (the clients queue) do not apply in this paradigm.

Implement a Rex::IO::GramServer mixin which provides common methods
for dispatching requests and sending responses. Defines the same
callback structure for procs as used in the StreamServer, though
utilizing dispatch_request_proc and send_response_proc with client
and data parameters for efficient interception of execution flow
when dealing with stateless comms.

Rewire Rex::Proto::DNS server to use instance variables along the
same convention as other modules, implement the GramServer mixin,
and minor misc cleanup.

-----

Change calling conventions in Rex::Proto::DNS::Server to match
other components.

Clean up the Msf::Exploit::DNS namespace with generic server
interfaces.

Fix the advanged options naming convention - as hdm pointed out,
evasion options use the '::' separator, advanced options use "_".

-----

Testing:
  Basic functional tests in Pry for now.
2017-06-23 19:58:37 -04:00
RageLtMan 8f9d98775b Export common socket functionality from TcpServer
Exploit::Remote::TcpServer contains functionality required by the
hybrid Udp/Tcp Exploit::Remote::DNS::Server. In order to avoid
having to maintain a set of compatible methods across the transport
implementations, create a new mixin "above" the TcpServer to handle
common socket operations - Exploit::Remote::SocketServer.

Copy Exploit::Remote::TcpServer to Exploit::Remote::SocketServer.
Remove common code from Exploit::Remote::TcpServer, remove TCP/SSL
specific code from Exploit::Remote::SocketServer. Require and
include Exploit::Remote::SocketServer in Exploit::Remote::TcpServer

Testing:
  Basic testing using the telnet capture server which utilzies the
modified Exploit::Remote::TcpServer mixin:

```
use auxiliary/server/capture/telnet
(2016-02-28)15:23 (S:0 J:0)msf  auxiliary(telnet) > exploit
[*] Auxiliary module execution completed
(2016-02-28)15:23 (S:0 J:1)msf  auxiliary(telnet) >
[*] [2016.02.28-15:23:39] Listening on 0.0.0.0:23...
[*] [2016.02.28-15:23:39] Server started.
[*] [2016.02.28-15:23:48] TELNET LOGIN 127.0.0.1:60408 jack / jill
Interrupt: use the 'exit' command to quit
```
2017-06-23 19:58:37 -04:00
RageLtMan 0e5ec4c646 Fix processing of static hosts in Msf...Server
The add_static_hosts method used old interfaces and had not been
tested prior.
Address the interfaces, functionally check the logic, and add the
method into start_service to automatically process the static
hosts entries set in the DS.
2017-06-23 19:58:36 -04:00
RageLtMan 2f0003b5bd Implement native DNS for Msf Namespace
Built atop the Rex::Proto::DNS work to implement mixins for client
and server functionality, providing common interfaces for querying
domain name servers, and providing domain name services to clients
across Rex sockets. Fully functional native DNS server module is
included to demonstrate functionality, serve as a spoofing DNS
server, a collecting proxy, or any other number of DNS functions.

-----

At the core of this work is a Rex::Proto::DNS::Resolver object
descended from Net::DNS::Resolver with overrides and alterations
for using Rex sockets. The sockets implementation has been in use
internally for a number of years and is well tested. Changes have
been made to provider better interface for higher level components.

The resolver provides forward lookup capability for the server
(Rex::Proto::DNS::Server) which also implements a self-pruning
Cache subclass capable of holding static entries. The server can
operate in TCP or UDP mode, and provides a common abstraction for
addressing TCP and UDP clients by passing a Rex::Socket::Udp
mock client around with the data object to higher level consumers.
Finally, as is standard practice when building full service objects
from Rex to Msf, the server allows consumers to efficiently take
execution control at the request and response handlers by passing
Procs into the constructor (or manually assigning at runtime) for
execution instead of the default call chain.

The service, lookup, and caching functionality is encapsulated and
stands on its own to be used by consumers other than the standard
Msf::Exploit::Remote namespaces. It is intended to serve as the
driver and transport handler for pending DNS tunnel transports,
and can be used by exploit and auxiliary modules directly.

-----

The Msf::Exploit::Remote namespace receives DNS, DNS::Client, and
DNS::Server mixins providing common interfaces for Rex::Proto::DNS
objects. These mixins create convenience methods for executing
queries, serving requests, and configuring the Rex providers.

DNS::Client mixin attempts to "intelligently" configure the client
resolver's name servers and options from the data store. Accessor,
query, and configuration methods are provided in this mixin. Of
note are the wildcard and switchdns methods which were adapted
from prior work by others (likely Carlos Perez) which can be used
by numerous consumer modules. Consumers should use setup_client
during their run call to ensure the resolver is appropriately
configured.

DNS::Server mixin creates common service wrappers for modules to
utilize along with a configuration mechanism analagous to the
one used by the Client mixin, called setup_server, and calling
the setup_client method if present. Note that when setup_server
is called, the consumer does not need to call setup_resolver.

------

At the framework module level, a native dns server is provided
to showcase the mixin functionality and provide everything from
normal DNS services, to tunneling proxies (with cache disabled),
spoofing services, and MITM functionality via the handler Procs
for requests and responses.

Use auxiliary/server/dns/native_server to get started.

-----

Testing:
  Basic local testing completed.
  Needs to be checked for info leaks - we used to leak a lot.
  Needs to be checked for functionality under varying configs.

Notes:
  We have a serious problem with the datastore somewhere in the
Msf namespace. Datastore options must be validated with
options.validate(datastore) or they are all Strings, which
completely destroys any type-dependent logic consuming
datastore values. This must be addressed separately and all
calls to options.validate(datastore) should be removed (other
work has included such calls as well, this just proved that
the problem exists upstream).

Future work:
  Implement sessions transports atop the DNS infrastructure in
order to provide native DNS tunneling.
2017-06-23 19:58:35 -04:00
David Maloney c307cfab50 Land #8592, rpc module info
enhance module details returned by the RPC
2017-06-22 14:18:39 -05:00
Brent Cook f96f61d29e enhance module info to be on par with pro RPC interface 2017-06-21 08:36:49 -05:00
RageLtMan 42d1fae2e6 Upstream console search additions and fixes
The -S flag for console commands, backed by search functionality
in Rex' tables, originally pushed upstream in #1604 (iirc), lacks
coverage for a number of commands which benefit a good deal from
inline filtering of the potentially large number of results.

Push more -S flags and surrounding table functionality upstream
to provide coverage for the console commands included in framework.

Include a fix for deleting hosts when DB references are a problem.

Include a fix for the upstream route command wherein scope must be
defined for the routing target by assuming a /32 without explicit
definition.

Note:
  With this in place, console behavior when filtering results is
roughly analagous to the R7 filtering in web UI, which should help
those of us trying to use both maintain corresponding workflows.

Testing:
  Used in-house for years, though changes to the diff from upstream
and our fork (expunging some internal code) are untested, so would
appreciate eyes and hands on.
2017-06-16 20:28:51 -04:00
Brent Cook 55b71e115f Land #8535, MSGRPC module minor fixes 2017-06-15 21:44:34 -05:00
Brent Cook bf674263f3 Land #8533, record vulnerability attempts 2017-06-09 17:52:49 -05:00
TheNaterz 40fafaa270 dereference the service from the service manager 2017-06-09 16:24:01 -06:00
Jeffrey Martin 2b6f823a1b store vuln attempt when reported 2017-06-09 12:46:39 -05:00
David Maloney c89fee89db Land #8529, RPC Session Arch
Lands pr adding Session arch to info
returned by rpc
2017-06-09 11:58:19 -05:00
TheNaterz c3b2476a51 add arch to rpc session details 2017-06-08 16:26:13 -06:00
William Vu 4198efa41f Remove pry from CommandDispatcher::Creds...
My bad. Should have been caught in #8517.
2017-06-08 00:18:46 -05:00
William Vu 3e27fd3db4 Land #8517, CommandDispatcher::Common
Also fixes jobs -i.
2017-06-07 03:20:45 -05:00
William Vu 596924552e Fix literal \n in jobs -i
Regression from #4063.
2017-06-07 03:19:30 -05:00
Spencer McIntyre a052ee4064 Use the opts hash not the datastore 2017-06-06 20:02:06 -04:00
Spencer McIntyre 834e0eba95 Land #8340, add exception handling for rev_tcp_ssl 2017-06-06 19:09:15 -04:00
Spencer McIntyre a953d94f61 Minor white space cleanups for PR #8340 2017-06-06 19:07:55 -04:00
Brent Cook 0830e4aaa5 Land #8503, Linux x86 reverse_tcp error handling 2017-06-06 06:36:55 -05:00
darkbushido f4013b02e1 renaming db_common to common
this moves the following methods into common
  arg_host_range ( used in creds and db )
  arg_port_range ( used in creds and db )
  set_rhosts_from_addrs ( used in creds and db )
  show_options ( used in jobs and modules )
2017-06-05 14:19:18 -05:00
Brent Cook 8c35e54934 Land #8495, Expand multi-handler for generic http(s) sessions 2017-06-04 20:21:32 -05:00
itsmeroy2012 39cee481c1 Making changes similar to the reverse_tcp payload 2017-06-03 22:57:59 +05:30
tkmru 82a83af6c2 add error handling to x86 linux reverse tcp 2017-06-03 04:04:55 +09:00
William Vu abeececb46 Land #8493, creds -R fix with DbCommon 2017-06-01 14:19:16 -05:00
Jeffrey Martin ccf54f464c Expand multi-handler for generic http(s) sessions 2017-05-31 14:35:18 -05:00
darkbushido 2682874652 fixing a busted -R on creds search
I broke this when moving creds to its own file.
2017-05-30 15:56:51 -05:00
Brent Cook ee57c7188e Land #8470, remove broken check for invalid options 2017-05-30 00:35:46 -05:00
Brent Cook a01a2ead1a Land #8467, Samba CVE-2017-7494 Improvements 2017-05-30 00:15:03 -05:00
HD Moore 66f06cd4e3 Fix small typos in comments 2017-05-28 14:40:33 -05:00
Spencer McIntyre 4e29b6e5fd Land #8275, add retry opts for py rev_tcp stager 2017-05-28 13:02:35 -04:00
Spencer McIntyre 2ca53eaebf Minor white space cleanups for PR #8275 2017-05-28 12:59:06 -04:00
itsmeroy2012 e02d726213 Setting default values to the added options 2017-05-28 14:30:30 +05:30
Brent Cook b7620e13a3 remove special case check for invalid options 2017-05-27 00:53:14 -05:00
HD Moore 8caaba01f1 Add share enumeration methods to the SMB mixin 2017-05-26 17:01:18 -05:00
HD Moore 18a871d6a4 Delete the .so, add PID bruteforce option, cleanup 2017-05-25 16:03:14 -05:00
itsmeroy2012 92a1a3ecf7 Adding for loop instead of while, removing 'counter' 2017-05-25 15:09:34 +05:30
HD Moore 0520d7cf76 First crack at Samba CVE-2017-7494 2017-05-24 19:42:04 -05:00
Renato Piccoli 29d1022ae2 Fix the rake spec failures under ruby 2.4.
Ths typo3_spec is giving some errors under ruby 2.4+
and OpenSSL 1.1+.
2017-05-21 21:56:04 +02:00
Pearce Barry a6f416e8df Land #8290, Hwbridge Automotive Fix and Extension Enhancements 2017-05-19 13:46:54 -05:00
Brent Cook 22828fcc0f Land #8406, add compatibility shims for older Ruby versions 2017-05-18 21:50:45 -05:00
James Lee 4def7ce6cc Land #8327, Simplify storing credentials 2017-05-18 16:49:01 -05:00
Jeffrey Martin 1af6c08356 Land #8409, mark osx-app macho as executable 2017-05-18 09:28:01 -05:00
Tim a68a1858a9 Fix #7703, mark osx-app macho as executable 2017-05-18 18:24:35 +08:00
Brent Cook c59371dd5e add ruby backports compat library 2017-05-17 23:41:20 -05:00