From 6c0228f4032fbd173e4d4c2c471b81a6506ce934 Mon Sep 17 00:00:00 2001 From: byt3bl33d3r Date: Mon, 20 Apr 2020 13:19:55 -0300 Subject: [PATCH] Fixed dependency hell, added Github actions workflow - Got rid of netaddr in favor of built in ipaddress module - cme/cmedb binaries are now built with shiv - Removed http protocol as it was basically useless and added another dependency --- .github/workflows/crackmapexec.yml | 41 +++ .gitignore | 1 + Makefile | 24 +- Pipfile | 18 +- Pipfile.lock | 543 +++++++++++++++++++---------- README.md | 6 +- README.rst | 60 ---- cme/cli.py | 2 +- cme/modules/enum_dns.py | 1 + cme/modules/slinky.py | 2 +- cme/parsers/ip.py | 45 +-- cme/protocols/http.py | 134 ------- cme/protocols/http/__init__.py | 0 cme/protocols/http/database.py | 99 ------ cme/protocols/http/db_navigator.py | 109 ------ requirements.txt | 55 +-- setup.cfg | 2 +- setup.py | 19 +- 18 files changed, 483 insertions(+), 678 deletions(-) create mode 100644 .github/workflows/crackmapexec.yml delete mode 100644 README.rst delete mode 100755 cme/protocols/http.py delete mode 100755 cme/protocols/http/__init__.py delete mode 100755 cme/protocols/http/database.py delete mode 100644 cme/protocols/http/db_navigator.py diff --git a/.github/workflows/crackmapexec.yml b/.github/workflows/crackmapexec.yml new file mode 100644 index 00000000..54315393 --- /dev/null +++ b/.github/workflows/crackmapexec.yml @@ -0,0 +1,41 @@ +name: CrackMapExec Tests & Build + +on: [push] + +jobs: + test: + name: CrackMapExec Tests on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + max-parallel: 4 + matrix: + os: [ubuntu-latest, macOS-latest] + + steps: + - uses: actions/checkout@v1 + - name: CrackMapExec tests on ${{ matrix.os }} + uses: actions/setup-python@v1 + with: + python-version: 3.8 + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + - name: Run Tests + run: | + pip install flake8 + make tests + - name: Build binaries with Shiv + run: | + pip install shiv + make build + - name: Upload cme binary + uses: actions/upload-artifact@master + with: + name: cme-${{ matrix.os }} + path: bin/cme + - name: Upload cmedb binary + uses: actions/upload-artifact@master + with: + name: cmedb-${{ matrix.os }} + path: bin/cmedb diff --git a/.gitignore b/.gitignore index ce650878..d04ba9b2 100755 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ data/cme.db *.bak *.log .venv +.vscode # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/Makefile b/Makefile index 662f7feb..3c4818ad 100755 --- a/Makefile +++ b/Makefile @@ -1,7 +1,29 @@ +.PHONY: tests + +default: build + clean: rm -f -r build/ + rm -f -r bin/ rm -f -r dist/ rm -f -r *.egg-info find . -name '*.pyc' -exec rm -f {} + find . -name '*.pyo' -exec rm -f {} + - find . -name '*~' -exec rm -f {} + \ No newline at end of file + find . -name '*~' -exec rm -f {} + + find . -name '__pycache__' -exec rm -rf {} + + find . -name '.pytest_cache' -exec rm -rf {} + + +build: + mkdir build/ + mkdir bin/ + cp -r cme build/ + python3 -m pip install -r requirements.txt -t build + rm -rf build/__pycache__ build/*.dist-info + shiv --site-packages build -E --compressed -e 'cme.crackmapexec:main' -o bin/cme -p "/usr/bin/env -S python3 -sE" + shiv --site-packages build -E --compressed -e 'cme.cmedb:main' -o bin/cmedb -p "/usr/bin/env -S python3 -sE" + +rebuild: clean build + +tests: + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics --exclude=cme/data,cme/thirdparty + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics --exclude=cme/data,cme/thirdparty \ No newline at end of file diff --git a/Pipfile b/Pipfile index db2c4b9d..158be0c7 100644 --- a/Pipfile +++ b/Pipfile @@ -5,25 +5,19 @@ verify_ssl = true [dev-packages] ipython = "*" +flake8 = "*" +shiv = "*" [packages] -pycryptodomex = "*" -pyasn1 = "*" gevent = "*" requests = "*" requests-ntlm = "*" bs4 = "*" -netaddr = "*" -pyopenssl = "*" termcolor = "*" -msgpack-python = "*" +msgpack = "*" pylnk3 = "*" -splinter = "*" paramiko = "*" -xmltodict = "*" -six = "*" -terminaltables = "*" pywinrm = "*" - -[requires] -python_version = "3.7" +xmltodict = "*" +terminaltables = "*" +impacket = "*" \ No newline at end of file diff --git a/Pipfile.lock b/Pipfile.lock index e8db078e..3ae42311 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,12 +1,10 @@ { "_meta": { "hash": { - "sha256": "2cf34d989e25f27b567739f2c9ce194d11ae104c1794b3c26690ff0f70b08072" + "sha256": "d0128ed8c27fcfa2b84d481162acc18ea97fb8b28f000ada140327c5c348de9f" }, "pipfile-spec": 6, - "requires": { - "python_version": "3.7" - }, + "requires": {}, "sources": [ { "name": "pypi", @@ -41,11 +39,11 @@ }, "beautifulsoup4": { "hashes": [ - "sha256:05fd825eb01c290877657a56df4c6e4c311b3965bda790c613a3d6fb01a5462a", - "sha256:9fbb4d6e48ecd30bcacc5b63b94088192dcda178513b2ae3c394229f8911b887", - "sha256:e1505eeed31b0f4ce2dbb3bc8eb256c04cc2b3b72af7d551a4ab6efd5cbe5dae" + "sha256:594ca51a10d2b3443cbac41214e12dbb2a1cd57e1a7344659849e2e20ba6a8d8", + "sha256:a4bbe77fd30670455c5296242967a123ec28c37e9702a8a81bd2f20a4baf0368", + "sha256:d4e96ac9b0c3a6d3f0caae2e4124e6055c5dcafde8e2f831ff194c104f0775a0" ], - "version": "==4.8.2" + "version": "==4.9.0" }, "bs4": { "hashes": [ @@ -56,48 +54,43 @@ }, "certifi": { "hashes": [ - "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3", - "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f" + "sha256:1d987a998c75633c40847cc966fcf5904906c920a7f17ef374f5aa4282abd304", + "sha256:51fcb31174be6e6664c5f69e3e1691a2d72a1a12e90f872cbdb1567eb47b6519" ], - "version": "==2019.11.28" + "version": "==2020.4.5.1" }, "cffi": { "hashes": [ - "sha256:0b49274afc941c626b605fb59b59c3485c17dc776dc3cc7cc14aca74cc19cc42", - "sha256:0e3ea92942cb1168e38c05c1d56b0527ce31f1a370f6117f1d490b8dcd6b3a04", - "sha256:135f69aecbf4517d5b3d6429207b2dff49c876be724ac0c8bf8e1ea99df3d7e5", - "sha256:19db0cdd6e516f13329cba4903368bff9bb5a9331d3410b1b448daaadc495e54", - "sha256:2781e9ad0e9d47173c0093321bb5435a9dfae0ed6a762aabafa13108f5f7b2ba", - "sha256:291f7c42e21d72144bb1c1b2e825ec60f46d0a7468f5346841860454c7aa8f57", - "sha256:2c5e309ec482556397cb21ede0350c5e82f0eb2621de04b2633588d118da4396", - "sha256:2e9c80a8c3344a92cb04661115898a9129c074f7ab82011ef4b612f645939f12", - "sha256:32a262e2b90ffcfdd97c7a5e24a6012a43c61f1f5a57789ad80af1d26c6acd97", - "sha256:3c9fff570f13480b201e9ab69453108f6d98244a7f495e91b6c654a47486ba43", - "sha256:415bdc7ca8c1c634a6d7163d43fb0ea885a07e9618a64bda407e04b04333b7db", - "sha256:42194f54c11abc8583417a7cf4eaff544ce0de8187abaf5d29029c91b1725ad3", - "sha256:4424e42199e86b21fc4db83bd76909a6fc2a2aefb352cb5414833c030f6ed71b", - "sha256:4a43c91840bda5f55249413037b7a9b79c90b1184ed504883b72c4df70778579", - "sha256:599a1e8ff057ac530c9ad1778293c665cb81a791421f46922d80a86473c13346", - "sha256:5c4fae4e9cdd18c82ba3a134be256e98dc0596af1e7285a3d2602c97dcfa5159", - "sha256:5ecfa867dea6fabe2a58f03ac9186ea64da1386af2159196da51c4904e11d652", - "sha256:62f2578358d3a92e4ab2d830cd1c2049c9c0d0e6d3c58322993cc341bdeac22e", - "sha256:6471a82d5abea994e38d2c2abc77164b4f7fbaaf80261cb98394d5793f11b12a", - "sha256:6d4f18483d040e18546108eb13b1dfa1000a089bcf8529e30346116ea6240506", - "sha256:71a608532ab3bd26223c8d841dde43f3516aa5d2bf37b50ac410bb5e99053e8f", - "sha256:74a1d8c85fb6ff0b30fbfa8ad0ac23cd601a138f7509dc617ebc65ef305bb98d", - "sha256:7b93a885bb13073afb0aa73ad82059a4c41f4b7d8eb8368980448b52d4c7dc2c", - "sha256:7d4751da932caaec419d514eaa4215eaf14b612cff66398dd51129ac22680b20", - "sha256:7f627141a26b551bdebbc4855c1157feeef18241b4b8366ed22a5c7d672ef858", - "sha256:8169cf44dd8f9071b2b9248c35fc35e8677451c52f795daa2bb4643f32a540bc", - "sha256:aa00d66c0fab27373ae44ae26a66a9e43ff2a678bf63a9c7c1a9a4d61172827a", - "sha256:ccb032fda0873254380aa2bfad2582aedc2959186cce61e3a17abc1a55ff89c3", - "sha256:d754f39e0d1603b5b24a7f8484b22d2904fa551fe865fd0d4c3332f078d20d4e", - "sha256:d75c461e20e29afc0aee7172a0950157c704ff0dd51613506bd7d82b718e7410", - "sha256:dcd65317dd15bc0451f3e01c80da2216a31916bdcffd6221ca1202d96584aa25", - "sha256:e570d3ab32e2c2861c4ebe6ffcad6a8abf9347432a37608fe1fbd157b3f0036b", - "sha256:fd43a88e045cf992ed09fa724b5315b790525f2676883a6ea64e3263bae6549d" + "sha256:001bf3242a1bb04d985d63e138230802c6c8d4db3668fb545fb5005ddf5bb5ff", + "sha256:00789914be39dffba161cfc5be31b55775de5ba2235fe49aa28c148236c4e06b", + "sha256:028a579fc9aed3af38f4892bdcc7390508adabc30c6af4a6e4f611b0c680e6ac", + "sha256:14491a910663bf9f13ddf2bc8f60562d6bc5315c1f09c704937ef17293fb85b0", + "sha256:1cae98a7054b5c9391eb3249b86e0e99ab1e02bb0cc0575da191aedadbdf4384", + "sha256:2089ed025da3919d2e75a4d963d008330c96751127dd6f73c8dc0c65041b4c26", + "sha256:2d384f4a127a15ba701207f7639d94106693b6cd64173d6c8988e2c25f3ac2b6", + "sha256:337d448e5a725bba2d8293c48d9353fc68d0e9e4088d62a9571def317797522b", + "sha256:399aed636c7d3749bbed55bc907c3288cb43c65c4389964ad5ff849b6370603e", + "sha256:3b911c2dbd4f423b4c4fcca138cadde747abdb20d196c4a48708b8a2d32b16dd", + "sha256:3d311bcc4a41408cf5854f06ef2c5cab88f9fded37a3b95936c9879c1640d4c2", + "sha256:62ae9af2d069ea2698bf536dcfe1e4eed9090211dbaafeeedf5cb6c41b352f66", + "sha256:66e41db66b47d0d8672d8ed2708ba91b2f2524ece3dee48b5dfb36be8c2f21dc", + "sha256:675686925a9fb403edba0114db74e741d8181683dcf216be697d208857e04ca8", + "sha256:7e63cbcf2429a8dbfe48dcc2322d5f2220b77b2e17b7ba023d6166d84655da55", + "sha256:8a6c688fefb4e1cd56feb6c511984a6c4f7ec7d2a1ff31a10254f3c817054ae4", + "sha256:8c0ffc886aea5df6a1762d0019e9cb05f825d0eec1f520c51be9d198701daee5", + "sha256:95cd16d3dee553f882540c1ffe331d085c9e629499ceadfbda4d4fde635f4b7d", + "sha256:99f748a7e71ff382613b4e1acc0ac83bf7ad167fb3802e35e90d9763daba4d78", + "sha256:b8c78301cefcf5fd914aad35d3c04c2b21ce8629b5e4f4e45ae6812e461910fa", + "sha256:c420917b188a5582a56d8b93bdd8e0f6eca08c84ff623a4c16e809152cd35793", + "sha256:c43866529f2f06fe0edc6246eb4faa34f03fe88b64a0a9a942561c8e22f4b71f", + "sha256:cab50b8c2250b46fe738c77dbd25ce017d5e6fb35d3407606e7a4180656a5a6a", + "sha256:cef128cb4d5e0b3493f058f10ce32365972c554572ff821e175dbc6f8ff6924f", + "sha256:cf16e3cf6c0a5fdd9bc10c21687e19d29ad1fe863372b5543deaec1039581a30", + "sha256:e56c744aa6ff427a607763346e4170629caf7e48ead6921745986db3692f987f", + "sha256:e577934fc5f8779c554639376beeaa5657d54349096ef24abe8c74c5d9c117c3", + "sha256:f2b0fa0c01d8a0c7483afd9f31d7ecf2d71760ca24499c8697aeb5ca37dc090c" ], - "version": "==1.13.2" + "version": "==1.14.0" }, "chardet": { "hashes": [ @@ -106,60 +99,85 @@ ], "version": "==3.0.4" }, + "click": { + "hashes": [ + "sha256:8a18b4ea89d8820c5d0c7da8a64b2c324b4dabb695804dbfea19b9be9d88c0cc", + "sha256:e345d143d80bf5ee7534056164e5e112ea5e22716bbb1ce727941f4c8b471b9a" + ], + "version": "==7.1.1" + }, "cryptography": { "hashes": [ - "sha256:02079a6addc7b5140ba0825f542c0869ff4df9a69c360e339ecead5baefa843c", - "sha256:1df22371fbf2004c6f64e927668734070a8953362cd8370ddd336774d6743595", - "sha256:369d2346db5934345787451504853ad9d342d7f721ae82d098083e1f49a582ad", - "sha256:3cda1f0ed8747339bbdf71b9f38ca74c7b592f24f65cdb3ab3765e4b02871651", - "sha256:44ff04138935882fef7c686878e1c8fd80a723161ad6a98da31e14b7553170c2", - "sha256:4b1030728872c59687badcca1e225a9103440e467c17d6d1730ab3d2d64bfeff", - "sha256:58363dbd966afb4f89b3b11dfb8ff200058fbc3b947507675c19ceb46104b48d", - "sha256:6ec280fb24d27e3d97aa731e16207d58bd8ae94ef6eab97249a2afe4ba643d42", - "sha256:7270a6c29199adc1297776937a05b59720e8a782531f1f122f2eb8467f9aab4d", - "sha256:73fd30c57fa2d0a1d7a49c561c40c2f79c7d6c374cc7750e9ac7c99176f6428e", - "sha256:7f09806ed4fbea8f51585231ba742b58cbcfbfe823ea197d8c89a5e433c7e912", - "sha256:90df0cc93e1f8d2fba8365fb59a858f51a11a394d64dbf3ef844f783844cc793", - "sha256:971221ed40f058f5662a604bd1ae6e4521d84e6cad0b7b170564cc34169c8f13", - "sha256:a518c153a2b5ed6b8cc03f7ae79d5ffad7315ad4569b2d5333a13c38d64bd8d7", - "sha256:b0de590a8b0979649ebeef8bb9f54394d3a41f66c5584fff4220901739b6b2f0", - "sha256:b43f53f29816ba1db8525f006fa6f49292e9b029554b3eb56a189a70f2a40879", - "sha256:d31402aad60ed889c7e57934a03477b572a03af7794fa8fb1780f21ea8f6551f", - "sha256:de96157ec73458a7f14e3d26f17f8128c959084931e8997b9e655a39c8fde9f9", - "sha256:df6b4dca2e11865e6cfbfb708e800efb18370f5a46fd601d3755bc7f85b3a8a2", - "sha256:ecadccc7ba52193963c0475ac9f6fa28ac01e01349a2ca48509667ef41ffd2cf", - "sha256:fb81c17e0ebe3358486cd8cc3ad78adbae58af12fc2bf2bc0bb84e8090fa5ce8" + "sha256:0cacd3ef5c604b8e5f59bf2582c076c98a37fe206b31430d0cd08138aff0986e", + "sha256:192ca04a36852a994ef21df13cca4d822adbbdc9d5009c0f96f1d2929e375d4f", + "sha256:19ae795137682a9778892fb4390c07811828b173741bce91e30f899424b3934d", + "sha256:1b9b535d6b55936a79dbe4990b64bb16048f48747c76c29713fea8c50eca2acf", + "sha256:2a2ad24d43398d89f92209289f15265107928f22a8d10385f70def7a698d6a02", + "sha256:3be7a5722d5bfe69894d3f7bbed15547b17619f3a88a318aab2e37f457524164", + "sha256:49870684da168b90110bbaf86140d4681032c5e6a2461adc7afdd93be5634216", + "sha256:587f98ce27ac4547177a0c6fe0986b8736058daffe9160dcf5f1bd411b7fbaa1", + "sha256:5aca6f00b2f42546b9bdf11a69f248d1881212ce5b9e2618b04935b87f6f82a1", + "sha256:6b744039b55988519cc183149cceb573189b3e46e16ccf6f8c46798bb767c9dc", + "sha256:6b91cab3841b4c7cb70e4db1697c69f036c8bc0a253edc0baa6783154f1301e4", + "sha256:7598974f6879a338c785c513e7c5a4329fbc58b9f6b9a6305035fca5b1076552", + "sha256:7a279f33a081d436e90e91d1a7c338553c04e464de1c9302311a5e7e4b746088", + "sha256:95e1296e0157361fe2f5f0ed307fd31f94b0ca13372e3673fa95095a627636a1", + "sha256:9fc9da390e98cb6975eadf251b6e5fa088820141061bf041cd5c72deba1dc526", + "sha256:cc20316e3f5a6b582fc3b029d8dc03aabeb645acfcb7fc1d9848841a33265748", + "sha256:d1bf5a1a0d60c7f9a78e448adcb99aa101f3f9588b16708044638881be15d6bc", + "sha256:ed1d0760c7e46436ec90834d6f10477ff09475c692ed1695329d324b2c5cd547", + "sha256:ef9a55013676907df6c9d7dd943eb1770d014f68beaa7e73250fb43c759f4585" ], - "version": "==2.8" + "version": "==2.9" + }, + "dnspython": { + "hashes": [ + "sha256:36c5e8e38d4369a08b6780b7f27d790a292b2b08eea01607865bf0936c558e01", + "sha256:f69c21288a962f4da86e56c4905b49d11aba7938d3d740e80d9e366ee4f1632d" + ], + "version": "==1.16.0" + }, + "flask": { + "hashes": [ + "sha256:4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060", + "sha256:8a4fdd8936eba2512e9c85df320a37e694c93945b33ef33c89946a340a238557" + ], + "version": "==1.1.2" + }, + "future": { + "hashes": [ + "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d" + ], + "version": "==0.18.2" }, "gevent": { "hashes": [ - "sha256:0774babec518a24d9a7231d4e689931f31b332c4517a771e532002614e270a64", - "sha256:0e1e5b73a445fe82d40907322e1e0eec6a6745ca3cea19291c6f9f50117bb7ea", - "sha256:0ff2b70e8e338cf13bedf146b8c29d475e2a544b5d1fe14045aee827c073842c", - "sha256:107f4232db2172f7e8429ed7779c10f2ed16616d75ffbe77e0e0c3fcdeb51a51", - "sha256:14b4d06d19d39a440e72253f77067d27209c67e7611e352f79fe69e0f618f76e", - "sha256:1b7d3a285978b27b469c0ff5fb5a72bcd69f4306dbbf22d7997d83209a8ba917", - "sha256:1eb7fa3b9bd9174dfe9c3b59b7a09b768ecd496debfc4976a9530a3e15c990d1", - "sha256:2711e69788ddb34c059a30186e05c55a6b611cb9e34ac343e69cf3264d42fe1c", - "sha256:28a0c5417b464562ab9842dd1fb0cc1524e60494641d973206ec24d6ec5f6909", - "sha256:3249011d13d0c63bea72d91cec23a9cf18c25f91d1f115121e5c9113d753fa12", - "sha256:44089ed06a962a3a70e96353c981d628b2d4a2f2a75ea5d90f916a62d22af2e8", - "sha256:4bfa291e3c931ff3c99a349d8857605dca029de61d74c6bb82bd46373959c942", - "sha256:50024a1ee2cf04645535c5ebaeaa0a60c5ef32e262da981f4be0546b26791950", - "sha256:53b72385857e04e7faca13c613c07cab411480822ac658d97fd8a4ddbaf715c8", - "sha256:74b7528f901f39c39cdbb50cdf08f1a2351725d9aebaef212a29abfbb06895ee", - "sha256:7d0809e2991c9784eceeadef01c27ee6a33ca09ebba6154317a257353e3af922", - "sha256:896b2b80931d6b13b5d9feba3d4eebc67d5e6ec54f0cf3339d08487d55d93b0e", - "sha256:8d9ec51cc06580f8c21b41fd3f2b3465197ba5b23c00eb7d422b7ae0380510b0", - "sha256:9f7a1e96fec45f70ad364e46de32ccacab4d80de238bd3c2edd036867ccd48ad", - "sha256:ab4dc33ef0e26dc627559786a4fba0c2227f125db85d970abbf85b77506b3f51", - "sha256:d1e6d1f156e999edab069d79d890859806b555ce4e4da5b6418616322f0a3df1", - "sha256:d752bcf1b98174780e2317ada12013d612f05116456133a6acf3e17d43b71f05", - "sha256:e5bcc4270671936349249d26140c267397b7b4b1381f5ec8b13c53c5b53ab6e1" + "sha256:03385b7d2da0e3d3a7682d85a5f19356f7caa861787363fe12edd1d52227163f", + "sha256:0eab938d65485b900b4f716a099a59459fc7e8b53b8af75bf6267a12f9830a66", + "sha256:25a094ecdc4f503e81b81b94e654a1a2343bfecafedf7b481e5aa6b0adb84206", + "sha256:2f33b4f2d55b562d839e93e2355d7f9a6947a9c68e3044eab17a086a725601e6", + "sha256:33c08d6b4a906169727dc1b9dc709e40f8abd0a966d310bceabc790acd950a56", + "sha256:3c9229e4eac2df1ce2b097996d3ee318ea90eb11d9e4d7cb14558cbcf02b2262", + "sha256:45a5af965cc969dd06128740f5999b9bdb440cb0ba4e9c066e5c17a2c33c89a8", + "sha256:4c6103fa852c352b4f906ea07008fabc06a1f5d2f2209b2f8fbae41227f80a79", + "sha256:608b13b4e2fa462175a53f61c907c24a179abb4d7902f25709a0f908105c22db", + "sha256:7593740e5faeb17d5c5a79e6f80c11a618cf5d250b93df1eafa38324ff275676", + "sha256:75dd068dfa83865f4a51121068b1644be9d61921fe1f5b79cf14cc86729f79b7", + "sha256:82bd100f70699809be1848c0a04bed86bd817b0f79f67d7340205d23badc7096", + "sha256:8753de5a3501093508e6f89c347f37a847d7acf541ff28c977bbbedc2e917c13", + "sha256:975047b90345f7d811977fb859a1455bd9768d584f32c23a06a4821dd9735d1c", + "sha256:b2814258e3b3fb32786bb73af271ad31f51e1ac01f33b37426b66cb8491b4c29", + "sha256:b34b42e86b764a9e948991af5fc43f6d39ee0148a8502ad4d9267ec1401e5401", + "sha256:b94f8f25c6f6ddf9ee3266db9113928c1eca9b01378f8376928620243ee66358", + "sha256:c182733b7445074f11cd2ccb9b6c19f6407167d551089b24db6c6823224e085f", + "sha256:c5972a6e8ef5b4ed06c719ab9ea40f76b35e399f76111621009cb8b2a5a20b9c", + "sha256:cae2bffbda0f1641db20055506105d7c209f79ace0a32134359b3c65a0e9b02f", + "sha256:ce7c562d02ad6c351799f4c8bf81207056118b01e04908de7aca49580f7f1ead", + "sha256:d3c93c39d4a23979d199741fc5610e3f75fc6fcc15f779dd2469e343368a5794", + "sha256:f0fda50447a6f6f50ddc9b865ce7fc3d3389694b3a0648f059f7f5b639fc33d3" ], "index": "pypi", - "version": "==1.4.0" + "version": "==1.5.0" }, "greenlet": { "hashes": [ @@ -167,7 +185,9 @@ "sha256:0d48200bc50cbf498716712129eef819b1729339e34c3ae71656964dac907c28", "sha256:23d12eacffa9d0f290c0fe0c4e81ba6d5f3a5b7ac3c30a5eaf0126bf4deda5c8", "sha256:37c9ba82bd82eb6a23c2e5acc03055c0e45697253b2393c9a50cef76a3985304", + "sha256:51155342eb4d6058a0ffcd98a798fe6ba21195517da97e15fca3db12ab201e6e", "sha256:51503524dd6f152ab4ad1fbd168fc6c30b5795e8c70be4410a64940b3abb55c0", + "sha256:7457d685158522df483196b16ec648b28f8e847861adb01a55d41134e7734122", "sha256:8041e2de00e745c0e05a502d6e6db310db7faa7c979b3a5877123548a4c0b214", "sha256:81fcd96a275209ef117e9ec91f75c731fa18dcfd9ffaa1c0adbdaa3616a86043", "sha256:853da4f9563d982e4121fed8c92eea1a4594a2299037b3034c3c898cb8e933d6", @@ -181,32 +201,116 @@ "sha256:bcb530089ff24f6458a81ac3fa699e8c00194208a724b644ecc68422e1111939", "sha256:beeabe25c3b704f7d56b573f7d2ff88fc99f0138e43480cecdfcaa3b87fe4f87", "sha256:d634a7ea1fc3380ff96f9e44d8d22f38418c1c381d5fac680b272d7d90883720", - "sha256:d97b0661e1aead761f0ded3b769044bb00ed5d33e1ec865e891a8b128bf7c656" + "sha256:d97b0661e1aead761f0ded3b769044bb00ed5d33e1ec865e891a8b128bf7c656", + "sha256:e538b8dae561080b542b0f5af64d47ef859f22517f7eca617bb314e0e03fd7ef" ], "markers": "platform_python_implementation == 'CPython'", "version": "==0.4.15" }, "idna": { "hashes": [ - "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", - "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" + "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb", + "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa" ], - "version": "==2.8" + "version": "==2.9" }, - "msgpack-python": { + "impacket": { "hashes": [ - "sha256:378cc8a6d3545b532dfd149da715abae4fda2a3adb6d74e525d0d5e51f46909b" + "sha256:912f812564e87c31a162cfe0626f3a6cbc5b6864deedbfefc31f6d321859ade3" ], "index": "pypi", - "version": "==0.5.6" + "version": "==0.9.21" }, - "netaddr": { + "itsdangerous": { "hashes": [ - "sha256:38aeec7cdd035081d3a4c306394b19d677623bf76fa0913f6695127c7753aefd", - "sha256:56b3558bd71f3f6999e4c52e349f38660e54a7a8a9943335f73dfc96883e08ca" + "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19", + "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749" + ], + "version": "==1.1.0" + }, + "jinja2": { + "hashes": [ + "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0", + "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035" + ], + "version": "==2.11.2" + }, + "ldap3": { + "hashes": [ + "sha256:17f04298b70bf7ecaa5db8a7d8622b5a962ef7fc2b245b2eea705ac1c24338c0", + "sha256:81df4ac8b6df10fb1f05b17c18d0cb8c4c344d5a03083c382824960ed959cf5b" + ], + "version": "==2.7" + }, + "ldapdomaindump": { + "hashes": [ + "sha256:4cff8396051a74ede3c7251fe81ba05fa67854b7c198343628a2828c4328135f", + "sha256:cd08f4579ec6467c24b09a7aa180e2ddffcc44db8e95a083660faa4fa7f34f6c", + "sha256:f98ad840dc31d8d9ff15b69ceb6e7257cb4c0c3e9acc3f881d42cbd428abac9a" + ], + "version": "==0.9.2" + }, + "markupsafe": { + "hashes": [ + "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", + "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", + "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", + "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", + "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42", + "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", + "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", + "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", + "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", + "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", + "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", + "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b", + "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", + "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15", + "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", + "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", + "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", + "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", + "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", + "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", + "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", + "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", + "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", + "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", + "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", + "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", + "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", + "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", + "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", + "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", + "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2", + "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7", + "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be" + ], + "version": "==1.1.1" + }, + "msgpack": { + "hashes": [ + "sha256:002a0d813e1f7b60da599bdf969e632074f9eec1b96cbed8fb0973a63160a408", + "sha256:25b3bc3190f3d9d965b818123b7752c5dfb953f0d774b454fd206c18fe384fb8", + "sha256:271b489499a43af001a2e42f42d876bb98ccaa7e20512ff37ca78c8e12e68f84", + "sha256:39c54fdebf5fa4dda733369012c59e7d085ebdfe35b6cf648f09d16708f1be5d", + "sha256:4233b7f86c1208190c78a525cd3828ca1623359ef48f78a6fea4b91bb995775a", + "sha256:5bea44181fc8e18eed1d0cd76e355073f00ce232ff9653a0ae88cb7d9e643322", + "sha256:5dba6d074fac9b24f29aaf1d2d032306c27f04187651511257e7831733293ec2", + "sha256:7a22c965588baeb07242cb561b63f309db27a07382825fc98aecaf0827c1538e", + "sha256:908944e3f038bca67fcfedb7845c4a257c7749bf9818632586b53bcf06ba4b97", + "sha256:9534d5cc480d4aff720233411a1f765be90885750b07df772380b34c10ecb5c0", + "sha256:aa5c057eab4f40ec47ea6f5a9825846be2ff6bf34102c560bad5cad5a677c5be", + "sha256:b3758dfd3423e358bbb18a7cccd1c74228dffa7a697e5be6cb9535de625c0dbf", + "sha256:c901e8058dd6653307906c5f157f26ed09eb94a850dddd989621098d347926ab", + "sha256:cec8bf10981ed70998d98431cd814db0ecf3384e6b113366e7f36af71a0fca08", + "sha256:db685187a415f51d6b937257474ca72199f393dad89534ebbdd7d7a3b000080e", + "sha256:e35b051077fc2f3ce12e7c6a34cf309680c63a842db3a0616ea6ed25ad20d272", + "sha256:e7bbdd8e2b277b77782f3ce34734b0dfde6cbe94ddb74de8d733d603c7f9e2b1", + "sha256:ea41c9219c597f1d2bf6b374d951d310d58684b5de9dc4bd2976db9e1e22c140" ], "index": "pypi", - "version": "==0.7.19" + "version": "==1.0.0" }, "ntlm-auth": { "hashes": [ @@ -228,59 +332,57 @@ "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba" ], - "index": "pypi", "version": "==0.4.8" }, "pycparser": { "hashes": [ - "sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3" + "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", + "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705" ], - "version": "==2.19" + "version": "==2.20" }, "pycryptodomex": { "hashes": [ - "sha256:0943b65fb41b7403a9def6214061fdd9ab9afd0bbc581e553c72eebe60bded36", - "sha256:0a1dbb5c4d975a4ea568fb7686550aa225d94023191fb0cca8747dc5b5d77857", - "sha256:0f43f1608518347fdcb9c8f443fa5cabedd33f94188b13e4196a3a7ba90d169c", - "sha256:11ce5fec5990e34e3981ed14897ba601c83957b577d77d395f1f8f878a179f98", - "sha256:17a09e38fdc91e4857cf5a7ce82f3c0b229c3977490f2146513e366923fc256b", - "sha256:22d970cee5c096b9123415e183ae03702b2cd4d3ba3f0ced25c4e1aba3967167", - "sha256:2a1793efcbae3a2264c5e0e492a2629eb10d895d6e5f17dbbd00eb8b489c6bda", - "sha256:30a8a148a0fe482cec1aaf942bbd0ade56ec197c14fe058b2a94318c57e1f991", - "sha256:32fbbaf964c5184d3f3e349085b0536dd28184b02e2b014fc900f58bbc126339", - "sha256:347d67faee36d449dc9632da411cc318df52959079062627f1243001b10dc227", - "sha256:45f4b4e5461a041518baabc52340c249b60833aa84cea6377dc8016a2b33c666", - "sha256:4717daec0035034b002d31c42e55431c970e3e38a78211f43990e1b7eaf19e28", - "sha256:51a1ac9e7dda81da444fed8be558a60ec88dfc73b2aa4b0efa310e87acb75838", - "sha256:53e9dcc8f14783f6300b70da325a50ac1b0a3dbaee323bd9dc3f71d409c197a1", - "sha256:5519a2ed776e193688b7ddb61ab709303f6eb7d1237081e298283c72acc44271", - "sha256:583450e8e80a0885c453211ed2bd69ceea634d8c904f23ff8687f677fe810e95", - "sha256:60f862bd2a07133585a4fc2ce2b1a8ec24746b07ac44307d22ef2b767cb03435", - "sha256:612091f1d3c84e723bec7cb855cf77576e646045744794c9a3f75ba80737762f", - "sha256:629a87b87c8203b8789ccefc7f2f2faecd2daaeb56bdd0b4e44cd89565f2db07", - "sha256:6e56ec4c8938fb388b6f250ddd5e21c15e8f25a76e0ad0e2abae9afee09e67b4", - "sha256:8e8092651844a11ec7fa534395f3dfe99256ce4edca06f128efc9d770d6e1dc1", - "sha256:8f5f260629876603e08f3ce95c8ccd9b6b83bf9a921c41409046796267f7adc5", - "sha256:9a6b74f38613f54c56bd759b411a352258f47489bbefd1d57c930a291498b35b", - "sha256:a5a13ebb52c4cd065fb673d8c94f39f30823428a4de19e1f3f828b63a8882d1e", - "sha256:a77ca778a476829876a3a70ae880073379160e4a465d057e3c4e1c79acdf1b8a", - "sha256:a9f7be3d19f79429c2118fd61bc2ec4fa095e93b56fb3a5f3009822402c4380f", - "sha256:dc15a467c4f9e4b43748ba2f97aea66f67812bfd581818284c47cadc81d4caec", - "sha256:e13cdeea23059f7577c230fd580d2c8178e67ebe10e360041abe86c33c316f1c", - "sha256:e45b85c8521bca6bdfaf57e4987743ade53e9f03529dd3adbc9524094c6d55c4", - "sha256:e87f17867b260f57c88487f943eb4d46c90532652bb37046e764842c3b66cbb1", - "sha256:ee40a5b156f6c1192bc3082e9d73d0479904433cdda83110546cd67f5a15a5be", - "sha256:ef63ffde3b267043579af8830fc97fc3b9b8a526a24e3ba23af9989d4e9e689a" + "sha256:1537d2d15b604b303aef56e7f440895a1c81adbee786b91f1f06eddc34da5314", + "sha256:1d20ab8369b7558168fc014a0745c678613f9f486dae468cca2d68145196b8a4", + "sha256:1ecc9db7409db67765eb008e558879d298406642d33ade43a6488224d23e8081", + "sha256:37033976f72af829fe15f7fe5fe1dbed308cc43a98d9dd9d2a0a76de8ca5ee78", + "sha256:3c3dd9d4c9c1e279d3945ae422895c901f98987333acc132dc094faf52afec35", + "sha256:3c9b3fba037ea52c626060c5a87ee6de7e86c99e8a7c6ee07302539985d2bd64", + "sha256:45ee555fc5e28c119a46d44ce373f5237e54a35c61b750fb3a94446b09855dbc", + "sha256:4c93038ac011b36512cb0bf2ee3e2aec774e8bc81021d015917c89fe02bb0ee5", + "sha256:50163324834edd0c9ce3e4512ded3e221c969086e10fdd5d3fdcaadac5e24a78", + "sha256:59b0ea9cda5490f924771456912a225d8d9e678891f9f986661af718534719b2", + "sha256:5cf306a17cccc327a33cdc3845629fa13f4573a4ec620ed607c79cf6785f2e27", + "sha256:5fff8da399af16a1855f58771223acbbdac720b9969cd03fc5013d2e9a7bd9a4", + "sha256:68650ce5b9f7152b8283302a4617269f821695a612692640dd247bd12ab21c0b", + "sha256:6b3a9a562688996f760b5077714c3ab8b62ca56061b6e9ab7906841e43e19f91", + "sha256:7e938ed51a59e29431ea86fab60423ada2757728db0f78952329fa02a789bd31", + "sha256:87aa70daad6f039e814790a06422a3189311198b674b62f13933a2bdcb6b1bcc", + "sha256:99be3a1df2b2b9f731ebe1c264a2c07c465e71cee68e35e1640b645b5213a755", + "sha256:a3f2908666e6f74b8c4893f86dd02e16170f50e4a78ae7f3468b6208d54bc205", + "sha256:ae3d44a639fd11dbdeca47e35e94febb1ee8bc15daf26673331add37146e0b85", + "sha256:afb4c2fa3c6f492fd9a8b38d76e13f32d429b8e5e1e00238309391b5591cde0d", + "sha256:b1515ce3a8a2c3fa537d137c5ca5f8b7a902044d04e07d7c3aa26c3e026120fb", + "sha256:bf391b377413a197000b43ef2b74359974d8927d329a897c9f5ba7b63dca7b9c", + "sha256:c436919117c23355740c669f89720673578b9aa4569bbfe105f6c10101fc1966", + "sha256:d2c3c280975638e2a2c2fd9cb36ab111980219757fa163a2755594b9448e4138", + "sha256:e585d530764c459cbd5d460aed0288807bb881f376ca9a20e653645217895961", + "sha256:e76e6638ead4a7d93262a24218f0ff3ff74de6b6c823b7e19dccb31b6a481978", + "sha256:ebfc2f885cafda076c31ae30fa0dd81e7e919ec34059a88d3018ed66e83fcce3", + "sha256:f5797a39933a3d41526da60856735e6684b2b71a8ca99d5f79555ca121be2f4b", + "sha256:f7e5fc5e124200b19a14be33fb0099e956e6ebb5e25d287b0829ef0a78ed76c7", + "sha256:fb350e31e55211fec8ddc89fc0256f3b9bc3b44b68a8bde1cf44b3b4e80c0e42" ], - "index": "pypi", - "version": "==3.9.4" + "version": "==3.9.7" }, - "pylnk": { + "pylnk3": { "hashes": [ - "sha256:ed3db6c10d5c0765368587520db0589daffb2fc6255da7c6ea4e747f35f9fe8e" + "sha256:6202a2b4bd9c6efe6d070dd9d93d501702f48f27d4873e2dfddc8d996499b684", + "sha256:a4067528dc0de1511ede59d7afcf1f520b8876dbfec96d306652b6e246d9ddc4" ], "index": "pypi", - "version": "==0.2" + "version": "==0.3.0" }, "pynacl": { "hashes": [ @@ -313,16 +415,22 @@ "sha256:621880965a720b8ece2f1b2f54ea2071966ab00e2970ad2ce11d596102063504", "sha256:9a24494b2602aaf402be5c9e30a0b82d4a5c67528fe8fb475e3f3bc00dd69507" ], - "index": "pypi", "version": "==19.1.0" }, + "pywinrm": { + "hashes": [ + "sha256:4ede5c6c85b53780ad0dbf9abef2fa2ea58f44c82256a84a63eae5f1205cea81" + ], + "index": "pypi", + "version": "==0.4.1" + }, "requests": { "hashes": [ - "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", - "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31" + "sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee", + "sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6" ], "index": "pypi", - "version": "==2.22.0" + "version": "==2.23.0" }, "requests-ntlm": { "hashes": [ @@ -332,35 +440,19 @@ "index": "pypi", "version": "==1.1.0" }, - "selenium": { - "hashes": [ - "sha256:2d7131d7bc5a5b99a2d9b04aaf2612c411b03b8ca1b1ee8d3de5845a9be2cb3c", - "sha256:deaf32b60ad91a4611b98d8002757f29e6f2c2d5fcaf202e1c9ad06d6772300d" - ], - "version": "==3.141.0" - }, "six": { "hashes": [ "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a", "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c" ], - "index": "pypi", "version": "==1.14.0" }, "soupsieve": { "hashes": [ - "sha256:bdb0d917b03a1369ce964056fc195cfdff8819c40de04695a80bc813c3cfa1f5", - "sha256:e2c1c5dee4a1c36bcb790e0fabd5492d874b8ebd4617622c4f6a731701060dda" + "sha256:e914534802d7ffd233242b785229d5ba0766a7f487385e3f714446a07bf540ae", + "sha256:fcd71e08c0aee99aca1b73f45478549ee7e7fc006d51b37bec9e9def7dc22b69" ], - "version": "==1.9.5" - }, - "splinter": { - "hashes": [ - "sha256:62b5876757f0ac09324a7d5e5f94886110219c2b85300516ec39a914d7992d91", - "sha256:9e92535f273622507ac157612c3bb0e9cee7b5ccd2aa097d47b408e34c2ca356" - ], - "index": "pypi", - "version": "==0.13.0" + "version": "==2.0" }, "termcolor": { "hashes": [ @@ -378,10 +470,17 @@ }, "urllib3": { "hashes": [ - "sha256:a8a318824cc77d1fd4b2bec2ded92646630d7fe8619497b142c84a9e6f5a7293", - "sha256:f3c5fd51747d450d4dcf6f923c81f78f811aab8205fda64b0aba34a4e48b0745" + "sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527", + "sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115" ], - "version": "==1.25.7" + "version": "==1.25.9" + }, + "werkzeug": { + "hashes": [ + "sha256:2de2a5db0baeae7b2d2664949077c2ac63fbd16d98da0ff71837f7d1dea3fd43", + "sha256:6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c" + ], + "version": "==1.0.1" }, "xmltodict": { "hashes": [ @@ -393,6 +492,14 @@ } }, "develop": { + "appnope": { + "hashes": [ + "sha256:5b26757dc6f79a3b7dc9fab95359328d5747fcb2409d331ea66d0272b90ab2a0", + "sha256:8b995ffe925347a2138d7ac0fe77155e4311a0ea6d6da4f5128fe4b3cbe5ed71" + ], + "markers": "sys_platform == 'darwin'", + "version": "==0.1.0" + }, "backcall": { "hashes": [ "sha256:38ecd85be2c1e78f77fd91700c76e14667dc21e2713b63876c0eb901196e01e4", @@ -400,20 +507,42 @@ ], "version": "==0.1.0" }, + "click": { + "hashes": [ + "sha256:8a18b4ea89d8820c5d0c7da8a64b2c324b4dabb695804dbfea19b9be9d88c0cc", + "sha256:e345d143d80bf5ee7534056164e5e112ea5e22716bbb1ce727941f4c8b471b9a" + ], + "version": "==7.1.1" + }, "decorator": { "hashes": [ - "sha256:54c38050039232e1db4ad7375cfce6748d7b41c29e95a081c8a6d2c30364a2ce", - "sha256:5d19b92a3c8f7f101c8dd86afd86b0f061a8ce4540ab8cd401fa2542756bce6d" + "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760", + "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7" ], - "version": "==4.4.1" + "version": "==4.4.2" + }, + "entrypoints": { + "hashes": [ + "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", + "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451" + ], + "version": "==0.3" + }, + "flake8": { + "hashes": [ + "sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb", + "sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca" + ], + "index": "pypi", + "version": "==3.7.9" }, "ipython": { "hashes": [ - "sha256:0f4bcf18293fb666df8511feec0403bdb7e061a5842ea6e88a3177b0ceb34ead", - "sha256:387686dd7fc9caf29d2fddcf3116c4b07a11d9025701d220c589a430b0171d8a" + "sha256:ca478e52ae1f88da0102360e57e528b92f3ae4316aabac80a2cd7f7ab2efb48a", + "sha256:eb8d075de37f678424527b5ef6ea23f7b80240ca031c2dd6de5879d687a65333" ], "index": "pypi", - "version": "==7.11.1" + "version": "==7.13.0" }, "ipython-genutils": { "hashes": [ @@ -424,25 +553,32 @@ }, "jedi": { "hashes": [ - "sha256:1349c1e8c107095a55386628bb3b2a79422f3a2cab8381e34ce19909e0cf5064", - "sha256:e909527104a903606dd63bea6e8e888833f0ef087057829b89a18364a856f807" + "sha256:cd60c93b71944d628ccac47df9a60fec53150de53d42dc10a7fc4b5ba6aae798", + "sha256:df40c97641cb943661d2db4c33c2e1ff75d491189423249e989bcea4464f3030" ], - "version": "==0.15.2" + "version": "==0.17.0" + }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" }, "parso": { "hashes": [ - "sha256:55cf25df1a35fd88b878715874d2c4dc1ad3f0eebd1e0266a67e1f55efccfbe1", - "sha256:5c1f7791de6bd5dbbeac8db0ef5594b36799de198b3f7f7014643b0c5536b9d3" + "sha256:158c140fc04112dc45bca311633ae5033c2c2a7b732fa33d0955bad8152a8dd0", + "sha256:908e9fae2144a076d72ae4e25539143d40b8e3eafbaeae03c1bfe226f4cdf12c" ], - "version": "==0.5.2" + "version": "==0.7.0" }, "pexpect": { "hashes": [ - "sha256:2094eefdfcf37a1fdbfb9aa090862c1a4878e5c7e0e7e7088bdb511c558e5cd1", - "sha256:9e2c1fd0e6ee3a49b28f95d4b33bc389c89b20af6a1255906e90ff1262ce62eb" + "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937", + "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c" ], "markers": "sys_platform != 'win32'", - "version": "==4.7.0" + "version": "==4.8.0" }, "pickleshare": { "hashes": [ @@ -453,10 +589,10 @@ }, "prompt-toolkit": { "hashes": [ - "sha256:0278d2f51b5ceba6ea8da39f76d15684e84c996b325475f6e5720edc584326a7", - "sha256:63daee79aa8366c8f1c637f1a4876b890da5fc92a19ebd2f7080ebacb901e990" + "sha256:563d1a4140b63ff9dd587bda9557cffb2fe73650205ab6f4383092fb882e7dc8", + "sha256:df7e9e63aea609b1da3a65641ceaf5bc7d05e0a04de5bd45d05dbeffbabf9e04" ], - "version": "==3.0.2" + "version": "==3.0.5" }, "ptyprocess": { "hashes": [ @@ -465,19 +601,40 @@ ], "version": "==0.6.0" }, + "pycodestyle": { + "hashes": [ + "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", + "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c" + ], + "version": "==2.5.0" + }, + "pyflakes": { + "hashes": [ + "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0", + "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2" + ], + "version": "==2.1.1" + }, "pygments": { "hashes": [ - "sha256:2a3fe295e54a20164a9df49c75fa58526d3be48e14aceba6d6b1e8ac0bfd6f1b", - "sha256:98c8aa5a9f778fcd1026a17361ddaf7330d1b7c62ae97c3bb0ae73e0b9b6b0fe" + "sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44", + "sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324" ], - "version": "==2.5.2" + "version": "==2.6.1" + }, + "shiv": { + "hashes": [ + "sha256:085eb2e917fd4a616987a0b607b06a8324fa882a5dfa5a05ee8389f84a0d518e", + "sha256:ee1c31241426f19e7f1f8b2036ab86a3f3ff78a3ae7166c02c112a940bd20915" + ], + "index": "pypi", + "version": "==0.1.2" }, "six": { "hashes": [ "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a", "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c" ], - "index": "pypi", "version": "==1.14.0" }, "traitlets": { @@ -489,10 +646,10 @@ }, "wcwidth": { "hashes": [ - "sha256:8fd29383f539be45b20bd4df0dc29c20ba48654a41e661925e612311e9f3c603", - "sha256:f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8" + "sha256:cafe2186b3c009a04067022ce1dcd79cb38d8d65ee4f4791b8888d6599d1bbe1", + "sha256:ee73862862a156bf77ff92b09034fc4825dd3af9cf81bc5b360668d425f3c5f1" ], - "version": "==0.1.8" + "version": "==0.1.9" } } } diff --git a/README.md b/README.md index 1eebef26..3948c243 100755 --- a/README.md +++ b/README.md @@ -41,11 +41,9 @@ Please see the installation wiki page [here](https://github.com/byt3bl33d3r/Crac # How to fund my tea & sushi reserve -BTC: `1ER8rRE6NTZ7RHN88zc6JY87LvtyuRUJGU` +If you use CrackMapExec a lot (especially if it's used commercially), please consider donating as a lot of time & effort went into building & maintaining this. -ETH: `0x91d9aDCf8B91f55BCBF0841616A01BeE551E90ee` - -LTC: `LLMa2bsvXbgBGnnBwiXYazsj7Uz6zRe4fr` +Press the "Sponsor" button on the top of this page to see ways of donating/sponsoring this project. # To do - Kerberos support diff --git a/README.rst b/README.rst deleted file mode 100644 index 2c0e6245..00000000 --- a/README.rst +++ /dev/null @@ -1,60 +0,0 @@ -|Supported Python versions| |Arsenal\_2016| |Arsenal\_2017| - -CrackMapExec -============ - -.. raw:: html - -

