Commit Graph

4721 Commits

Author SHA1 Message Date
Spencer McIntyre 5bb109c41a Add a dlog line when an incomplete packet is requeued 2020-05-19 10:37:26 -04:00
OJ aac9173497 Update the changes with some commentary
I renamed the queues as well.
2020-05-19 08:07:48 +10:00
OJ ea552c414f Remove from iqueue instead of pqueue 2020-05-16 02:22:53 +10:00
OJ ef172086e5 Prioritise incomplete packets in the dispatch loop
In certain cases, packets would arrive before their handlers were ready
to handle them. This resulted in packets going into the incomplete list
and being re-queued into the packet input queue. This is a problem when
MORE packets arrive while processing because the older packets end up at
the end of the queue instead of the start of the queue. This means newer
packets are processed FIRST, and hence we have an out-of-order
sequencing problem.

This commit adds an "incomplete queue" which gets prioritised over new
packets. If packets are incomplete at any point, they are added to this
queue, and are dequeued prior to the new packet queue. This results in
packet sequences being maintained.

This was causing issues with things like port forwards. BUT NOT ANY
MORE!
2020-05-16 01:58:53 +10:00
bwatters-r7 6fae8f0ad4 Land #13358, Fix packet ordering check
Merge branch 'land-13358' into upstream-master
2020-05-08 13:23:27 -05:00
Spencer McIntyre 9769e04b6e Land #13322, CVE-2020-0668 Service tracing file junction overwrite 2020-05-07 09:47:20 -04:00
Alan Foster 61e17d3a2c Land #13406, Fix multiple DNS enumeration related bugs 2020-05-07 10:38:07 +01:00
Spencer McIntyre 73994ece12 Fix send_(tc|ud)p method signatures to match parent class
Rex::Proto::DNS::Resolver inherits from Net::DNS::Resolver however it
changes the signature of the send_tcp and send_udp methods, making it
break when a method from the parent class (such as #axfr) is called.
2020-05-05 16:54:32 -04:00
dwelch-r7 6ebcf950f6 Land #13392, Fix rex http client warnings 2020-05-05 20:35:45 +01:00
Alan Foster d5ca2e54bb Fix ruby 2.7 rex http client warnings 2020-05-04 19:32:16 +01:00
Spencer McIntyre 53359a5b4c Land #13325, Expand Environment Variables In Meterpreter's ls Command
Fixes #13318
2020-05-01 09:04:19 -04:00
cn-kali-team bea51d9d9a Using PATH_EXPAND_REGEX 2020-05-01 07:18:47 +08:00
OJ ae185d7ef7 Re-add the additional pop call
`pop` blocks the thread. This is important, otherwise CPU SPIKES.
2020-04-30 17:39:12 +10:00
Alan Foster fb3c953ff7 Fix uri escape in rex request for reverse http/https meterpreter shells 2020-04-29 20:23:22 +01:00
OJ 5dbb9e8ccc Fix packet ordering check
A long time ago prior to supporting both encrypted packets and packet
pivots, a bit of code existing in the packet dispatcher that reordered
packets before passing them on to the internal workings. This reordering
would prioritise responses first, it would put "channel close" messages
at the end, and the rest would go in between. It's a bit gross, but it
is what it is.

The key here is to note that for this ordering to happen, the code needs
to be able to access the packet header (to determine if it's request or
response), and to access the packet body (to get access to the method
and check if it's a channel close message).

When packet encryption came in this wasn't too much of a concern because
the packet decryption could happen as soon as the packet came off the
wire. This meant that both the header and the body were available for
consumption and everything sunshine, daisies and unicorn farts.

ENTER PACKET PIVOTING TO MESS THIS ALL UP!

As we're all fully aware (right?) encryption keys are per-session. So
this means that every session has its own set of keys, and hence to
decrypt a packet we need to make sure we've got the right session. This
was a no brainer before, because sessions read their own packets off
their own transports. But with pivots, that changed because packets
could appear on the transport that were intended for other sessions.

It appeared that the solution here was simple. When a packet is read off
the wire, just read the body in full without decrypting. Check the
session GUID to see if it matches the current session, or to see if it's
inteded for a pivoted session. If it's the latter, then use the pivot
session decryption key, if the former, use the current session's key.
Too easy, right?

Right?

There was an internal function that was invoked to dispatch packets
after the came off the wire, called `dispatch_inbound_packet`. It seemed
to make sense to decrypt the packet here because that was invoked across
the various transports. So code was added at this point to decrypt the
packets based on the appropriate session. Testing was done, things
seemed to work.

Fast forward to last night, where I lost a bunch of hours while working
on something that shouldn't be related. I have been changing the
mechanism used for methods so that we don't use strings, we instead use
identifiers (makes the noise on the wire smaller/less obvious, and
allows us to remove method strings from our payloads). Rather than
attempt to locate all the spots where the method IDs are either
hard-coded or generated, it made more sense to start with functionality
in the `Packet` class that would map between method strings and command
identifiers. In order to catch the case where we had a method string
that we didn't expect, I raise an exception when the method string
doesn't exist in the map of known strings.

This exception was a blessing and a curse. To cut this story a little
shorter, we ended up with the following situation:

* Packets would start coming in and the reader would read the header and
  then decode it so that we could find the size of the packet and read
  the packet body.
* The packet header was then in the clear, but the packet body was yet
  to be decrypted.
* The "prioritisation" hack would run, checking the packet type (which
  is fine because it's in the clear), then the method (which is not
  fine, because it hasn't been decrypted).

Prior to the work I was doing, the method id check would _always fail_
because the method string would come out blank.

After including my work, the exception literally killed the packet
dispatching, resulting in all kinds of horrid woes (such as having all
channels failing).

What this means is that since packet pivots came about, we have not been
correctly pushing channel close messages to the back of the queue before
processing. The result? I don't know! I know that we've had issues
raised against the code saying that packets are coming out of order in
certain cases when channels are in use, but I don't think that's
related. What's clear is that I broke it when I did the packet pivots,
and I've only just realised it now.

So this code is intended to fix the problem and make sure that channel
close messages are pushed to the back like they were before.

At this point, people should be well aware of how easy it is for me to
break things, and therefore revoke my access to anything with
a keyboard.
2020-04-29 09:37:17 +10:00
cn-kali-team d703284785 Add filter 2020-04-24 23:33:25 +08:00
cn-kali-team b2e26e232f Fixes #13318 Recursive directory listing 2020-04-24 11:32:47 +08:00
bwatters-r7 0bbb822fe4 Working through mountpoint issues 2020-04-21 09:54:45 -05:00
gwillcox-r7 07db3c260a Initial improvements to screenshot command to fix #13182 2020-04-17 16:32:41 -05:00
Brent Cook 576b575333 Merge branch 'master' into land-13154- 2020-04-10 08:23:51 -05:00
Adam Galway 405e7b108b Land #13132, removes EOL spaces 2020-03-30 17:49:18 +01:00
cn-kali-team 50cd69471c Specify the window class name to display. 2020-03-27 23:07:01 +08:00
cn-kali-team fb66097212 Add window class name to window enumeration 2020-03-27 23:05:41 +08:00
cn-kali-team 126d2b3da3 Add window class name to window enumeration 2020-03-27 23:05:29 +08:00
bwatters-r7 17d78ecb4b Land #13059, Limit Option Sizes When Appropriate
Merge branch 'land-13059' into upstream-master
2020-03-24 17:01:21 -05:00
Spencer McIntyre b3b6450958 Land #12988, use the API for users and groups
This adds and uses the functionality to leverage the Windows API for
managing users and groups via meterpreter sessions. This replaces
relevant functionality in a few modules which previously relied on shell
commands.Merge branch 'pr/12988' into upstream-master
2020-03-24 16:06:52 -04:00
Spencer McIntyre d92d1448ef Minor whitespace and verbage cleanups 2020-03-24 16:03:40 -04:00
Auxilus 260099b506 remove spaces at EOL 2020-03-24 18:15:31 +05:30
Tim W 1807461882 Land #13069, fix channel args and powershell_shell 2020-03-13 13:09:49 +08:00
William Vu 5e65021914 Land #13054, PPID_NAME fix for Windows migrate 2020-03-12 17:35:39 -05:00
Spencer McIntyre f43c547a56 Fix args when directly opening a channel 2020-03-12 15:45:31 -04:00
g0t mi1k 204e4d8cdb Switch to preferred style (ruby) 2020-03-12 09:59:08 +00:00
Tim W 5081496786 fix rapid7/metasploit-framework#13060 2020-03-12 16:57:14 +08:00
Spencer McIntyre db9626153b Minor refactoring for style, whitespace, etc. 2020-03-11 11:56:15 -04:00
Timo Mueller 42997be4ae Added maximum string length check in meterpreter payload generation 2020-03-11 11:55:18 -04:00
Timo Mueller a6ee63bb6a removed print 2020-03-11 11:41:38 -04:00
Timo Mueller e8686caa02 Implemented size check for items within to_str 2020-03-11 11:41:38 -04:00
g0t mi1k bba65ac090 Fix #13053 - post/windows/manage/migrate & PPID_NAME
If its blank, no point in going forward!
2020-03-10 12:54:00 +00:00
William Vu 09b1fddbd7 Add hex-noslashes to Rex::Proto::Http::Client 2020-03-10 01:21:01 -05:00
cn-kali-team 2c3ad585a3 Add the enumeration function 2020-03-07 20:56:58 +08:00
Brent Cook 349051531a Land #12984, update local socket parameters when opening channels 2020-03-05 10:52:12 -06:00
cn-kali-team 106ef40376 Add Function alloc_and_write_wstring and alloc_and_write_string 2020-03-01 14:28:46 +08:00
cn-kali-team e9c16fb2bb New Function and Fix data type in the NetLocalGroupAddMembers parameter 2020-02-29 00:20:09 +08:00
cn-kali-team 2ef04153b4 Add Api Constants 2020-02-29 00:18:48 +08:00
Spencer McIntyre 078652749d Switch how channel class args are passed around 2020-02-28 10:10:47 -05:00
cn-kali-team 04d54bc786 Added additional netapi32.dll functions 2020-02-25 20:00:21 +08:00
Spencer McIntyre e5fc41a22f Refactor the initialize method to use 'packet' 2020-02-24 14:01:01 -05:00
Alan Foster 00df264bc9 Land #12916, Colorize HttpTrace output, add an option to show headers only 2020-02-24 11:42:21 +00:00
bwatters-r7 2db93c9051 Land #12002, Feature/reverse ssh
Merge branch 'land-12002' into upstream-master
2020-02-21 09:17:51 -06:00
bwatters-r7 1aa412ccc0 add some of bcoles suggested fixes 2020-02-19 13:52:38 -05:00