Fuxploider examines an upload form, looks for accepted file types and can then test configured execution templates. Its findings depend on the form, response matcher and retrieval path. An accepted upload and a confirmed execution result are different observations.
This reference combines the flag lookup and the existing local upload-lab walkthrough. It keeps the tool's boundaries explicit: it does not promise a successful exploit, and a negative result is not a clean bill of health for an uploader.
Tool setup and support status
Use a disposable environment and record the upstream revision you install. The reviewed script identifies itself as version 1.0.0; that string alone is not a revision pin or a compatibility guarantee. Keep the working directory at the repository root because the script opens bundled data files by relative path.
git clone https://github.com/almandin/fuxploider.git
cd fuxploider
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
python fuxploider.py --help
git rev-parse HEADDependency installation can fail on newer runtimes; inspect the error and upstream requirements rather than assuming any Python version works. The reference below was checked against upstream source. It is not a claim that a fresh end-to-end run succeeded on every runtime.
Quick reference
| Option | Meaning and constraint |
|---|---|
-u, --url | Upload-form page URL |
--not-regex | Upload rejection matcher |
--true-regex | Upload acceptance matcher; at least one matcher is required |
-d, --data | Additional form fields |
--cookies | Cookie values; see the input format below |
-m, --manual-form-detection | Supply form details explicitly |
--input-name | File field name; required with manual mode |
--form-action | Manual form action; empty means the supplied URL |
-l, --legit-extensions | Expected legitimate extensions |
-n | Number of common extensions for discovery; default 100 |
-s, --skip-recon | Requires a legitimate-extension list |
-t, --template | Registered template name, not an arbitrary file path |
-r, --regex-override | Template execution-result matcher override |
--uploads-path | Retrieval-path information used for execution checks |
-f, --filesize | Generated discovery file size, in kB |
-T, --threads | Parallel tasks; default 4 |
-v, -vv, -vvv | Verbosity levels |
-U, --user-agent | Fixed User-Agent |
--random-user-agent | Selects a User-Agent at startup, not per request |
--proxy | Proxy configuration for inspecting local traffic |
--proxy-creds | Proxy credentials or an interactive credential prompt |
-y | Continue looking after the first execution finding |
The CLI parser is the reference for these names. Upstream templates.json supplies the registered template names and associated detection settings; passing a shell filename to -t is not the documented interface.
Request preparation
Before running the tool, identify the form's action URL, method and file input name. A page with several forms or a form created by JavaScript may require manual form selection. Confirm that extra fields and authentication reach the same endpoint as a normal browser submission.
Fuxploider's cookie parser expects ampersand-separated pairs, for example session=LAB_VALUE&preference=dark, rather than a copied semicolon-separated browser Cookie header. This is a tool input convention, not HTTP syntax. Values containing delimiters need special care because the helper is a simple parser. Upstream parsing helpers.
Use disposable lab credentials. Shell arguments, terminal history and verbose logs can retain session values. A valid saved cookie does not handle an entire login flow, and a one-time CSRF token may expire after the first submission. The presence of -d does not imply automatic token renewal.
How fuxploider actually decides whether an upload worked
The upload classifier checks the response against the supplied regular expressions. If the acceptance text is present on a generic error page, or the rejection text has changed, the result can be wrong. HTTP status alone is insufficient.
The tool also has a separate execution-detection phase that retrieves an uploaded resource and searches for a configured marker. It needs enough information to locate that resource. A missing or rewritten path can defeat that check even if the upload itself worked. UploadForm implementation.
For each finding, retain these observations separately:
| Observation | What it establishes |
|---|---|
| Response matched acceptance text | The configured matcher classified the response as accepted |
| Stored object found at the expected path | The object was retrievable at that path |
| Expected execution marker found | The configured execution check matched; corroborate it with the lab's handler behavior |
| No finding | This run did not confirm the tested condition; coverage or request preparation may still be incomplete |
Check both an ordinary accepted fixture and an ordinary rejected fixture before trusting the matcher. Do not turn a different status, a timeout or a missing rejection phrase into a claim of code execution.
Existing local-lab walkthrough
Start the upload-basic lab in its own terminal:
git clone https://github.com/ishankaru/techearl-labs.git
cd techearl-labs
docker compose up upload-basicThe supplied Compose mapping binds port 8083 to loopback. Keep it there. Inspect the form at http://127.0.0.1:8083/upload-blacklist.php and compare it with the endpoint source before classifying any result.
From the fuxploider repository, the existing discovery workflow is:
python fuxploider.py \
-u http://127.0.0.1:8083/upload-blacklist.php \
--not-regex '(?i)banned|rejected|disallowed' \
-T 1Use the form details the lab actually returns. For this acceptance-classification exercise, answer no when asked to start uploading execution payloads. The tool is interactive; a thread count does not remove its prompts. Review the observed output rather than expecting a fixed extension count or a fabricated transcript.
Compare the four cases in the source:
- The naive endpoint saves without a file-type policy.
- The blocklist endpoint omits a type that the lab's server explicitly handles.
- The MIME endpoint trusts a client-supplied type claim.
- The double-extension endpoint disagrees with its directory handler mapping.
The .phar behavior depends on the lab's explicit Apache configuration. The double-extension behavior depends on its AddHandler association. An extension accepted elsewhere may be served as inert data. The consolidated upload guide covers those conditions and the defensive checks.
Remove the disposable lab container when finished:
docker compose stop upload-basic
docker compose rm -f upload-basicWhat fuxploider does not prove
The bundled techniques vary suffixes and MIME values; it is inaccurate to describe the tool as changing extensions only. However, that matrix does not reason about every application-specific decoder, asynchronous processor, filename rewrite or authorization check.
A rejected run might reflect an expired session, invalid form fields or stale response matching. Diagnose the ordinary upload flow before concluding that the endpoint is safe. When a request is rate-limited, stop and use the local environment's permitted test pace; changing identity is not evidence that the underlying test is valid.
A passing process exit code is also not a vulnerability verdict. Some no-finding paths exit successfully, and prompts make an unattended run unsuitable without deliberate harness design. For regression testing your own uploader, assert the application's acceptance, storage and serving outcomes directly.
Defensive follow-up
Record the endpoint, server configuration, validation decision and actual stored artifact. Remove the disposable uploads after testing. Remediation should address the validated type, generated filename, storage outside executable routing and authorized delivery—not just the one extension the tool found.
Continue with the upload defenses and regression matrix. The image-polyglot guide and SVG guide cover distinct content-processing and browser conditions.
Sources
Authoritative references this article was fact-checked against.
- Fuxploider — upstream projectgithub.com
- Fuxploider — CLI parser and execution flowgithub.com
- Fuxploider — upload and execution result classificationgithub.com
- Fuxploider — input parsing helpersgithub.com
- Fuxploider — registered templatesgithub.com
- Upload-basic — local teaching labgithub.com





