man-spider 1.1.1__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 +16 -19
- man_spider/lib/logger.py +27 -32
- man_spider/lib/parser/__init__.py +1 -1
- man_spider/lib/parser/parser.py +102 -57
- man_spider/lib/processpool.py +24 -31
- man_spider/lib/smb.py +71 -63
- man_spider/lib/spider.py +69 -70
- man_spider/lib/spiderling.py +188 -141
- man_spider/lib/util.py +95 -29
- man_spider/manspider.py +170 -55
- {man_spider-1.1.1.dist-info → man_spider-2.0.0.dist-info}/METADATA +101 -44
- man_spider-2.0.0.dist-info/RECORD +18 -0
- {man_spider-1.1.1.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.1.dist-info/RECORD +0 -18
- man_spider-1.1.1.dist-info/entry_points.txt +0 -3
- {man_spider-1.1.1.dist-info → man_spider-2.0.0.dist-info/licenses}/LICENSE +0 -0
|
@@ -1,30 +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
|
-
License: GPL-3.0
|
|
6
|
-
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)
|
|
19
|
-
Project-URL: Homepage, https://github.com/blacklanternsecurity/MANSPIDER
|
|
20
5
|
Project-URL: Repository, https://github.com/blacklanternsecurity/MANSPIDER
|
|
6
|
+
Project-URL: Homepage, https://github.com/blacklanternsecurity/MANSPIDER
|
|
7
|
+
Author: TheTechromancer
|
|
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
|
|
21
14
|
Description-Content-Type: text/markdown
|
|
22
15
|
|
|
23
16
|
# MANSPIDER
|
|
24
17
|
### Crawl SMB shares for juicy information. File content searching + regex is supported!
|
|
25
18
|
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## What's New in v2.0
|
|
22
|
+
|
|
23
|
+
**Manspider 2.0 is here!** This brings significant improvements:
|
|
24
|
+
|
|
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
|
+
---
|
|
28
32
|
|
|
29
33
|

|
|
30
34
|
|
|
@@ -39,19 +43,35 @@ Description-Content-Type: text/markdown
|
|
|
39
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.
|
|
40
44
|

