1
mirror of https://github.com/rapid7/metasploit-payloads synced 2025-05-26 16:53:20 +02:00

85 Commits

Author SHA1 Message Date
OJ
effe6b9827
Lots of changes + stdapi support 2020-06-25 10:30:49 +10:00
OJ
c7f7bc2fc0
Remove method strings from TLV packets
We now use ints, and hopefully this means we don't have as much obvious
stuff in the binaries!

```
$ # Before:
$ strings metsrv.x86.dll | grep core_ | wc -l
46
$ # After:
$ strings metsrv.x86.dll | grep core_ | wc -l
0
```
Big win, and it's even bigger for the likes of stdapi.

Had to fix a bunch of other stuff along the way, including a subtle
issue with the Powershell Meterp bindings.
2020-04-28 23:41:06 +10:00
OJ
4ffe127f04
Begin removing the delay-load dependency
The 'common' library has been removed. The only project that actually
used it was metsrv, so the code that metsrv required from common is now
directly compiled in as part of that project.

The common folder now contains files that are importanta cross all of
the projects, with a primary focus on the new "API" style function. What
this means is that MetSrv has an API that it exposes through a function
pointer that is passed to the extension when it's initialised. This
pointer references a structure with all the API functions wired in. This
means that:

* Extensions don't need to know anything about metsrv at compile time.
* The delay loading code can be removed, which was one of the last
  instances of "metsrv.dll" as a string.
* Metsrv.dll no longer exports any functions.

More to come.
2020-04-22 13:06:40 +10:00
Spencer McIntyre
03ddbd773e Send addrinfo when opening a channel in Windows 2020-02-24 18:40:12 -05:00
OJ
f96fe3542f
Next phase of packet pivot work 2017-07-06 15:40:32 +10:00
Brent Cook
0a2d768e77 delete Linux meterpreter support 2017-05-14 02:11:57 -05:00
OJ
4763c24cfe Small tidy, and adding of debug code 2016-05-03 12:09:46 +10:00
OJ
d6387fcd90 Typedef the sockaddr_in6 struct for POSIX 2016-04-06 16:14:27 +10:00
OJ
61b91d276b Enable support of IPv6 address binding 2016-04-06 15:38:03 +10:00
OJ
e2285737a8 Make comment a little more sensible 2016-03-09 08:53:21 +10:00
OJ
62455e57f9 make the GetIpAddr function interactions deal with dynamic size 2016-03-09 08:27:59 +10:00
Brent Cook
fc26790e9a simplify error handling, remove 30 IP limit, remove unneeded free() checks 2016-03-08 03:50:32 -06:00
OJ
f015f53b6b Fix network interface enumeration limitation
This moves the existing network interface enumeration code over to the
group TLV packet approach which allows for arbitrary numbers of entities
to be added on the fly instead of fixed numbers.
2016-03-08 12:11:27 +10:00
James Lee
4d37ec6646
Don't fall back to 0.0.0.0
This allows the client side to determine whether to fall back and gives
the user a better chance of seeing that it isn't listening where they
told it to.
2015-10-30 11:46:25 -05:00
OJ
fe566d5f07 Moved transport stuff from core to metsrv
Lots of transported related things were in the core library which didn't make any sense given that the only thing that needed it was metsrv. This moves the functionality out into metsrv, reformats stuff and gets rid of some dead code.

TODO: Make this work with POSIX.
2015-04-23 19:41:25 +10:00
OJ
31fdf23f7b Comment fixes 2013-11-26 06:56:34 +10:00
OJ
9f4a66ba8a Fix small issue with return results 2013-11-25 16:28:47 +10:00
OJ
0864ef2e34 Fix incorrect error usage and bind issue
During the call which establishes a TCP client channel, the call
to `connect` can sometimes fail if the settings that are used are
incorrect (such as an invalid port number). When this call fails
the result was being set to `GetLastError()`, which isn't correct.

On Windows it should be `WSAGetLastError()` and on POSIX the `errno`
value should be used instead. This wasnt causing issues on Windows
but on POSIX it was causing problems because the `GetLastError()`
call was returning zero, which was returned to the function that
invokes `create_tcp_client_channel()`.

Given that `ERROR_SUCCESS` == 0, the caller believed the function
had completed successfully and hence relied on context being set up
correctly. This was resulting crashes because this obviously wasn't
the case.

I also added a code chance which makes meterpreter attempt to bind
to `0.0.0.0` if binding to the specified address fails.
2013-11-22 09:02:06 +10:00
James Lee
b391792bd1 Land , scheduler and channel refactor 2013-11-14 01:04:45 -06:00
James Lee
07aec8068b Land , fix for ipv6 ipconfig 2013-11-07 14:44:27 -06:00
OJ
d93a78e305 Merge branch 'upstream/master' into channel_refactor_2
Conflicts:
	source/common/arch/posix/scheduler.c
	source/common/arch/win/scheduler.c
2013-11-07 08:09:51 +10:00
OJ
5986ccf235 Add the getproxy command
This allows for system proxy setting to be pulled out. Windows-only at
this point.
2013-10-30 17:25:51 +10:00
OJ
8fe249dd52 Fix ipconfig command to show IPv6
This commit also contains fixes for proper extraction of subnet masks
based on operating system.
2013-10-29 10:21:09 +10:00
OJ
2f200d4fa1 Fix up POSIX to match channel changes
POSIX was out of whack with Windows as a result of the changes made
around channels. The schedular in posix was very different, and this
commit brings it into line.

Other than the obvious issues, a non-obvious issue with the changes
was that the channel was being freed up on close prior to the thread
terminating. This doesn't appear to be an issue on Windows, but was
causing crashes on close in POSIX.

