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.
- man_spider/lib/errors.py +8 -4
- man_spider/lib/file.py +13 -16
- man_spider/lib/logger.py +27 -32
- man_spider/lib/parser/__init__.py +1 -1
- man_spider/lib/parser/parser.py +102 -55
- man_spider/lib/processpool.py +24 -31
- man_spider/lib/smb.py +69 -62
- man_spider/lib/spider.py +66 -66
- man_spider/lib/spiderling.py +182 -136
- man_spider/lib/util.py +95 -29
- man_spider/manspider.py +168 -54
- {man_spider-1.1.2.dist-info → man_spider-2.0.0.dist-info}/METADATA +100 -42
- man_spider-2.0.0.dist-info/RECORD +18 -0
- {man_spider-1.1.2.dist-info → man_spider-2.0.0.dist-info}/WHEEL +1 -1
- man_spider-2.0.0.dist-info/entry_points.txt +2 -0
- man_spider-1.1.2.dist-info/RECORD +0 -18
- man_spider-1.1.2.dist-info/entry_points.txt +0 -3
- {man_spider-1.1.2.dist-info → man_spider-2.0.0.dist-info/licenses}/LICENSE +0 -0
|
@@ -1,29 +1,34 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: man-spider
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.0
|
|
4
4
|
Summary: Full-featured SMB spider capable of searching file content
|
|
5
|
-
|
|
5
|
+
Project-URL: Repository, https://github.com/blacklanternsecurity/MANSPIDER
|
|
6
|
+
Project-URL: Homepage, https://github.com/blacklanternsecurity/MANSPIDER
|
|
6
7
|
Author: TheTechromancer
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## What's New in v2.0
|
|
22
|
+
|
|
23
|
+
**Manspider 2.0 is here!** This brings significant improvements:
|
|
25
24
|
|
|
26
|
-
**
|
|
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
|

|
|
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
|

|
|
40
45
|
|
|
41
|
-
### Installation
|
|
42
|
-
|
|
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
|
-
|
|
48
|
-
|
|
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
|
-
|
|
62
|
+
|
|
63
|
+
#### Install with pipx
|
|
64
|
+
~~~bash
|
|
65
|
+
pipx install git+https://github.com/blacklanternsecurity/MANSPIDER
|
|
51
66
|
~~~
|
|
52
|
-
|
|
53
|
-
|
|
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] [-
|
|
165
|
-
[-c REGEX [REGEX ...]] [--sharenames SHARE [SHARE ...]] [--exclude-sharenames [SHARE ...]] [--dirnames DIR [DIR ...]]
|
|
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
|
-
|
|
201
|
+
options:
|
|
176
202
|
-h, --help show this help message and exit
|
|
177
|
-
-u
|
|
203
|
+
-u, --username USERNAME
|
|
178
204
|
username for authentication
|
|
179
|
-
-p
|
|
205
|
+
-p, --password PASSWORD
|
|
180
206
|
password for authentication
|
|
181
|
-
-d
|
|
182
|
-
|
|
183
|
-
|
|
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
|
|
186
|
-
-
|
|
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
|
|
219
|
+
-f, --filenames REGEX [REGEX ...]
|
|
189
220
|
filter filenames using regex (space-separated)
|
|
190
|
-
-e
|
|
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
|
|
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
|
|
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
|
|
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,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,,
|
|
File without changes
|