- cme -

- -Acknowledgments -=============== - -**(These are the people who did the hard stuff)** - -This project was originally inspired by: - -`smbmap `__ - -`CredCrack `__ - -`smbexec `__ - -Unintentional contributors: - -- The `Empire `__ project -- @T-S-A's `smbspider `__ script - -This repository contains the following repositories as submodules: - -`Impacket `__ - -`Pywerview `__ - -`PowerSploit `__ - -`Invoke-Obfuscation `__ -- `Invoke-Vnc `__ - -`Mimikittenz `__ - -`NetRipper `__ - -`RandomPS-Scripts `__ - -`RID-Hijacking ` - -Documentation, Tutorials, Examples -================================== - -See the project's -`wiki `__ for -documentation and usage examples - -Installation -============ - -Please see the installation wiki page -`here `__. - -To do -===== - -- Kerberos support -- [STRIKEOUT:0wn everything] - -.. |Supported Python versions| image:: https://img.shields.io/badge/python-2.7-blue.svg -.. |Arsenal\_2016| image:: https://cdn.rawgit.com/toolswatch/badges/master/arsenal/2016.svg -.. |Arsenal\_2017| image:: https://cdn.rawgit.com/toolswatch/badges/master/arsenal/2017.svg - diff --git a/cme/cli.py b/cme/cli.py index 7d781bb2..e85dda0c 100755 --- a/cme/cli.py +++ b/cme/cli.py @@ -6,7 +6,7 @@ from cme.helpers.logger import highlight def gen_cli_args(): - VERSION = '5.0.0dev' + VERSION = '5.0.1dev' CODENAME = 'P3l1as' p_loader = protocol_loader() diff --git a/cme/modules/enum_dns.py b/cme/modules/enum_dns.py index 84b6b273..40b99d7c 100644 --- a/cme/modules/enum_dns.py +++ b/cme/modules/enum_dns.py @@ -1,3 +1,4 @@ +from datetime import datetime from cme.helpers.logger import write_log class CMEModule: diff --git a/cme/modules/slinky.py b/cme/modules/slinky.py index 14351fad..63e25e75 100644 --- a/cme/modules/slinky.py +++ b/cme/modules/slinky.py @@ -41,7 +41,7 @@ class CMEModule: if not self.cleanup: self.server = module_options['SERVER'] - link = pylnk.create(self.lnk_path) + link = pylnk3.create(self.lnk_path) link.icon = '\\\\{}\\icons\\icon.ico'.format(self.server) link.save() diff --git a/cme/parsers/ip.py b/cme/parsers/ip.py index 38c5236f..f6df17c5 100755 --- a/cme/parsers/ip.py +++ b/cme/parsers/ip.py @@ -1,30 +1,23 @@ -from netaddr import IPAddress, IPRange, IPNetwork, AddrFormatError +from ipaddress import ip_address, ip_network, summarize_address_range def parse_targets(target): - if '-' in target: - ip_range = target.split('-') - try: - hosts = IPRange(ip_range[0], ip_range[1]) - except AddrFormatError: + try: + if '-' in target: + start_ip, end_ip = target.split('-') try: - start_ip = IPAddress(ip_range[0]) + end_ip = ip_address(end_ip) + except ValueError: + first_three_octets = start_ip.split(".")[:-1] + first_three_octets.append(end_ip) + end_ip = ip_address( + ".".join(first_three_octets) + ) - start_ip_words = list(start_ip.words) - start_ip_words[-1] = ip_range[1] - start_ip_words = [str(v) for v in start_ip_words] - - end_ip = IPAddress('.'.join(start_ip_words)) - - t = IPRange(start_ip, end_ip) - except AddrFormatError: - t = target - else: - try: - t = IPNetwork(target) - except AddrFormatError: - t = target - - if type(t) == IPNetwork or type(t) == IPRange: - return list(t) - else: - return [t.strip()] + for ip_range in summarize_address_range(ip_address(start_ip), end_ip): + for ip in ip_range: + yield str(ip) + else: + for ip in ip_network(target, strict=False): + yield str(ip) + except ValueError: + yield str(target) diff --git a/cme/protocols/http.py b/cme/protocols/http.py deleted file mode 100755 index e7dee066..00000000 --- a/cme/protocols/http.py +++ /dev/null @@ -1,134 +0,0 @@ -import requests -import os -from gevent.pool import Pool -from gevent.socket import gethostbyname -from urllib.parse import urlparse -from datetime import datetime -from cme.helpers.logger import highlight -from cme.logger import CMEAdapter -from cme.connection import * -from cme.helpers.http import * -from requests import ConnectionError, ConnectTimeout, ReadTimeout -from requests.packages.urllib3.exceptions import InsecureRequestWarning -from splinter import Browser -from selenium.webdriver.common.desired_capabilities import DesiredCapabilities - -# The following disables the warning on an invalid cert and allows any SSL/TLS cipher to be used -# I'm basically guessing this is the way to specify to allow all ciphers since I can't find any docs about it, if it don't worky holla at me -requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += ':ANY:ALL' -requests.packages.urllib3.disable_warnings(InsecureRequestWarning) - -class http(connection): - - def __init__(self, args, db, host): - self.args = args - self.db = db - self.hostname = host - self.url = None - self.transport = None - self.port = None - - if self.hostname.startswith('http://') or self.hostname.startswith('https://'): - port_dict = {'http': 80, 'https': 443} - self.url = self.hostname - - self.transport, netloc,_,_,_,_ = urlparse(self.url) - self.port = port_dict[self.transport] - - self.hostname = netloc - if ':' in netloc: - self.hostname, self.port = netloc.split(':') - - try: - self.host = gethostbyname(self.hostname) - except Exception as e: - logging.debug('Error resolving hostname {}: {}'.format(self.hostname, e)) - return - - self.proto_flow() - - @staticmethod - def proto_args(parser, std_parser, module_parser): - http_parser = parser.add_parser('http', help="own stuff using HTTP", parents=[std_parser, module_parser]) - http_parser.add_argument('--port', nargs='*', default=[80, 443, 8443, 8008, 8080, 8081], help='http ports to connect to (default: 80, 443, 8443, 8008, 8080, 8081)') - http_parser.add_argument('--transports', choices=['http', 'https'], default=['http', 'https'], help='force connection over http or https (default: all)') - http_parser.add_argument('--screenshot', action='store_true', help='take a screenshot of the loaded webpage') - - return parser - - def proto_flow(self): - if self.url: - single_connection(self, self.transport, self.port) - else: - pool = Pool(len(self.args.transports) * len(self.args.port)) - jobs = [] - for transport in self.args.transports: - for port in self.args.port: - jobs.append(pool.spawn(single_connection, self, transport, port)) - - for job in jobs: - job.join() - -class single_connection(connection): - - def __init__(self, http, transport, port): - self.http = http - self.db = http.db - self.host = http.host - self.url = http.url - self.args = http.args - self.port = port - self.transport = transport - self.hostname = http.hostname - self.server_headers = None - self.conn = None - - self.proto_flow() - - def proto_logger(self): - self.logger = CMEAdapter(extra={'protocol': 'HTTP', - 'host': self.host, - 'port': self.port, - 'hostname': self.hostname}) - - def print_host_info(self): - self.logger.info('{} (Server: {}) (Page Title: {})'.format(self.conn.url, - self.server_headers['Server'] if 'Server' in self.server_headers.keys() else None, - self.conn.title.strip() if self.conn.title else None)) - - def create_conn_obj(self): - user_agent = get_desktop_uagent() - if self.url: - url = self.url - else: - url = '{}://{}:{}/'.format(self.transport, self.hostname, self.port) - - try: - r = requests.get(url, timeout=10, headers={'User-Agent': user_agent}) - self.server_headers = r.headers - except (ConnectTimeout, ReadTimeout): - return False - except Exception as e: - if str(e).find('Read timed out') == -1: - logging.debug('Error connecting to {}://{}:{} :{}'.format(self.transport, self.hostname, self.port, e)) - return False - - self.db.add_host(self.host, self.hostname, self.port) - - capabilities = DesiredCapabilities.PHANTOMJS - capabilities['phantomjs.page.settings.userAgent'] = user_agent - #capabilities['phantomjs.page.settings.resourceTimeout'] = 10 * 1000 - capabilities['phantomjs.page.settings.userName'] = 'none' - capabilities['phantomjs.page.settings.password'] = 'none' - - self.conn = Browser('phantomjs', service_args=['--ignore-ssl-errors=true', '--web-security=no', '--ssl-protocol=any'], - service_log_path=os.path.expanduser('~/.cme/logs/ghostdriver.log'), desired_capabilities=capabilities) - - self.conn.driver.set_window_size(1200, 675) - self.conn.visit(url) - return True - - def screenshot(self): - screen_output = os.path.join(os.path.expanduser('~/.cme/logs/'), '{}:{}_{}'.format(self.hostname, self.port, datetime.now().strftime("%Y-%m-%d_%H%M%S"))) - self.conn.screenshot(name=screen_output) - self.logger.success('Screenshot stored at {}.png'.format(screen_output)) diff --git a/cme/protocols/http/__init__.py b/cme/protocols/http/__init__.py deleted file mode 100755 index e69de29b..00000000 diff --git a/cme/protocols/http/database.py b/cme/protocols/http/database.py deleted file mode 100755 index e016ba51..00000000 --- a/cme/protocols/http/database.py +++ /dev/null @@ -1,99 +0,0 @@ -class database: - - def __init__(self, conn): - self.conn = conn - - @staticmethod - def db_schema(db_conn): - db_conn.execute('''CREATE TABLE "credentials" ( - "id" integer PRIMARY KEY, - "username" text, - "password" text - )''') - - db_conn.execute('''CREATE TABLE "hosts" ( - "id" integer PRIMARY KEY, - "ip" text, - "hostname" text, - "port" integer, - "server" text, - "page_title" text, - "login_url" text - )''') - - def add_credential(self, url, username, password): - """ - Check if this credential has already been added to the database, if not add it in. - """ - cur = self.conn.cursor() - - cur.execute("SELECT * FROM credentials WHERE LOWER(username)=LOWER(?) AND password=?", [url, username, password]) - results = cur.fetchall() - - if not len(results): - cur.execute("INSERT INTO credentials (username, password) VALUES (?,?)", [username, password] ) - - cur.close() - - def add_host(self, ip, hostname, port, title=None, login_url=None): - cur = self.conn.cursor() - - cur.execute("SELECT * FROM hosts WHERE LOWER(ip)=LOWER(?) AND LOWER(hostname)=LOWER(?) AND port=? AND LOWER(login_url)=LOWER(?)", [ip, hostname, port, login_url]) - results = cur.fetchall() - - if not len(results): - cur.execute("INSERT INTO hosts (ip, hostname, port, login_url) VALUES (?,?,?,?)", [ip, hostname, port, login_url]) - - cur.close() - - def is_credential_valid(self, credentialID): - """ - Check if this credential ID is valid. - """ - cur = self.conn.cursor() - cur.execute('SELECT * FROM credentials WHERE id=? LIMIT 1', [credentialID]) - results = cur.fetchall() - cur.close() - return len(results) > 0 - - def is_host_valid(self, hostID): - """ - Check if this credential ID is valid. - """ - cur = self.conn.cursor() - cur.execute('SELECT * FROM host WHERE id=? LIMIT 1', [hostID]) - results = cur.fetchall() - cur.close() - return len(results) > 0 - - def get_credentials(self, filterTerm=None): - """ - Return credentials from the database. - """ - - cur = self.conn.cursor() - - # if we're returning a single credential by ID - if self.is_credential_valid(filterTerm): - cur.execute("SELECT * FROM credentials WHERE id=? LIMIT 1", [filterTerm]) - - # if we're filtering by username - elif filterTerm and filterTerm != "": - cur.execute("SELECT * FROM credentials WHERE LOWER(username) LIKE LOWER(?)", ['%{}%'.format(filterTerm.lower())]) - - # otherwise return all credentials - else: - cur.execute("SELECT * FROM credentials") - - results = cur.fetchall() - cur.close() - return results - - def remove_credentials(self, credIDs): - """ - Removes a credential ID from the database - """ - for credID in credIDs: - cur = self.conn.cursor() - cur.execute("DELETE FROM credentials WHERE id=?", [credID]) - cur.close() diff --git a/cme/protocols/http/db_navigator.py b/cme/protocols/http/db_navigator.py deleted file mode 100644 index 102465e1..00000000 --- a/cme/protocols/http/db_navigator.py +++ /dev/null @@ -1,109 +0,0 @@ -from cme.cmedb import DatabaseNavigator - - -class navigator(DatabaseNavigator): - - def display_creds(self, creds): - data = [['CredID', 'URL', 'UserName', 'Password']] - for cred in creds: - credID = cred[0] - url = cred[2] - username = cred[3] - password = cred[4] - - # links = self.db.get_links(credID=credID) - - data.append([credID, url, username, password]) - - self.print_table(data, title='Credential(s)') - - def display_hosts(self, hosts): - # print "\nHosts:\n" - # print " HostID IP Hostname Port Title URL" - return - - def do_creds(self, line): - - filterTerm = line.strip() - - if filterTerm == "": - creds = self.db.get_credentials() - self.display_creds(creds) - - elif filterTerm.split()[0].lower() == "add": - - args = filterTerm.split()[1:] - - if len(args) == 3: - url, username, password = args - self.db.add_credential(url, username, password) - - else: - print("[!] Format is 'add url username password") - return - - elif filterTerm.split()[0].lower() == "remove": - - args = filterTerm.split()[1:] - if len(args) != 1 : - print("[!] Format is 'remove '") - return - else: - self.db.remove_credentials(args) - self.db.remove_links(credIDs=args) - - else: - creds = self.db.get_credentials(filterTerm=filterTerm) - self.display_creds(creds) - - def do_hosts(self, line): - - filterTerm = line.strip() - - if filterTerm == "": - creds = self.db.get_hosts() - self.display_creds(creds) - - elif filterTerm.split()[0].lower() == "add": - - args = filterTerm.split()[1:] - - if len(args) == 3: - return - # url, username, password = args - # self.db.add_host() - - else: - print("[!] Format is 'add url ip hostname port") - return - - elif filterTerm.split()[0].lower() == "remove": - - args = filterTerm.split()[1:] - if len(args) != 1 : - print("[!] Format is 'remove '") - - return - # self.db.remove_host() - - else: - hosts = self.db.get_hosts(filterTerm=filterTerm) - self.display_hosts(hosts) - - def complete_creds(self, text, line, begidx, endidx): - "Tab-complete 'creds' commands." - - commands = ["add", "remove"] - - mline = line.partition(' ')[2] - offs = len(mline) - len(text) - return [s[offs:] for s in commands if s.startswith(mline)] - - def complete_hosts(self, text, line, begidx, endidx): - "Tab-complete 'hosts' commands." - - commands = ["add", "remove"] - - mline = line.partition(' ')[2] - offs = len(mline) - len(text) - return [s[offs:] for s in commands if s.startswith(mline)] diff --git a/requirements.txt b/requirements.txt index 5937fe96..eba6b581 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,35 +1,40 @@ --i https://pypi.org/simple/ -backports.functools-lru-cache==1.5 ; python_version < '3' +-i https://pypi.org/simple bcrypt==3.1.7 -beautifulsoup4==4.8.1 +beautifulsoup4==4.9.0 bs4==0.0.1 -certifi==2019.9.11 -cffi==1.13.0 +certifi==2020.4.5.1 +cffi==1.14.0 chardet==3.0.4 -cryptography==2.8 -enum34==1.1.6 -gevent==1.4.0 +click==7.1.1 +cryptography==2.9 +dnspython==1.16.0 +flask==1.1.2 +future==0.18.2 +gevent==1.5.0 greenlet==0.4.15 ; platform_python_implementation == 'CPython' -idna==2.8 -ipaddress==1.0.23 -msgpack-python==0.5.6 -netaddr==0.7.19 +idna==2.9 +impacket==0.9.21 +itsdangerous==1.1.0 +jinja2==2.11.2 +ldap3==2.7 +ldapdomaindump==0.9.2 +markupsafe==1.1.1 +msgpack==1.0.0 ntlm-auth==1.4.0 -paramiko==2.4.2 -pyasn1==0.4.5 -pycparser==2.19 -pycryptodomex==3.7.3 -pylnk3==0.3.* +paramiko==2.7.1 +pyasn1==0.4.8 +pycparser==2.20 +pycryptodomex==3.9.7 +pylnk3==0.3.0 pynacl==1.3.0 -pyopenssl==19.0.0 +pyopenssl==19.1.0 +pywinrm==0.4.1 requests-ntlm==1.1.0 -requests==2.21.0 -selenium==3.141.0 -six==1.12.0 -soupsieve==1.9.4 -splinter==0.10.0 +requests==2.23.0 +six==1.14.0 +soupsieve==2.0 termcolor==1.1.0 terminaltables==3.1.0 -urllib3==1.24.2 +urllib3==1.25.9 +werkzeug==1.0.1 xmltodict==0.12.0 -pywinrm==0.4.1 diff --git a/setup.cfg b/setup.cfg index 5aef279b..b88034e4 100755 --- a/setup.cfg +++ b/setup.cfg @@ -1,2 +1,2 @@ [metadata] -description-file = README.rst +description-file = README.md diff --git a/setup.py b/setup.py index bb47b9a3..a2a9afe9 100755 --- a/setup.py +++ b/setup.py @@ -3,12 +3,12 @@ from setuptools import setup, find_packages setup(name='crackmapexec', - version='5.0.0dev', + version='5.0.1dev', description='A swiss army knife for pentesting networks', classifiers=[ 'Environment :: Console', 'License :: OSI Approved :: BSD License', - 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3', 'Topic :: Security', ], keywords='pentesting security windows active-directory networks', @@ -20,23 +20,18 @@ setup(name='crackmapexec', "cme", "cme.*" ]), install_requires=[ - 'pycryptodomex', - 'pyasn1>=0.1.8', 'gevent>=1.2.0', 'requests>=2.9.1', 'requests-ntlm>=0.3.0', 'bs4', - 'netaddr', - 'pyOpenSSL', 'termcolor', - 'msgpack-python', - 'pylnk3>=0.3', - 'splinter', + 'msgpack', + 'pylnk3', + 'pywinrm', 'paramiko', + 'impacket', 'xmltodict', - 'six', - 'terminaltables', - 'pywinrm' + 'terminaltables' ], entry_points={ 'console_scripts': ['crackmapexec=cme.crackmapexec:main', 'cme=cme.crackmapexec:main', 'cmedb=cme.cmedb:main'],