The changes go quite deep. This changeset requires a lot of testing.
2013-10-22 16:43:22 +10:00
OJ
a89d79d139 Interactive channel refactor
The goals of this work are:

* To fix issue where backgrounding and re-interacting with channels wasn't
  working.
* To fix issue where closing of meterpreter was not closing off background
  prcoesses (such as cmd.exe).

The two things preventing this stuff from working were:

* When interactive channels are backgrounded their handles were destroyed
  along with the context that wraps them up. Making them interactive again
  had no impact because the handle and context were invalid. If anything,
  this made meterpreter unstable. Sometimes the session would die when
  attempting to interact with the channel again.
* When closing channels, there was no way of terminating the process that
  sat behind the scenes because no reference to the process was retained.
  Channels would close and handles would close, but no process termination
  was done.

To fix these problems:

* The interactive thread no longer terminates when backgrounded. Instead
  its put in a suspended state where it's waiting a signal from a resume
  handle that's associated with the channel's context. This means that the
  destruction of the context doesn't happen at all until the termination
  of the channel, which is exactly when it should happen anyway.
* Process handles are stored alongside the input/output handles so that
  when the time comes, the process can be terminated if required. This
  means that when the channels are closed, the code has a reference to the
  associated process which can be terminated. This is only done for
  interactive processes, non-interactive processes do not have this
  problem because meterpreter doesn't have to keep track of them.
2013-10-21 22:13:59 +10:00
OJ
9feec64d96 Remove strcpy calls, proper use of strncpy/strcpy_s
Replaced all usages of `strcpy` with `strncpy` or `strcpy_s`.

Make sure that all usages of `strncpy` specified the correct buffer size.
2013-10-16 11:55:29 +10:00
jvazquez-r7
07a45634bb Land , @OJ's fix for PIP_ADAPTER_PREFIX Length check 2013-09-26 17:46:32 -05:00
OJ
60b4a5778d Better fix for the XP SP0 problem
Thanks to @jvazquez-r7 doing some investigation we have a better solution
to this crash. This commit implements this fix and removes the need to
check the status of the memory that's being read.
2013-09-27 08:32:31 +10:00
Meatballs
1ed1fa6e94 Fix indent and nitpick 2013-09-19 20:22:45 +01:00
Meatballs
2182a891b6 Correct indent 2013-09-17 19:24:39 +01:00
Meatballs
4090e197aa Merge branch 'master' of github.com:rapid7/meterpreter into ip_resolv 2013-09-17 19:19:51 +01:00
Meatballs
4f1c2fe1ed Dont build in nix 2013-09-17 19:18:44 +01:00
OJ
8070ff7771 Possible fix for XP SP0 System process exploit crash
Exploitation of the System process on Windows XP SP0 resulted in crashes
when metepreter was enumerating network interfaces. It appears that the
System process isn't able to read from the address that contains prefixes
(stored in pPrefix in interfaces.c). In other cases, such as exploitation
of svchost.exe or via an msfpayload-generated exe, there was no such
crash. This is not an issue on later versions of Windows.

This crash happens in the current "production" version of Meterpreter that
was deployed with MSF v4.7.

The MS08-067 exploit targets the System process, and hence crashes.
The MS03-26 exploit targets svchost, and hence does not crash.

Checking the protection of the memory in each of those cases showed that
the MEM_COMMIT was set when not the System process, and was MEM_RESERVED
when it was. Sample runs can be seen here: http://pastebin.com/2WHqJ90A

This commit is an attempt to avoid this crash down the track, and it just
does a simple check to see if querying the area of memory for the current
process shows a state of MEM_COMMIT. If so, it carries on as per normal,
if not it uses the other legacy code path to traverse the network
interfaces.

With this "fix" in place I have not seen a crash at all on Windows XP,
Windows 7, Windows 8 and Windows 2012.
2013-09-16 23:14:10 +10:00
OJ
87031e0d00 Work towards a clean build
* Various code fixes to keep the compiler warnings down.
* Adjustments to project files.
2013-09-03 16:49:09 +10:00
Meatballs
071ff00a38 IPv6 resolution and remove nix 2013-06-20 22:29:49 +01:00
Meatballs
9b775f33d3 Add debug statements 2013-04-19 14:48:05 +02:00
Meatballs
b96062380c Use getaddrinfo 2013-04-19 11:06:52 +01:00
James Lee
7cafff29f5 Fix compilation on Linux
Doesn't work, but at least it compiles
2013-04-17 18:08:14 -05:00
James Lee
ee5efcfb58 whitespace 2013-04-17 17:43:33 -05:00
Meatballs
87dae3d449 Add file and project changes 2013-04-14 11:09:12 +01:00
Meatballs
85dc7cc96e Newline at EOF 2013-04-14 11:04:08 +01:00
Meatballs
aecf0b28d4 Final 2013-04-14 10:59:34 +01:00
Meatballs
0395a6cb3e correct indent 2013-04-11 21:10:55 +01:00
Meatballs
94de029ee2 Initial attempt 2013-04-07 23:04:54 +01:00
James Lee
7283131279 Initial source import from metasploit-framework 2012-11-19 16:46:07 -06:00
jlee-r7
964bae0c49 Initial commit 2012-11-19 14:40:03 -08:00
m m
b7a464292c I was pretty sure to have removed those fclose before 2012-09-12 13:11:24 -05:00
m m
c8b85f9587 fix netstat program name 2012-09-12 13:11:24 -05:00
m m
2860d0481e fix netstat program name 2012-09-12 13:11:24 -05:00
James Lee
e3915b99e4 Whitespace at EOL 2012-08-28 17:02:37 -05:00