parasort 5.1.0__tar.gz
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.
- parasort-5.1.0/CHANGELOG.md +136 -0
- parasort-5.1.0/LICENSE +21 -0
- parasort-5.1.0/MANIFEST.in +2 -0
- parasort-5.1.0/PKG-INFO +458 -0
- parasort-5.1.0/README.md +429 -0
- parasort-5.1.0/parameter_categories.json +74 -0
- parasort-5.1.0/parasort/__init__.py +6 -0
- parasort-5.1.0/parasort/parasort.py +1824 -0
- parasort-5.1.0/parasort.egg-info/PKG-INFO +458 -0
- parasort-5.1.0/parasort.egg-info/SOURCES.txt +20 -0
- parasort-5.1.0/parasort.egg-info/dependency_links.txt +1 -0
- parasort-5.1.0/parasort.egg-info/entry_points.txt +2 -0
- parasort-5.1.0/parasort.egg-info/requires.txt +4 -0
- parasort-5.1.0/parasort.egg-info/top_level.txt +1 -0
- parasort-5.1.0/pyproject.toml +47 -0
- parasort-5.1.0/requirements.txt +1 -0
- parasort-5.1.0/setup.cfg +4 -0
- parasort-5.1.0/setup.py +14 -0
- parasort-5.1.0/tests/conftest.py +34 -0
- parasort-5.1.0/tests/test_cli.py +103 -0
- parasort-5.1.0/tests/test_core.py +103 -0
- parasort-5.1.0/tests/test_processing.py +187 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Parasort are documented in this file.
|
|
4
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
5
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [5.1.0] - 2026-09-13
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- **Tests + CI**: `tests/` pytest suite (37 tests: core, processing, CLI,
|
|
11
|
+
incl. short-form convention coverage) and `.github/workflows/ci.yml` matrix
|
|
12
|
+
across Python 3.11–3.14 (`pytest`, `build`, `twine check` gate);
|
|
13
|
+
`pip install -e ".[test]"` support.
|
|
14
|
+
- **Streaming input + `-mx` / `--max-urls`**: input files are read line-by-line
|
|
15
|
+
(no giant intermediate lists); aborts with a clear error when stdin+file
|
|
16
|
+
input exceeds INT URLs.
|
|
17
|
+
- **JSONL + stdout mode**: `-f jsonl` writes a single `urls.jsonl`
|
|
18
|
+
(`{"domain","category","url"}` per line); `-o -` / `-st` / `--stdout` streams
|
|
19
|
+
those records to stdout (human output goes to stderr), e.g.
|
|
20
|
+
`parasort -i urls.txt -o - | nuclei -l /dev/stdin`.
|
|
21
|
+
- **CSV split** (`-cs` / `--csv-split`): `single` (default, one `urls.csv`) or
|
|
22
|
+
`per-domain` (one `urls.csv` per domain folder with `category,url` columns).
|
|
23
|
+
- **Normalized dedup** (`-ddn` / `--dedup-normalized`): collapse URLs with
|
|
24
|
+
identical (domain, path, param-name set), ignoring order/case/values
|
|
25
|
+
(`?id=1&a=2` vs `?A=2&ID=1`); runs after exact `-dd`.
|
|
26
|
+
- **Live-check upgrade**: `-m` / `--method auto` (default, HEAD first with GET
|
|
27
|
+
fallback) / `head` / `get`; `-rt` / `--retries 0-10`; `-is` /
|
|
28
|
+
`--include-status` extra live codes (e.g. `403 404`, evaluated even on HTTP
|
|
29
|
+
errors); `-lc` / `--live-cache FILE` with `-ct` / `--cache-ttl` (default
|
|
30
|
+
86400s) persists results across runs; each unique URL is probed once per run
|
|
31
|
+
(duplicates preserved in output).
|
|
32
|
+
- **Config management**: `--init-config` (`-ic`, create if missing) and
|
|
33
|
+
`--reset-config` (`-rc`, overwrite with built-in defaults); validation now
|
|
34
|
+
keeps valid categories and prints per-category warnings instead of rejecting
|
|
35
|
+
the whole file; `ParaSort.builtin_defaults()` / `reset_config()` API.
|
|
36
|
+
- **Short + long forms**: every new flag follows the project convention
|
|
37
|
+
(`-st`, `-mx`, `-ddn`, `-cs`, `-m`, `-rt`, `-is`, `-lc`, `-ct`, `-ic`, `-rc`).
|
|
38
|
+
|
|
39
|
+
## [5.0.1] - 2026-09-13
|
|
40
|
+
|
|
41
|
+
### Fixed
|
|
42
|
+
- `normalize_parameter`: decode until stable (up to 5x, fixes triple-encoding),
|
|
43
|
+
strip repeated `[]` and single `[..]` suffixes (`id[][]` -> `id`, `id[0]` -> `id`,
|
|
44
|
+
`user[name]` -> `user`).
|
|
45
|
+
- `get_domain_from_url`: reject whitespace/garbage hostnames (`"not a url %%%"`
|
|
46
|
+
-> `unknown_domain`), strip trailing dots, validate labels.
|
|
47
|
+
- `dedup_urls`: strip whitespace in output too (previously kept `" url "` verbatim).
|
|
48
|
+
- `param_signature` / `-uq`: param-less or fully-excluded URLs no longer collapse
|
|
49
|
+
to one (empty signature returns `None` = keep).
|
|
50
|
+
- `compare_versions`: pre-release sorts lower (`5.0.0b1 < 5.0.0`), so beta -> release
|
|
51
|
+
triggers `--update`.
|
|
52
|
+
- `fetch_latest_version`: tries `main` then `master` branch.
|
|
53
|
+
- `perform_update`: fixed inverted `capture_output` (silent no longer spams).
|
|
54
|
+
- `load_custom_params_from_file`: strips inline `#` comments (`api_key # prod`
|
|
55
|
+
-> `api_key`).
|
|
56
|
+
- `-vl` / `-lp`: case-insensitive (`-vl SQLI`, `-lp SQLI` work); `-vl all sqli`
|
|
57
|
+
warns and expands to all.
|
|
58
|
+
- `-cp ","`: warns instead of silently ignoring.
|
|
59
|
+
- `--timeout` message/help: `>0 and <=300` (code already allowed `0.5`).
|
|
60
|
+
- Parameter tracking/extraction normalized to lowercase (`ID` and `id` no longer
|
|
61
|
+
listed separately).
|
|
62
|
+
- `show_categories`: trailing `...` only when >5 params.
|
|
63
|
+
- `_validate_config`: empty category lists allowed; entries stripped.
|
|
64
|
+
- `filter_live_urls`: duplicate URLs preserve first-seen order.
|
|
65
|
+
- `--no-color` pre-scan no longer triggers on values (e.g. `-cp` values).
|
|
66
|
+
- `LICENSE`: holder/year normalized to `2025-2026 Ev3rPalestine`.
|
|
67
|
+
- `README`: fixed `Paramters` typo.
|
|
68
|
+
|
|
69
|
+
## [5.0.0] - 2026-09-12
|
|
70
|
+
|
|
71
|
+
### Added
|
|
72
|
+
- **Deduplication** (`-dd` / `--dedup`): drop exact duplicate URLs before processing.
|
|
73
|
+
- **Unique params** (`-uq` / `--unique-params`): keep one URL per parameter-name set per domain
|
|
74
|
+
(e.g. `?id=1` and `?id=2` collapse to the first seen).
|
|
75
|
+
- **Output formats** (`-f` / `--format`): `txt` (default, per-domain `*-urls.txt`),
|
|
76
|
+
`json` (per-domain `.json` + `summary.json`) and `csv` (single `urls.csv`).
|
|
77
|
+
- **Category profiles** (`-pf` / `--profile`): `web`
|
|
78
|
+
(sqli, xss, ssrf, lfi, open_redirect) and `api`
|
|
79
|
+
(sqli, auth_bypass, business_logic, info_disclosure, command_injection, ssrf).
|
|
80
|
+
An explicit `-vl` / `--vuln` overrides the profile.
|
|
81
|
+
- **Filters**: `-ed` / `--exclude-domain` (exact or `*` wildcard, case-insensitive) and
|
|
82
|
+
`-xp` / `--exclude-param` (ignored for matching and extraction).
|
|
83
|
+
- **Top-N** (`-tp` / `--top`): keep only the first INT URLs per category per domain.
|
|
84
|
+
- **Live-host check** (`-hc` / `--status-check`): keep only URLs responding HTTP 2xx-3xx
|
|
85
|
+
(concurrent requests, stdlib only) with configurable `-to` / `--timeout` (>0 and <=300s).
|
|
86
|
+
- **Info commands**: `-lp` / `--list-params` (list a category's parameters),
|
|
87
|
+
`-V` / `--version`, `-up` / `--update` (self-update via pip, PyPI first with GitHub fallback).
|
|
88
|
+
- **Packaging**: `pyproject.toml` (PEP 517/621 metadata, single-sourced version),
|
|
89
|
+
`MANIFEST.in`, `.gitignore`; PyPI-ready (`pip install parasort`).
|
|
90
|
+
- **Severity ordering**: categories are now ordered by severity in verbose output and
|
|
91
|
+
JSON/CSV writers.
|
|
92
|
+
|
|
93
|
+
### Changed
|
|
94
|
+
- **Every CLI argument now has both a short and a long form**
|
|
95
|
+
(e.g. `-c` / `--clear`, `-nc` / `--no-color`, `-vl` / `--vuln`).
|
|
96
|
+
- `--vuln` accepts custom categories added via `parameter_categories.json`
|
|
97
|
+
(previously hardcoded choices rejected them).
|
|
98
|
+
- Minimum Python version is now **3.11+** (was 3.6+).
|
|
99
|
+
- `setup.py` is now a thin shim; all metadata lives in `pyproject.toml`.
|
|
100
|
+
- `--update` upgrades from PyPI first (`pip install --upgrade parasort`),
|
|
101
|
+
falling back to the GitHub URL.
|
|
102
|
+
- Global summary notes that a URL matching N categories is counted in each.
|
|
103
|
+
|
|
104
|
+
### Fixed
|
|
105
|
+
- Domain extraction broke on credentials (`user:pass@host` returned `user`),
|
|
106
|
+
IPv6 (`[::1]:8080` returned `[`), uppercase hosts (duplicate folders) and
|
|
107
|
+
scheme-less URLs (`example.com/?id=1` went to `unknown_domain`).
|
|
108
|
+
Now uses `hostname` with lowercasing and scheme-less fallback.
|
|
109
|
+
- `normalize_parameter` mangled names containing `amp;` mid-string
|
|
110
|
+
(e.g. `exampleamp;test`); now strips only a leading `amp;` artifact,
|
|
111
|
+
double-decodes, and strips PHP `id[]` suffixes.
|
|
112
|
+
- `clear_parameters` collapsed `?id=1&id=2` to a single `?id=`; now preserves
|
|
113
|
+
order and duplicates (`?id=&id=`).
|
|
114
|
+
- Per-category parameter tracking recorded *every* URL param under *each*
|
|
115
|
+
matched category; now only genuinely matching params are recorded, and
|
|
116
|
+
`uncategorized` params are tracked too.
|
|
117
|
+
- Nested output dirs (`-o a/b/c`) crashed; output dir creation is now
|
|
118
|
+
`parents=True` inside the error-handled path (a file path returns `False`).
|
|
119
|
+
- Missing input file combined with stdin was silently ignored; now warns and
|
|
120
|
+
continues with stdin URLs.
|
|
121
|
+
- `-cp "a,b" c` (mixed comma + space) left `'a,b'` unsplit so it never matched;
|
|
122
|
+
commas are now split in every element.
|
|
123
|
+
- Indented `# comments` in custom-param files were treated as parameters.
|
|
124
|
+
- `--no-color` only cleared `Fore` (leaving `Back`/`Style`) and never applied to
|
|
125
|
+
help text; now clears all three and is pre-scanned before help rendering.
|
|
126
|
+
- Bare config filenames, invalid JSON and malformed configs no longer crash or
|
|
127
|
+
spam silent mode; config structure is validated.
|
|
128
|
+
- `all-parameters.txt` is now written for single-domain runs too.
|
|
129
|
+
- Output file handles are always closed (`try/finally`), even on errors.
|
|
130
|
+
- `README.md` installation/arguments sections updated; fixed
|
|
131
|
+
`custom-urls.txt` vs `custom-params-urls.txt` mismatch.
|
|
132
|
+
|
|
133
|
+
## [1.5.0] - 2025-08-01
|
|
134
|
+
- Baseline release: URL categorization by vulnerability type, domain-based output,
|
|
135
|
+
parameter extraction (`-ep`), custom parameters (`-cp` / `-cpf`), value clearing
|
|
136
|
+
(`--clear`), verbose/silent modes, file + stdin input, JSON config in `~/.parasort/`.
|
parasort-5.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025-2026 Ev3rPalestine
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
parasort-5.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: parasort
|
|
3
|
+
Version: 5.1.0
|
|
4
|
+
Summary: URL Parameter Categorization and Extraction Tool for Penetration Testing
|
|
5
|
+
Author-email: Ev3rPalestine <Ev3rPalestine@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/Ev3rPalestine/Parasort
|
|
8
|
+
Project-URL: Repository, https://github.com/Ev3rPalestine/Parasort
|
|
9
|
+
Project-URL: Issues, https://github.com/Ev3rPalestine/Parasort/issues
|
|
10
|
+
Keywords: pentesting,bug-bounty,security,url,parameters,sqli,xss
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Information Technology
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
+
Classifier: Topic :: Security
|
|
21
|
+
Classifier: Topic :: Internet :: WWW/HTTP
|
|
22
|
+
Requires-Python: >=3.11
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Requires-Dist: colorama>=0.4.6
|
|
26
|
+
Provides-Extra: test
|
|
27
|
+
Requires-Dist: pytest>=7; extra == "test"
|
|
28
|
+
Dynamic: license-file
|
|
29
|
+
|
|
30
|
+
# Parasort - URL Parameter Categorization & Extraction Tool
|
|
31
|
+
|
|
32
|
+

|
|
33
|
+

|
|
34
|
+

|
|
35
|
+

|
|
36
|
+
|
|
37
|
+
```text
|
|
38
|
+
██████╗ █████╗ ██████╗ █████╗ ███████╗ ██████╗ ██████╗ ████████╗
|
|
39
|
+
██╔══██╗██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔═══██╗██╔══██╗╚══██╔══╝
|
|
40
|
+
██████╔╝███████║██████╔╝███████║███████╗██║ ██║██████╔╝ ██║
|
|
41
|
+
██╔═══╝ ██╔══██║██╔══██╗██╔══██║╚════██║██║ ██║██╔══██╗ ██║
|
|
42
|
+
██║ ██║ ██║██║ ██║██║ ██║███████║╚██████╔╝██║ ██║ ██║
|
|
43
|
+
╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝
|
|
44
|
+
URL Parameter Categorizer & Extraction
|
|
45
|
+
by Ev3rPalestine
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
#### A powerful Python tool for automatically categorizing URLs by their parameters & extracting them to streamline penetration testing and vulnerability assessment workflows.
|
|
49
|
+
|
|
50
|
+
## Features
|
|
51
|
+
|
|
52
|
+
- **Automatic URL Categorization**: Sort URLs by vulnerability type (SQLi, XSS, SSRF, LFI, etc.)
|
|
53
|
+
- **Domain-Based Organization**: Output organized by domain folders
|
|
54
|
+
- **Parameters Extraction**: Extract found parameters in urls for fuzzing or other use
|
|
55
|
+
- **Custom Parameter Search**: Support for custom parameters via command line or file
|
|
56
|
+
- **Parameter Value Clearing**: Clean URLs by keeping only parameter names
|
|
57
|
+
- **Flexible Category Selection**: Choose specific vulnerability types, or use `web` / `api` presets
|
|
58
|
+
- **Dedup & Unique-Params**: Drop exact duplicates (`-dd`), normalized duplicates ignoring order/case/values (`-ddn`), or collapse same-param-set URLs (`-uq`)
|
|
59
|
+
- **Filters**: Exclude domains (`-ed`, supports `*` wildcards) and noisy params (`-xp`)
|
|
60
|
+
- **Top-N Focus**: Keep only the first INT URLs per category per domain (`-tp`)
|
|
61
|
+
- **Input Guard**: Abort oversized runs with `--max-urls`
|
|
62
|
+
- **Live-Host Check**: Keep only live URLs (`-hc`, HEAD-first with GET fallback, `--retries`, `--include-status`, persistent `--live-cache`)
|
|
63
|
+
- **Multiple Output Formats**: Classic `txt`, machine-readable `json`, flat `csv` (single or per-domain via `--csv-split`), or pipe-friendly `jsonl` / stdout (`-o -`, `--stdout`)
|
|
64
|
+
- **Self-Updating**: Upgrade to the latest release with `parasort --update`
|
|
65
|
+
- **Configurable Parameters**: External JSON configuration (`--init-config`, `--reset-config`), per-category validation warnings
|
|
66
|
+
- **Tested**: pytest suite (36 tests) + CI matrix across Python 3.11–3.14
|
|
67
|
+
- **Colorful Output**: Visual feedback with color-coded categories
|
|
68
|
+
|
|
69
|
+
## Installation
|
|
70
|
+
|
|
71
|
+
### Prerequisites
|
|
72
|
+
- Python 3.11 or higher
|
|
73
|
+
- pip package manager
|
|
74
|
+
|
|
75
|
+
### From PyPI (recommended)
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
pip install parasort
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Isolated install with [pipx](https://pipx.pypa.io/):
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
pipx install parasort
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Upgrade to the latest release:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
pip install --upgrade parasort
|
|
91
|
+
# or: parasort --update
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### From source
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
git clone https://github.com/Ev3rPalestine/Parasort.git
|
|
98
|
+
cd Parasort
|
|
99
|
+
pip install .
|
|
100
|
+
```
|
|
101
|
+
## Example
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# parasort -i urls.txt
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
██████╗ █████╗ ██████╗ █████╗ ███████╗ ██████╗ ██████╗ ████████╗
|
|
108
|
+
██╔══██╗██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔═══██╗██╔══██╗╚══██╔══╝
|
|
109
|
+
██████╔╝███████║██████╔╝███████║███████╗██║ ██║██████╔╝ ██║
|
|
110
|
+
██╔═══╝ ██╔══██║██╔══██╗██╔══██║╚════██║██║ ██║██╔══██╗ ██║
|
|
111
|
+
██║ ██║ ██║██║ ██║██║ ██║███████║╚██████╔╝██║ ██║ ██║
|
|
112
|
+
╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝
|
|
113
|
+
URL Parameter Categorizer & Extraction
|
|
114
|
+
by Ev3rPalestine
|
|
115
|
+
|
|
116
|
+
Processing 858 URLs using 9 categories...
|
|
117
|
+
Processing: example.com
|
|
118
|
+
Processing: example.org
|
|
119
|
+
Processing: example2.com
|
|
120
|
+
|
|
121
|
+
==================================================
|
|
122
|
+
PROCESSING COMPLETE
|
|
123
|
+
==================================================
|
|
124
|
+
URLs processed: 858
|
|
125
|
+
Domains found: 22
|
|
126
|
+
|
|
127
|
+
GLOBAL CATEGORY SUMMARY
|
|
128
|
+
--------------------------------------------------
|
|
129
|
+
uncategorized : 641 URLs
|
|
130
|
+
xss : 122 URLs| Parameters: AdvertiserID, _charset_, _gl, belboon, dclid ... (+33 more)
|
|
131
|
+
info_disclosure : 66 URLs| Parameters: v
|
|
132
|
+
sqli : 21 URLs| Parameters: _charset_, cnt, groupId, id, k ... (+13 more)
|
|
133
|
+
business_logic : 8 URLs| Parameters: actionId, advancePaymentId, backLink, calcType, carModel ... (+25 more)
|
|
134
|
+
ssrf : 7 URLs| Parameters: id, image, k, limit, offset ... (+5 more)
|
|
135
|
+
lfi : 6 URLs| Parameters: ANAME, FNAME, LAF_PARTNER, Page, action ... (+9 more)
|
|
136
|
+
open_redirect : 6 URLs| Parameters: id, k, limit, offset, p_l_id ... (+4 more)
|
|
137
|
+
==================================================
|
|
138
|
+
Output directory: results/
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Available Arguments
|
|
143
|
+
```text
|
|
144
|
+
INPUT / OUTPUT:
|
|
145
|
+
-i, --input FILE Input file containing URLs (optional if using stdin)
|
|
146
|
+
-o, --output DIR Output directory (default: results); use - for stdout JSONL
|
|
147
|
+
-f, --format FORMAT Output format: txt (per-domain *-urls.txt),
|
|
148
|
+
json (per-domain .json + summary.json),
|
|
149
|
+
csv (urls.csv, see -cs) or
|
|
150
|
+
jsonl (single urls.jsonl) (default: txt)
|
|
151
|
+
-st, --stdout Same as -o -: emit JSONL records to stdout (pipe-friendly)
|
|
152
|
+
-mx, --max-urls INT Abort with an error if input exceeds INT URLs (no limit by default)
|
|
153
|
+
|
|
154
|
+
PROCESSING OPTIONS:
|
|
155
|
+
-c, --clear Clear parameter values, keep names only (e.g., -c)
|
|
156
|
+
-v, --verbose Show detailed processing information (e.g., -v)
|
|
157
|
+
-s, --silent Minimal output for scripting (e.g., -s)
|
|
158
|
+
-nc, --no-color Disable colored output (e.g., -nc)
|
|
159
|
+
-ep, --extract-params Extract all parameters to parameters.txt files
|
|
160
|
+
-dd, --dedup Drop exact duplicate URLs before processing
|
|
161
|
+
-ddn, --dedup-normalized
|
|
162
|
+
Drop URLs with identical param sets, ignoring
|
|
163
|
+
order/case/values (e.g., -ddn)
|
|
164
|
+
-uq, --unique-params Keep one URL per param-name set per domain
|
|
165
|
+
-tp, --top INT Keep only the first INT URLs per category per domain
|
|
166
|
+
|
|
167
|
+
VULNERABILITY CATEGORIES:
|
|
168
|
+
-vl, --vuln CATEGORY [CATEGORY ...]
|
|
169
|
+
Vulnerability categories (e.g., -vl sqli xss)
|
|
170
|
+
-pf, --profile PROFILE
|
|
171
|
+
Preset set: web or api (explicit -vl overrides -pf)
|
|
172
|
+
|
|
173
|
+
CUSTOM PARAMETERS:
|
|
174
|
+
-cp, --custom-params PARAM [PARAM ...]
|
|
175
|
+
Custom parameters (comma or space separated,
|
|
176
|
+
e.g., -cp "id,user,cmd" or -cp id user cmd)
|
|
177
|
+
-cpf, --custom-params-file FILE
|
|
178
|
+
File with custom parameters (e.g., -cpf params.txt)
|
|
179
|
+
|
|
180
|
+
FILTERS:
|
|
181
|
+
-ed, --exclude-domain DOMAIN [DOMAIN ...]
|
|
182
|
+
Skip domains (exact or * wildcard, e.g.,
|
|
183
|
+
-ed static.example.com "*.cdn.com")
|
|
184
|
+
-xp, --exclude-param PARAM [PARAM ...]
|
|
185
|
+
Ignore params for matching/extraction
|
|
186
|
+
(e.g., -xp "utm_source,fbclid")
|
|
187
|
+
-cs, --csv-split MODE CSV layout with -f csv: single writes one top-level
|
|
188
|
+
urls.csv (domain,category,url); per-domain writes one
|
|
189
|
+
urls.csv per domain folder (category,url) (default: single)
|
|
190
|
+
|
|
191
|
+
NETWORK:
|
|
192
|
+
-hc, --status-check Keep only live URLs (concurrent probes; 2xx-3xx count
|
|
193
|
+
as live, see -is) (e.g., -hc)
|
|
194
|
+
-m, --method METHOD Live-probe method for -hc: auto is HEAD first with GET
|
|
195
|
+
fallback (fastest), head or get (default: auto)
|
|
196
|
+
-rt, --retries INT Extra attempts per URL when a probe fails with a network
|
|
197
|
+
error, 0-10 (default: 0)
|
|
198
|
+
-is, --include-status CODE [CODE ...]
|
|
199
|
+
Extra HTTP status codes counted as live on top of
|
|
200
|
+
2xx-3xx (e.g., -is 403 404)
|
|
201
|
+
-lc, --live-cache FILE
|
|
202
|
+
JSON file caching live-check results across runs;
|
|
203
|
+
entries younger than -ct are reused without probing
|
|
204
|
+
(e.g., -lc ~/.parasort/live_cache.json)
|
|
205
|
+
-ct, --cache-ttl SEC Reuse -lc cache entries younger than SEC seconds
|
|
206
|
+
(default: 86400 = 24h)
|
|
207
|
+
|
|
208
|
+
INFORMATION:
|
|
209
|
+
-h, --help Show this help message and exit
|
|
210
|
+
-sc, --show-categories
|
|
211
|
+
List available vulnerability categories
|
|
212
|
+
-lp, --list-params [CATEGORY]
|
|
213
|
+
List parameters of a category (e.g., -lp sqli)
|
|
214
|
+
-V, --version Show version and exit
|
|
215
|
+
-ic, --init-config Create ~/.parasort/parameter_categories.json with built-in
|
|
216
|
+
defaults if missing, print its path, and exit (e.g., -ic)
|
|
217
|
+
-rc, --reset-config Overwrite the config file with built-in defaults,
|
|
218
|
+
discarding customizations, and exit (e.g., -rc)
|
|
219
|
+
-up, --update Update parasort to the latest release via pip
|
|
220
|
+
|
|
221
|
+
EXAMPLES:
|
|
222
|
+
Basic usage:
|
|
223
|
+
parasort -i urls.txt
|
|
224
|
+
parasort -i urls.txt -o results -f json
|
|
225
|
+
cat urls.txt | parasort -o results
|
|
226
|
+
|
|
227
|
+
Specific vulnerabilities / profiles:
|
|
228
|
+
parasort -i urls.txt -o results -vl sqli xss
|
|
229
|
+
parasort -i urls.txt -o results -pf web
|
|
230
|
+
|
|
231
|
+
Custom parameters:
|
|
232
|
+
parasort -i urls.txt -o results -cp "id,user,cmd"
|
|
233
|
+
parasort -i urls.txt -o results -cpf my_params.txt
|
|
234
|
+
|
|
235
|
+
Clean + focus output:
|
|
236
|
+
parasort -i urls.txt -o results -c -dd -uq -tp 20
|
|
237
|
+
parasort -i urls.txt -o results -c -ddn -mx 50000
|
|
238
|
+
parasort -i urls.txt -o results -ed static.example.com "*.cdn.com" -xp "utm_source,fbclid"
|
|
239
|
+
|
|
240
|
+
Machine-readable piping:
|
|
241
|
+
parasort -i urls.txt -o - | nuclei -l /dev/stdin
|
|
242
|
+
parasort -i urls.txt -f jsonl -o results
|
|
243
|
+
parasort -i urls.txt -f csv -cs per-domain
|
|
244
|
+
|
|
245
|
+
Live hosts only:
|
|
246
|
+
parasort -i urls.txt -o results -hc -to 8
|
|
247
|
+
parasort -i urls.txt -o results -hc -m head -rt 2 -is 403 404
|
|
248
|
+
parasort -i urls.txt -o results -hc -lc ~/.parasort/live_cache.json
|
|
249
|
+
|
|
250
|
+
Config:
|
|
251
|
+
parasort -ic
|
|
252
|
+
parasort -rc
|
|
253
|
+
|
|
254
|
+
Advanced options:
|
|
255
|
+
parasort -i urls.txt -o results --clear -v
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## Basic Usage
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
# Show help with all examples
|
|
262
|
+
parasort -h
|
|
263
|
+
|
|
264
|
+
# Show categories / version
|
|
265
|
+
parasort -sc
|
|
266
|
+
parasort -V
|
|
267
|
+
|
|
268
|
+
# Process custom parameters and clearing their values
|
|
269
|
+
parasort -i urls.txt -o results -cp "id,token,api_key,session" -c
|
|
270
|
+
|
|
271
|
+
# Process with specific vulnerabilities only (or a preset profile)
|
|
272
|
+
parasort -i urls.txt -o results -vl sqli xss -v
|
|
273
|
+
parasort -i urls.txt -o results -pf web
|
|
274
|
+
|
|
275
|
+
# Clean duplicates and focus output
|
|
276
|
+
parasort -i urls.txt -o results -dd -uq -tp 20
|
|
277
|
+
parasort -i urls.txt -o results -ddn -mx 50000
|
|
278
|
+
|
|
279
|
+
# Exclude noise, keep machine-readable output
|
|
280
|
+
parasort -i urls.txt -o results -ed "*.cdn.com" -xp "utm_source,fbclid" -f json
|
|
281
|
+
|
|
282
|
+
# Pipe JSONL straight into other tools
|
|
283
|
+
parasort -i urls.txt -o - | nuclei -l /dev/stdin
|
|
284
|
+
|
|
285
|
+
# Live hosts with HEAD-first probing and a persistent cache
|
|
286
|
+
parasort -i urls.txt -o results -hc -m auto -rt 2 -lc ~/.parasort/live_cache.json
|
|
287
|
+
|
|
288
|
+
# Config management
|
|
289
|
+
parasort -ic
|
|
290
|
+
parasort -rc
|
|
291
|
+
|
|
292
|
+
# Silent mode
|
|
293
|
+
parasort -i urls.txt -o results -s
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
## Command Line Options
|
|
297
|
+
#### - Input / Output
|
|
298
|
+
|
|
299
|
+
-i, --input FILE - Input file containing URLs (optional if using stdin)
|
|
300
|
+
|
|
301
|
+
-o, --output DIR - Output directory (default: results); use - for stdout JSONL (pipe-friendly)
|
|
302
|
+
|
|
303
|
+
-f, --format FORMAT - Output format: txt, json, csv or jsonl (default: txt)
|
|
304
|
+
|
|
305
|
+
-st, --stdout - Same as -o -: emit JSONL records to stdout; human output goes to stderr (pipe-friendly)
|
|
306
|
+
|
|
307
|
+
-mx, --max-urls INT - Abort with an error if total input (stdin + file) exceeds INT URLs (no limit by default)
|
|
308
|
+
|
|
309
|
+
#### - Processing Options
|
|
310
|
+
|
|
311
|
+
-c, --clear - Clear parameter values, keep names only
|
|
312
|
+
|
|
313
|
+
-v, --verbose - Show detailed processing information
|
|
314
|
+
|
|
315
|
+
-s, --silent - Minimal output (for scripting)
|
|
316
|
+
|
|
317
|
+
-nc, --no-color - Disable colored output
|
|
318
|
+
|
|
319
|
+
-ep, --extract-params - Extract all parameters to parameters.txt files
|
|
320
|
+
|
|
321
|
+
-dd, --dedup - Drop exact duplicate URLs before processing
|
|
322
|
+
|
|
323
|
+
-ddn, --dedup-normalized - Drop URLs sharing (domain, path, param names), ignoring param order, case and values
|
|
324
|
+
|
|
325
|
+
-uq, --unique-params - Keep one URL per param-name set per domain
|
|
326
|
+
|
|
327
|
+
-tp, --top INT - Keep only the first INT URLs per category per domain
|
|
328
|
+
|
|
329
|
+
#### - Vulnerability Categories
|
|
330
|
+
|
|
331
|
+
-vl, --vuln CATEGORY - Vulnerability categories (default: all)
|
|
332
|
+
|
|
333
|
+
Available: all, sqli, xss, ssrf, lfi, open_redirect, command_injection, auth_bypass, business_logic, info_disclosure
|
|
334
|
+
(plus any custom categories added via parameter_categories.json)
|
|
335
|
+
|
|
336
|
+
-pf, --profile PROFILE - Preset set: web or api (explicit -vl overrides -pf)
|
|
337
|
+
|
|
338
|
+
#### - Custom Parameters
|
|
339
|
+
|
|
340
|
+
-cp, --custom-params PARAM - Custom parameters to search for (comma or space separated)
|
|
341
|
+
|
|
342
|
+
-cpf, --custom-params-file FILE - File with custom parameters (one per line)
|
|
343
|
+
|
|
344
|
+
#### - Filters
|
|
345
|
+
|
|
346
|
+
-ed, --exclude-domain DOMAIN - Skip domains (exact or * wildcard, case-insensitive)
|
|
347
|
+
|
|
348
|
+
-xp, --exclude-param PARAM - Ignore params for matching/extraction (comma or space separated)
|
|
349
|
+
|
|
350
|
+
-cs, --csv-split MODE - CSV layout with -f csv: single writes one top-level urls.csv (domain,category,url); per-domain writes one urls.csv per domain folder (category,url) (default: single)
|
|
351
|
+
|
|
352
|
+
#### - Network
|
|
353
|
+
|
|
354
|
+
-hc, --status-check - Keep only live URLs (concurrent probes; 2xx-3xx count as live, see -is)
|
|
355
|
+
|
|
356
|
+
-m, --method METHOD - Live-probe method for -hc: auto is HEAD first with GET fallback (fastest), head or get (default: auto)
|
|
357
|
+
|
|
358
|
+
-rt, --retries INT - Extra attempts per URL when a probe fails with a network error, 0-10 (default: 0)
|
|
359
|
+
|
|
360
|
+
-is, --include-status CODE - Extra HTTP status codes counted as live on top of 2xx-3xx (e.g., -is 403 404)
|
|
361
|
+
|
|
362
|
+
-lc, --live-cache FILE - JSON file caching live-check results across runs; entries younger than -ct are reused without probing
|
|
363
|
+
|
|
364
|
+
-ct, --cache-ttl SEC - Reuse -lc cache entries younger than SEC seconds (default: 86400 = 24h)
|
|
365
|
+
|
|
366
|
+
-to, --timeout SEC - HTTP timeout in seconds for -hc and -up (default: 10)
|
|
367
|
+
|
|
368
|
+
#### - Information
|
|
369
|
+
|
|
370
|
+
-h, --help - Show help message and exit
|
|
371
|
+
-sc, --show-categories - List available vulnerability categories
|
|
372
|
+
-lp, --list-params [CATEGORY] - List parameters of a category (e.g., -lp sqli)
|
|
373
|
+
-V, --version - Show version and exit
|
|
374
|
+
-ic, --init-config - Create ~/.parasort/parameter_categories.json with built-in defaults if missing, print its path, and exit
|
|
375
|
+
-rc, --reset-config - Overwrite the config file with built-in defaults, discarding customizations, and exit
|
|
376
|
+
-up, --update - Update parasort to the latest release via pip
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
## Output Structure
|
|
380
|
+
|
|
381
|
+
The tool creates domain-based folders with categorized URL files (txt format):
|
|
382
|
+
|
|
383
|
+
```bash
|
|
384
|
+
results/
|
|
385
|
+
├── example.com/
|
|
386
|
+
│ ├── sqli-urls.txt
|
|
387
|
+
│ ├── xss-urls.txt
|
|
388
|
+
│ ├── ssrf-urls.txt
|
|
389
|
+
│ ├── custom-params-urls.txt
|
|
390
|
+
│ ├── parameters.txt
|
|
391
|
+
│ └── uncategorized-urls.txt
|
|
392
|
+
├── target.org/
|
|
393
|
+
│ ├── sqli-urls.txt
|
|
394
|
+
│ ├── xss-urls.txt
|
|
395
|
+
│ ├── parameters.txt
|
|
396
|
+
│ └── ...
|
|
397
|
+
└── all-parameters.txt
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
With `-f json`: each domain gets `<domain>.json` (category → URL list) plus a
|
|
401
|
+
top-level `summary.json` with per-domain and total counts.
|
|
402
|
+
With `-f csv`: a single top-level `urls.csv` (`domain,category,url`), or per-domain
|
|
403
|
+
`urls.csv` files (`category,url`) with `--csv-split per-domain`.
|
|
404
|
+
With `-f jsonl`: a single top-level `urls.jsonl` (one `{"domain","category","url"}`
|
|
405
|
+
record per line). With `-o -` / `--stdout`, those JSONL records go to stdout
|
|
406
|
+
(human output goes to stderr) for piping into other tools.
|
|
407
|
+
`parameters.txt` / `all-parameters.txt` (`-ep`) are always plain-text lists
|
|
408
|
+
(skipped in stdout mode).
|
|
409
|
+
|
|
410
|
+
## Configuration
|
|
411
|
+
#### - Parameter Categories File
|
|
412
|
+
|
|
413
|
+
The parameter_categories.json file is created and located in directory named ".parasort" in the home directory of the user, it defines which parameters belong to each vulnerability category. You can customize this file to add or remove parameters:
|
|
414
|
+
|
|
415
|
+
```json
|
|
416
|
+
{
|
|
417
|
+
"sqli": ["id", "user_id", "product_id"],
|
|
418
|
+
"xss": ["q", "search", "query"],
|
|
419
|
+
"ssrf": ["url", "redirect", "image"],
|
|
420
|
+
...
|
|
421
|
+
}
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
* The file is automatically created on first run if it doesn't exist.
|
|
425
|
+
* The `parameter_categories.json` in this repo is a reference copy of the built-in
|
|
426
|
+
defaults; PyPI wheels rely on the embedded defaults and create `~/.parasort/parameter_categories.json` at runtime.
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
#### - Adding New Vulnerability Categories
|
|
430
|
+
* Edit parameter_categories.json
|
|
431
|
+
* Add your new category with relevant parameters
|
|
432
|
+
* The tool will automatically detect the new category
|
|
433
|
+
|
|
434
|
+
#### - Using Custom Parameter Files
|
|
435
|
+
|
|
436
|
+
Create a text file with one parameter per line:
|
|
437
|
+
|
|
438
|
+
```text
|
|
439
|
+
api_key
|
|
440
|
+
session_token
|
|
441
|
+
user_id
|
|
442
|
+
admin
|
|
443
|
+
debug
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
### - License
|
|
447
|
+
|
|
448
|
+
```text
|
|
449
|
+
This project is licensed under the MIT License - see the LICENSE file for details.
|
|
450
|
+
Author
|
|
451
|
+
|
|
452
|
+
Note: This tool is intended for legitimate security testing and educational purposes only. Always ensure you have proper authorization before testing any systems.
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
## Changelog
|
|
456
|
+
|
|
457
|
+
See [CHANGELOG.md](CHANGELOG.md) for release history. Current version: **5.1.0**.
|
|
458
|
+
|