1
mirror of https://github.com/rapid7/metasploit-payloads synced 2024-12-08 23:33:07 +01:00
Commit Graph

473 Commits

Author SHA1 Message Date
OJ
719dbe2b51 PR tidy based on feedback
* Updated `thread_create` so that it has 3 parameters, and removed
  `thread_create3`.
* Updated all calls to `thread_create` and added the extra parameter of
  `NULL`.
* Fixed comment typo.
* Removed assignment where value is not used.
* Checked for `NULL` prior to setting the result.
* Undefined `DEBUGTRACE`.
2013-10-18 06:30:31 +10:00
OJ
3b40f1abd0 Command refactor for clean shutdown + inline calls
This work contains a bunch of changes around command dispatching. The
goals for this bit of work were to:

* Provide the ability for commands to be executed on the same thread as
  the server rather than always creating new threads and executing them on
  those threads.
* Have the means for _special_ commands, such as `exit` and `migrate` to
  shut down the server cleanly without having to rely on signalling across
  threads or by doing brutal thread termination via shared global handles.
  This should not only fix the dirty shutdown problem on Windows which
  leaves tasks dangling (or based on the prior attempt at fixing, crashing
  stuff as well), it should also help clean up the shutdown process in
  POSIX.

These changes hit a very important part of Meterpreter and so should be
reviewed with intense scrutnity. I expect this PR to garner a log of
critique and most likely a number of changes before being included in the
main line.

The `PacketDispatcher` was modified to include a new function pointer
called an `inline_handler`. This new member indicates that there's a
handler which should be invoked inline. While this sits alongside the
existing `handler`, they are actually mutually exclusive. If an
`inline_handler` is specified then the `handler` is ignored and it is
assumed that the command is intended to be handled inline. The signature
of the inline handler is different to the standard handler, and this is
why a new function pointer was added rather than a simple flag. Addition of
this parameter meant that the basic command structure changed, and that
obviously affects all of the extensions and their respective commands.
This changeset therefore updates each of those command declarations so
that they use the new macros that hide this detail.

Other things to be mindful of:

* This version of the code reads the command's `method` prior to invoking
  any other function, and after that the command itself is passed around to
  the threaded or non-threaded routes for invocation. An extra thread
  parameter was included as as result, and an overload for the
  `thread_create` function was added which supported this new parameter.
  This was named `thread_create3` because
  `thread_create_with_another_paramter` sounded a bit crap.
* The migration code, which originally had a `thread_kill` and an event
  wait once the new meterpreter session had been created, has been modified
  to not do any waiting at all. Instead it finishes execution as fast as
  possible and returns control to the server which should respond by
  shutting down in a clean way.
* Originally the code always attempted to call a command handler in the
  base command list and then, if found, would also call an "overload" in
  the extension commands list. From the investigation that I did, it
  appears that the overloaded methods did nothing in the base (they'd
  early out during invocation). As a result, the new way of doing things
  acts like a 'true' overload in that the extension commands are searched
  first, and if one is found this is the command that is executed. Any
  base commands with the same method name will not get executed. In the
  case where there is no extension command found, the base command list is
  then queried. If a command is found that command is instead invoked.
* The POSIX version still compiles cleanly, but I've never been able to
  build a version that runs on my machines. I'm not sure if there's a
  trick to getting POSIX builds to run, and if there is I don't know it.
  Whoever scrutinises this build should make sure that the POSIX version
  that they build can still run and (hopefully) exit cleanly.

I've added lots of documentation, but there's always room for improvement.

Hopefully this will fix the `*_tcp` side of Redmine 8438.

Bring on the feedback!
2013-10-17 22:36:49 +10:00
James Lee
259545172f Whitespace 2013-10-16 20:03:47 -05:00
James Lee
648d341588 Land #29, new 'bare' extension
Replaces 'boiler'
2013-10-16 20:00:06 -05:00
James Lee
12140d10b4 Land #31, doxygen 2013-10-16 19:44:03 -05:00
OJ
29ffd4c1d1 Fix exclude config to ignore unnecessary content
Updated to use `EXCLUDE_PATTERNS` instead of `EXCLUDE_PATHS`. This
properly excludes the source of the libraries we use and also the
generated output on POSIX.