|
|
41
45
|
|
|
42
|
-
### Installation
|
|
43
|
-
|
|
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
|
|
44
52
|
~~~
|
|
45
|
-
# for images (png, jpeg)
|
|
46
|
-
$ sudo apt install tesseract-ocr
|
|
47
53
|
|
|
48
|
-
|
|
49
|
-
|
|
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
|
|
50
61
|
~~~
|
|
51
|
-
|
|
62
|
+
|
|
63
|
+
#### Install with pipx
|
|
64
|
+
~~~bash
|
|
65
|
+
pipx install git+https://github.com/blacklanternsecurity/MANSPIDER
|
|
52
66
|
~~~
|
|
53
|
-
|
|
54
|
-
|
|
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
|
|
55
75
|
~~~
|
|
56
76
|
|
|
57
77
|
## Installation (Docker)
|
|
@@ -133,6 +153,11 @@ $ manspider share.evilcorp.local -e kdbx kdb 1pif agilekeychain opvault lpd dash
|
|
|
133
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
|
|
134
154
|
~~~
|
|
135
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
|
+
|
|
136
161
|
### Usage Tip #1:
|
|
137
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`.
|
|
138
163
|
|
|
@@ -162,9 +187,9 @@ For example, you could specify any or all of these:
|
|
|
162
187
|
|
|
163
188
|
## Usage:
|
|
164
189
|
~~~
|
|
165
|
-
usage: manspider [-h] [-u USERNAME] [-p PASSWORD] [-d DOMAIN] [-m MAXDEPTH] [-H HASH] [-
|
|
166
|
-
[-c REGEX [REGEX ...]] [--sharenames SHARE [SHARE ...]] [--exclude-sharenames [SHARE ...]] [--dirnames DIR [DIR ...]]
|
|
167
|
-
[-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]
|
|
168
193
|
targets [targets ...]
|
|
169
194
|
|
|
170
195
|
Scan for juicy data on SMB shares. Matching files and logs are stored in $HOME/.manspider. All filters are case-insensitive.
|
|
@@ -173,26 +198,31 @@ positional arguments:
|
|
|
173
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
|
|
174
199
|
downloaded files)
|
|
175
200
|
|
|
176
|
-
|
|
201
|
+
options:
|
|
177
202
|
-h, --help show this help message and exit
|
|
178
|
-
-u
|
|
203
|
+
-u, --username USERNAME
|
|
179
204
|
username for authentication
|
|
180
|
-
-p
|
|
205
|
+
-p, --password PASSWORD
|
|
181
206
|
password for authentication
|
|
182
|
-
-d
|
|
183
|
-
|
|
184
|
-
|
|
207
|
+
-d, --domain DOMAIN domain for authentication
|
|
208
|
+
-l, --loot-dir LOOT_DIR
|
|
209
|
+
loot directory (default ~/.manspider/)
|
|
210
|
+
-m, --maxdepth MAXDEPTH
|
|
185
211
|
maximum depth to spider (default: 10)
|
|
186
|
-
-H
|
|
187
|
-
-
|
|
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
|
|
188
218
|
concurrent threads (default: 5)
|
|
189
|
-
-f
|
|
219
|
+
-f, --filenames REGEX [REGEX ...]
|
|
190
220
|
filter filenames using regex (space-separated)
|
|
191
|
-
-e
|
|
221
|
+
-e, --extensions EXT [EXT ...]
|
|
192
222
|
only show filenames with these extensions (space-separated, e.g. `docx xlsx` for only word & excel docs)
|
|
193
223
|
--exclude-extensions EXT [EXT ...]
|
|
194
224
|
ignore files with these extensions
|
|
195
|
-
-c
|
|
225
|
+
-c, --content REGEX [REGEX ...]
|
|
196
226
|
search for file content using regex (multiple supported)
|
|
197
227
|
--sharenames SHARE [SHARE ...]
|
|
198
228
|
only search shares with these names (multiple supported)
|
|
@@ -204,11 +234,38 @@ optional arguments:
|
|
|
204
234
|
don't search directories containing these strings (multiple supported)
|
|
205
235
|
-q, --quiet don't display matching file content
|
|
206
236
|
-n, --no-download don't download matching files
|
|
207
|
-
-mfail
|
|
237
|
+
-mfail, --max-failed-logons INT
|
|
208
238
|
limit failed logons
|
|
209
239
|
-o, --or-logic use OR logic instead of AND (files are downloaded if filename OR extension OR content match)
|
|
210
|
-
-s
|
|
240
|
+
-s, --max-filesize SIZE
|
|
211
241
|
don't retrieve files over this size, e.g. "500K" or ".5M" (default: 10M)
|
|
212
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)
|
|
213
247
|
~~~
|
|
214
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=6k1U680OLjuM4uqteeTbUDZojpy7MVDBR3pBp_LD4hk,1503
|
|
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=x2uzuS2ESZrAOR6hnfd5Goi8Sy04wRjNTXVf0LoGask,5006
|
|
8
|
-
man_spider/lib/processpool.py,sha256=KkT7ZCzi6_6c9bNlW04MioSb8G8muoUcxIIF8DXEMrA,3742
|
|
9
|
-
man_spider/lib/smb.py,sha256=uy9SbnwjYwiRh-7TVI7U0D8tcrU34o9pIHIAfo-IinQ,8974
|
|
10
|
-
man_spider/lib/spider.py,sha256=KcklxlgcTCOfBR6wlR8SRDGwES4M-IHedl7wyfjVrao,7185
|
|
11
|
-
man_spider/lib/spiderling.py,sha256=aVHkpyJI8YvKQyNldoLP7CzfMP0HYudpnzkzZx-wypo,15687
|
|
12
|
-
man_spider/lib/util.py,sha256=Ti7R8JMcA9q1iSyqYPBn9aCQtNoua7jYCH70rfgslHE,3130
|
|
13
|
-
man_spider/manspider.py,sha256=l4vfG_1CQjt6jVP_owAHybhajizSXTa9D3nocHOU3BY,8917
|
|
14
|
-
man_spider-1.1.1.dist-info/LICENSE,sha256=qvZcoAC_iNU83gvyvlLTL2TKCCmP0CBDzRQgXZKePAM,35102
|
|
15
|
-
man_spider-1.1.1.dist-info/METADATA,sha256=e1AtliskoGLNQ1iXBzwbtLDHzjRWe8JfWEWvQzIcRWM,9648
|
|
16
|
-
man_spider-1.1.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
17
|
-
man_spider-1.1.1.dist-info/entry_points.txt,sha256=ECMHYrXRR3rO40LF4AiKmuM2DbPvdmkxINp0Wa_qVCc,55
|
|
18
|
-
man_spider-1.1.1.dist-info/RECORD,,
|
|
File without changes
|