TechEarl

Fuxploider Reference: Flags, Local Lab and Result Checks

A source-checked fuxploider reference covering form setup, response matching, template names and the difference between accepted uploads and execution.

Ishan Karunaratne⏱️ 7 min readUpdated
Share thisCopied
Reference diagram for reviewing file-upload validation with fuxploider

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.

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

Dependency 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

OptionMeaning and constraint
-u, --urlUpload-form page URL
--not-regexUpload rejection matcher
--true-regexUpload acceptance matcher; at least one matcher is required
-d, --dataAdditional form fields
--cookiesCookie values; see the input format below
-m, --manual-form-detectionSupply form details explicitly
--input-nameFile field name; required with manual mode
--form-actionManual form action; empty means the supplied URL
-l, --legit-extensionsExpected legitimate extensions
-nNumber of common extensions for discovery; default 100
-s, --skip-reconRequires a legitimate-extension list
-t, --templateRegistered template name, not an arbitrary file path
-r, --regex-overrideTemplate execution-result matcher override
--uploads-pathRetrieval-path information used for execution checks
-f, --filesizeGenerated discovery file size, in kB
-T, --threadsParallel tasks; default 4
-v, -vv, -vvvVerbosity levels
-U, --user-agentFixed User-Agent
--random-user-agentSelects a User-Agent at startup, not per request
--proxyProxy configuration for inspecting local traffic
--proxy-credsProxy credentials or an interactive credential prompt
-yContinue 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:

ObservationWhat it establishes
Response matched acceptance textThe configured matcher classified the response as accepted
Stored object found at the expected pathThe object was retrievable at that path
Expected execution marker foundThe configured execution check matched; corroborate it with the lab's handler behavior
No findingThis 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:

bash
git clone https://github.com/ishankaru/techearl-labs.git
cd techearl-labs
docker compose up upload-basic

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

bash
python fuxploider.py \
  -u http://127.0.0.1:8083/upload-blacklist.php \
  --not-regex '(?i)banned|rejected|disallowed' \
  -T 1

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

bash
docker compose stop upload-basic
docker compose rm -f upload-basic

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

TagsfuxploiderFile UploadCheat SheetPenetration TestingSecurity

Found this useful? Pass it on.

Copied

Ishan Karunaratne

Systems and Network Architect · Chief Technology Officer

Systems and network architect and Chief Technology Officer with more than two decades designing, building, and running production software, cloud and network architecture, Linux systems, and the bare metal underneath them, and lately working AI into the stack. A US Army veteran who served in Operation Iraqi Freedom. What I write here is drawn from the full arc of that work, across architecture, engineering, and operations, not any single job.

Keep reading

Related posts

Restart policies (always, unless-stopped, on-failure), HEALTHCHECK in Dockerfile and Compose, and depends_on: condition: service_healthy to wait until the database is actually ready.

Docker Restart Policies and Health Checks

Make containers come back automatically after crashes and reboots, and tell Compose how to wait until a service is actually ready (not just started). Restart policies, HEALTHCHECK, and depends_on: condition: service_healthy.