Thanks again to @jlee-r7 for the catch.
2013-10-17 10:39:13 +10:00
OJ
9b93518845 Merging https://github.com/OJ/meterpreter/pull/1 2013-10-17 08:07:04 +10:00
Tod Beardsley
1fc10a8664 Resolve PR #31 conflict
Conflicts:
	.gitignore
2013-10-16 09:39:47 -05:00
OJ
4b0a6a5102 Update .gitignore to avoid conflict 2013-10-16 08:43:56 +10:00
Tod Beardsley
55fca617e2 Land #30, update README.md 2013-10-15 09:31:04 -05:00
Tod Beardsley
23019408d1 Correct links for source and framework 2013-10-15 09:29:56 -05:00
OJ
2c865a4a37 Documented base.* and core.*
Big job, this documentation lark. Also modified the prototype the
packet_is_tlv_null_terminated function, which used to take a Packet
instance as well as the TLV, but never used the packet in its
implementation.
2013-10-15 16:14:39 +10:00
OJ
a2407de59a Update the build icon URL
Now that @bturner-r7 has got the CI going on metasploit.com the build
icon needs to point to the new server.
2013-10-15 10:12:53 +10:00
kernelsmith
554a744a9e Land #28 OJ's Fix railgun multi call functionality 2013-10-10 00:59:12 -05:00
OJ
35aada915f Fix debug build of various components
No idea why they were broken, but they shouldn't have been. This fixes
them up and tidies a few other things up, especially the guts of the
stdapi project.
2013-10-09 17:20:58 +10:00
OJ
bab7340a3f Doc changes, project fixes 2013-10-09 15:54:39 +10:00
OJ
7f2fc483dc New ext docs, remove boiler from solution
Documentation now includes how to create a new extension using the bare
extension as a sample.
2013-10-09 15:26:19 +10:00
OJ
a10ee71e1c Remove boiler extension and create 'bare' extension
The boiler extension wasn't used and was old so it was removed. I've added
a new "bare" extension which is, as it says, just bare and doesn't do
anything. This can be used to create new extension projets just by copying
and pasting, then editing a couple of small things.

This will be added to the documentation.
2013-10-09 15:08:09 +10:00
OJ
ebf13ffaa7 Even more docs 2013-10-04 18:03:35 +10:00
OJ
a143c274e6 More documnetation work 2013-10-04 14:41:00 +10:00
OJ
ea3b9155b2 Fix railgun multi functionality
The main issue with things being broken was because the calling
convention was not defaulting to "stdapi" and hence the call would
fail. Adding the default fixed it.

While fixing this, I brought the mulit-call functionality up to speed
with the error message functionality, so the calls all return the
properly formatted error message.
2013-10-04 12:01:59 +10:00
James Lee
50b7557290 Land #26, Railgun error messages
See rapid7/metasploit-framework#2443 and rapid7/metasploit-framework#740
2013-10-01 16:39:01 -05:00
Tod Beardsley
adbb8ad2ce Don't lie in the README.md 2013-09-30 16:18:57 -05:00
Tod Beardsley
f629cc4b89 Land #22, more doc and proj updates
Again, tested with a successful run of the build.
2013-09-30 16:16:39 -05:00
Tod Beardsley
0406a2f336 Land #20, update docs and project files.
Tested by merging and running a build, as proscribed by the README.md.
12 succeeded, 0 dailed, 2 skipped.
2013-09-30 16:15:31 -05:00
jvazquez-r7
864917b32d Land #24, @OJ's patch to add posix depends .gitignore 2013-09-26 18:22:40 -05:00
jvazquez-r7
07a45634bb Land #21, @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
OJ
78d4dc0c7b Add posix temp folder to gitignore 2013-09-26 15:29:33 +10:00
OJ
08793782d1 Add doxygen, begin documenting, kitrap0d tidy
* Added the doxygen binaries and configuration.
* Added a `make docs` which generates documentation to the `docs` folder.
* Added some documentation to various areas of the source that I was
  working with. Over time I'll be adding more and more rather than trying
  to do it all in one hit.
