man-spider 1.1.2__py3-none-any.whl → 2.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,29 +1,34 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: man-spider
3
- Version: 1.1.2
3
+ Version: 2.0.0
4
4
  Summary: Full-featured SMB spider capable of searching file content
5
- License: GPL-3.0
5
+ Project-URL: Repository, https://github.com/blacklanternsecurity/MANSPIDER
6
+ Project-URL: Homepage, https://github.com/blacklanternsecurity/MANSPIDER
6
7
  Author: TheTechromancer
7
- Requires-Python: >=3.8,<3.14
8
- Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
9
- Classifier: Programming Language :: Python :: 3
10
- Classifier: Programming Language :: Python :: 3.8
11
- Classifier: Programming Language :: Python :: 3.9
12
- Classifier: Programming Language :: Python :: 3.10
13
- Classifier: Programming Language :: Python :: 3.11
14
- Classifier: Programming Language :: Python :: 3.12
15
- Classifier: Programming Language :: Python :: 3.13
16
- Requires-Dist: extractous (>=0.3.0,<0.4.0)
17
- Requires-Dist: impacket (>=0.12.0,<0.13.0)
18
- Requires-Dist: python-magic (>=0.4.27,<0.5.0)
8
+ License: GPL-3.0
9
+ License-File: LICENSE
10
+ Requires-Python: >=3.10
11
+ Requires-Dist: charset-normalizer
12
+ Requires-Dist: impacket
13
+ Requires-Dist: kreuzberg
19
14
  Description-Content-Type: text/markdown
20
15
 
21
16
  # MANSPIDER
22
17
  ### Crawl SMB shares for juicy information. File content searching + regex is supported!
23
18
 
24
- ### UPDATE 2025-05-26
19
+ ---
20
+
21
+ ## What's New in v2.0
22
+
23
+ **Manspider 2.0 is here!** This brings significant improvements:
25
24
 