* Refactored the kitrap0d code a bit to try to reduce code size.
2013-09-26 14:29:46 +10:00
jvazquez-r7
edd2cc57af Land #23, @OJ's fix for kitrap0d 2013-09-25 20:52:55 -05:00
OJ
895a580cb5 Last code tidy for the kitrap0d fix
Tidies up the API to be more intuitive, including conversion of the
first parameter to a char pointer (removing MAX_PATH) and renaming
the second parameter to be more indicative of what it means.

Thanks to @jvazquez-r7 for the great discussion!
2013-09-26 11:35:05 +10:00
OJ
54cf92ff6d Updated fix to work properly with _snprintf_s
* Modified first and second parameters to use `dwOutputLength` which
  is given to the function as an indicator of buffer size in bytes
  anyway.
* Check the return value of the function call to see if the result
  was a truncation, and if so, break from the current loop.

Realistically, truncation will not happen because the default windows
installation location folder name is very short.

Thanks @jvazquez-r7 for prodding me to validate this.
2013-09-26 09:07:15 +10:00
OJ
05388502cc Fix issue with kitrap0d crashing meterpreter
Calling getsystem or getsystem -t 4 was resulting in crashes due to
an incorrect usage of sizes in a call to _sprintf_s in the kitrap0d
code. This might have come about as a result of a move to the new
compiler which is C++11.

This code forces the size check to be correct and results in the
exploit functioning correctly on all platforms.
2013-09-24 20:00:26 +10:00
OJ
ef4175156f Build status and documnetation update
* Added the build status notification to the top of the README.
* Updated the order of details in the docs (put Linux build after Windows).
* Updated the details about where this repo came from.

Note: this PR should be merged AFTER #20 for ease of merging.
2013-09-24 10:49:29 +10:00
OJ
2d96468969 Landing #8 2013-09-20 08:02:25 +10:00
Meatballs
1ed1fa6e94 Fix indent and nitpick 2013-09-19 20:22:45 +01:00
OJ
361aba7f4c Updated build documentation
Added more detail around using the appropriate configurations depending on
whether you have access to the appropriate SDKs.
2013-09-18 18:14:36 +10:00
OJ
1c07b8650b Remove unused sniffer config, add PssdkVersion setting
* Rather than having various places where the PSSDK path is set scattered
  through the solution I created a property which contains the version.
  This means we can update that version property in the project and it'll
  take effect everywhere it's required.
* Removed debug and release configurations from ext_server_sniffer.
2013-09-18 18:09:32 +10: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
James Lee
e031cc37f1 Land #19, add 'x86' to output filenames
Conflicts:
	workspace/ext_server_mimikatz/ext_server_mimikatz.vcxproj
	workspace/ext_server_sniffer/ext_server_sniffer.vcxproj
2013-09-16 23:56:52 -05:00
James Lee
51fa8f3b7d Land #18, sniffer fixes 2013-09-16 23:46:44 -05:00
James Lee
dacc03bd10 Land #15, add a LICENSE file 2013-09-16 23:36:48 -05:00
James Lee
a463f44e5b Land #17, doc updates 2013-09-16 22:02:03 -05:00
OJ
7b3d45f1fd Remove redundant entries in makefile 2013-09-17 09:29:10 +10:00
OJ
b442d17082 Change output file names
As per @jlee-r7's request I've changed the output of both 32 and 64 bit
components so that the platform is included in the file name.

I also added "make clean" to the make script.
2013-09-17 07:24:27 +10: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
b9e58daa96 Remove unused project
* Accidentally added a project to the FS, this commit removes it.
2013-09-16 16:05:33 +10:00