26
- **Manspider has been updated to support kerberos!** Also, the textract library has been replaced with [Extractous](https://github.com/yobix-ai/extractous), so you can now feel free to run it outside Docker. 🎉
25
+ - **New and improved text extraction** powered by [Kreuzberg](https://github.com/Goldziher/kreuzberg) - now supporting PDF, DOCX, XLSX, PPTX, images with OCR, and many more formats
26
+ - **Modern package management** with [uv](https://github.com/astral-sh/uv) for faster, more reliable installations
27
+ - **Python 3.14 support** - ready for the latest Python releases
28
+ - **Date filtering** - search files by modification date with `--modified-after` and `--modified-before`
29
+ - **Comprehensive unit tests** - improved reliability and stability
30
+
31
+ ---
27
32
 
28
33
  ![manspider](https://user-images.githubusercontent.com/20261699/74963251-6a08de80-53df-11ea-88f4-60c39665dfa2.gif)
29
34
 
@@ -38,19 +43,35 @@ Description-Content-Type: text/markdown
38
43
  ### MANSPIDER will crawl every share on every target system. If provided creds don't work, it will fall back to "guest", then to a null session.
39
44
  ![manspider](https://user-images.githubusercontent.com/20261699/80316979-f9ab7e80-87ce-11ea-9628-3c22a07e8378.png)
40
45
 
41
- ### Installation:
42
- (Optional) Install these dependencies to add additional file parsing capability:
46
+ ### Installation
47
+
48
+ #### Quick Run with uvx (recommended)
49
+ ~~~bash
50
+ # Run directly without installing
51
+ uvx --from git+https://github.com/blacklanternsecurity/MANSPIDER manspider --help
43
52
  ~~~
44
- # for images (png, jpeg)
45
- $ sudo apt install tesseract-ocr
46
53
 
47
- # for legacy document support (.doc)
48
- $ sudo apt install antiword
54
+ #### Install with uv
55
+ ~~~bash
56
+ # Install globally
57
+ uv tool install git+https://github.com/blacklanternsecurity/MANSPIDER
58
+
59
+ # Run
60
+ manspider --help
49
61
  ~~~
50
- Install manspider (please be patient, this can take a while):
62
+
63
+ #### Install with pipx
64
+ ~~~bash
65
+ pipx install git+https://github.com/blacklanternsecurity/MANSPIDER
51
66
  ~~~
52
- $ pip install pipx
53
- $ pipx install git+https://github.com/blacklanternsecurity/MANSPIDER
67
+
68
+ #### Optional Dependencies
69
+ ~~~bash
70
+ # for OCR on images (png, jpeg)
71
+ sudo apt install tesseract-ocr
72
+
73
+ # for legacy .doc support (kreuzberg uses libreoffice)
74
+ sudo apt install libreoffice
54
75
  ~~~
55
76
 
56
77
  ## Installation (Docker)
@@ -132,6 +153,11 @@ $ manspider share.evilcorp.local -e kdbx kdb 1pif agilekeychain opvault lpd dash
132
153
  $ manspider share.evilcorp.local -e pfx p12 pkcs12 pem key crt cer csr jks keystore key keys der -d evilcorp -u bob -p Passw0rd
133
154
  ~~~
134
155
 
156
+ ### Example #10: Search for recently modified files
157
+ ~~~
158
+ $ manspider share.evilcorp.local -e docx xlsx pdf --modified-after 2026-01-01 -d evilcorp -u bob -p Passw0rd
159
+ ~~~
160
+
135
161
  ### Usage Tip #1:
136
162
  You can run multiple instances of manspider at one time. This is useful when one instance is already running, and you want to search what it's downloaded (similar to `grep -R`). To do this, specify the keyword `loot` as the target, which will search the downloaded files in `$HOME/.manspider/loot`.
137
163
 
@@ -161,9 +187,9 @@ For example, you could specify any or all of these:
161
187
 
162
188
  ## Usage:
163
189
  ~~~
164
- usage: manspider [-h] [-u USERNAME] [-p PASSWORD] [-d DOMAIN] [-m MAXDEPTH] [-H HASH] [-t THREADS] [-f REGEX [REGEX ...]] [-e EXT [EXT ...]] [--exclude-extensions EXT [EXT ...]]
165
- [-c REGEX [REGEX ...]] [--sharenames SHARE [SHARE ...]] [--exclude-sharenames [SHARE ...]] [--dirnames DIR [DIR ...]] [--exclude-dirnames DIR [DIR ...]] [-q] [-n]
166
- [-mfail INT] [-o] [-s SIZE] [-v]
190
+ usage: manspider [-h] [-u USERNAME] [-p PASSWORD] [-d DOMAIN] [-l LOOT_DIR] [-m MAXDEPTH] [-H HASH] [-k] [-aesKey HEX] [-dc-ip IP] [-t THREADS] [-f REGEX [REGEX ...]] [-e EXT [EXT ...]]
191
+ [--exclude-extensions EXT [EXT ...]] [-c REGEX [REGEX ...]] [--sharenames SHARE [SHARE ...]] [--exclude-sharenames [SHARE ...]] [--dirnames DIR [DIR ...]]
192
+ [--exclude-dirnames DIR [DIR ...]] [-q] [-n] [-mfail INT] [-o] [-s SIZE] [-v]
167
193
  targets [targets ...]
168
194
 
169
195
  Scan for juicy data on SMB shares. Matching files and logs are stored in $HOME/.manspider. All filters are case-insensitive.
@@ -172,26 +198,31 @@ positional arguments:
172
198
  targets IPs, Hostnames, CIDR ranges, or files containing targets to spider (NOTE: local searching also supported, specify directory name or keyword "loot" to search
173
199
  downloaded files)
174
200
 
175
- optional arguments:
201
+ options:
176
202
  -h, --help show this help message and exit
177
- -u USERNAME, --username USERNAME
203
+ -u, --username USERNAME
178
204
  username for authentication
179
- -p PASSWORD, --password PASSWORD
205
+ -p, --password PASSWORD
180
206
  password for authentication
181
- -d DOMAIN, --domain DOMAIN
182
- domain for authentication
183
- -m MAXDEPTH, --maxdepth MAXDEPTH
207
+ -d, --domain DOMAIN domain for authentication
208
+ -l, --loot-dir LOOT_DIR
209
+ loot directory (default ~/.manspider/)
210
+ -m, --maxdepth MAXDEPTH
184
211
  maximum depth to spider (default: 10)
185
- -H HASH, --hash HASH NTLM hash for authentication
186
- -t THREADS, --threads THREADS
212
+ -H, --hash HASH NTLM hash for authentication
213
+ -k, --kerberos Use Kerberos authentication. Grabs credentials from ccache file (KRB5CCNAME) based on target parameters
214
+ -aesKey, --aes-key HEX
215
+ AES key to use for Kerberos Authentication (128 or 256 bits)
216
+ -dc-ip, --dc-ip IP IP Address of the domain controller. If omitted it will use the domain part (FQDN) specified in the target parameter
217
+ -t, --threads THREADS
187
218
  concurrent threads (default: 5)
188
- -f REGEX [REGEX ...], --filenames REGEX [REGEX ...]
219
+ -f, --filenames REGEX [REGEX ...]
189
220
  filter filenames using regex (space-separated)
190
- -e EXT [EXT ...], --extensions EXT [EXT ...]
221
+ -e, --extensions EXT [EXT ...]
191
222
  only show filenames with these extensions (space-separated, e.g. `docx xlsx` for only word & excel docs)
192
223
  --exclude-extensions EXT [EXT ...]
193
224
  ignore files with these extensions
194
- -c REGEX [REGEX ...], --content REGEX [REGEX ...]
225
+ -c, --content REGEX [REGEX ...]
195
226
  search for file content using regex (multiple supported)
196
227
  --sharenames SHARE [SHARE ...]
197
228
  only search shares with these names (multiple supported)
@@ -203,11 +234,38 @@ optional arguments:
203
234
  don't search directories containing these strings (multiple supported)
204
235
  -q, --quiet don't display matching file content
205
236
  -n, --no-download don't download matching files
206
- -mfail INT, --max-failed-logons INT
237
+ -mfail, --max-failed-logons INT
207
238
  limit failed logons
208
239
  -o, --or-logic use OR logic instead of AND (files are downloaded if filename OR extension OR content match)
209
- -s SIZE, --max-filesize SIZE
240
+ -s, --max-filesize SIZE
210
241
  don't retrieve files over this size, e.g. "500K" or ".5M" (default: 10M)
211
242
  -v, --verbose show debugging messages
243
+ --modified-after DATE
244
+ only show files modified after this date (format: YYYY-MM-DD)
245
+ --modified-before DATE
246
+ only show files modified before this date (format: YYYY-MM-DD)
212
247
  ~~~
213
248
 
249
+ ## Development
250
+
251
+ ### Testing
252
+
253
+ ```bash
254
+ # Run tests
255
+ uv run pytest
256
+ ```
257
+
258
+ ### Linting
259
+
260
+ This project uses [ruff](https://github.com/astral-sh/ruff) for linting and formatting.
261
+
262
+ ```bash
263
+ # Run linter
264
+ uv run ruff check .
265
+
266
+ # Run linter with auto-fix
267
+ uv run ruff check --fix .
268
+
269
+ # Run formatter
270
+ uv run ruff format .
271
+ ```
@@ -0,0 +1,18 @@
1
+ man_spider/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ man_spider/manspider.py,sha256=un_CwO2EbwCoXRfIccvCeddMy5jFWfG4PuTKr9lHf9M,10445
3
+ man_spider/lib/__init__.py,sha256=ur53cnY4wqGh1C19LDk61D62vzk0iXZRYshU33Mqe-Q,86
4
+ man_spider/lib/errors.py,sha256=NP-T7KtgNAEOoUKAJipSSk45QeyWrZb4y8uTgj6VB-w,1065
5
+ man_spider/lib/file.py,sha256=W96HlDVZip9bdeMYZfBxVKGg2vrwqvPRjPtCjHriN1w,1527
6
+ man_spider/lib/logger.py,sha256=kcqrVHdY_yddqFSI1YhlSK1A4JNi8JiMGgjei8-UXvg,2420
7
+ man_spider/lib/processpool.py,sha256=6kg_KL49XVdQXLiBlYram8pK-PTmebjrAuVJvvIGB54,3865
8
+ man_spider/lib/smb.py,sha256=Co_wPted46gEoVomcmV55VWrj_yO-8i65shsWEX5Mxk,9686
9
+ man_spider/lib/spider.py,sha256=l_eBetH0FMHS2BnxBOXd_5NA09E-5-6BfGXV_6q_nh4,7416
10
+ man_spider/lib/spiderling.py,sha256=Sdk-PHTl7vui36jiQEAXqEHUIGWaBwpxTY5t2AywGfQ,18751
11
+ man_spider/lib/util.py,sha256=0wqPXVA0yhtsZPFht4BDXZJxkOnXEsMkNduJPA4g8bE,5016
12
+ man_spider/lib/parser/__init__.py,sha256=FRoKwIMIYfP1ESv02iKyCG9PH4vR2wZg1Cpqj7ryI3g,22
13
+ man_spider/lib/parser/parser.py,sha256=zHFagYBXp7fDe6H1Fp-_HqEbXCHPgvDueXxRI334EJo,7093
14
+ man_spider-2.0.0.dist-info/METADATA,sha256=IByvTAoKnT6zRf2I5S78BO5BlAVt_-zEzSSrgP27uOI,10897
15
+ man_spider-2.0.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
16
+ man_spider-2.0.0.dist-info/entry_points.txt,sha256=tNKDPBaLZJ65HCR2zP37LGmXVFvVoxRoGvmLdoOLyXg,56
17
+ man_spider-2.0.0.dist-info/licenses/LICENSE,sha256=qvZcoAC_iNU83gvyvlLTL2TKCCmP0CBDzRQgXZKePAM,35102
18
+ man_spider-2.0.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ manspider = man_spider.manspider:main
@@ -1,18 +0,0 @@
1
- man_spider/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- man_spider/lib/__init__.py,sha256=ur53cnY4wqGh1C19LDk61D62vzk0iXZRYshU33Mqe-Q,86
3
- man_spider/lib/errors.py,sha256=InHvv7ZfWn766Jm6DsWRRZCzWhWxaDzlfmGyDg3SOJo,1061
4
- man_spider/lib/file.py,sha256=BV_waZ3b4Pl74uiXrKMZAaxbTxAvvPacA8mYeq579Zs,1522
5
- man_spider/lib/logger.py,sha256=apDRFLWy2j7ShrxatHqBkYAGyv7b9FQyAO0uDvTHqdM,2440
6
- man_spider/lib/parser/__init__.py,sha256=m0KGcdcwfM6xh0l1YFLvlXSeCI82auoB6ztrWN7qGyM,21
7
- man_spider/lib/parser/parser.py,sha256=L8lbApOYB2jGVHl_aSkm9AdRgDpKA036YwHNlEvtDA8,4905
8
- man_spider/lib/processpool.py,sha256=KkT7ZCzi6_6c9bNlW04MioSb8G8muoUcxIIF8DXEMrA,3742
9
- man_spider/lib/smb.py,sha256=nSILevYjW3E5ftPwI4tbMLqL-2SBmV7W-vTAk-5ZEw0,8989
10
- man_spider/lib/spider.py,sha256=oV-VAKK2vdqkcrEZU7SosApXycNaGHEJoBWzfUhlf0Q,7186
11
- man_spider/lib/spiderling.py,sha256=pHDSsqYSAjlMGEbXyBgYg7vPMJcnF-2e6hX8h0ZJzz0,15758
12
- man_spider/lib/util.py,sha256=Ti7R8JMcA9q1iSyqYPBn9aCQtNoua7jYCH70rfgslHE,3130
13
- man_spider/manspider.py,sha256=cS80lHcexeJqGDBzPJs3GJj0YBcNMMJzQcVxfRnPjwA,8928
14
- man_spider-1.1.2.dist-info/LICENSE,sha256=qvZcoAC_iNU83gvyvlLTL2TKCCmP0CBDzRQgXZKePAM,35102
15
- man_spider-1.1.2.dist-info/METADATA,sha256=DppVaxKYFRX2r55Xzx-7ArPxGmn6ZKmS4lLcVpHhW6E,9501
16
- man_spider-1.1.2.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
17
- man_spider-1.1.2.dist-info/entry_points.txt,sha256=ECMHYrXRR3rO40LF4AiKmuM2DbPvdmkxINp0Wa_qVCc,55
18
- man_spider-1.1.2.dist-info/RECORD,,
@@ -1,3 +0,0 @@
1
- [console_scripts]
2
- manspider=man_spider.manspider:main
3
-