upload-insecure-files

Tests file upload validation, storage paths, processing pipelines, and upload-to-RCE exploitation chains.

Updated Jun 5, 2026
One-click install
npx skills add https://github.com/lNwNl/Praxis --skill upload-insecure-files-lnwnl
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: upload-insecure-files
Source: https://github.com/lNwNl/Praxis/tree/main/skills/upload-insecure-files
Command: npx skills add https://github.com/lNwNl/Praxis --skill upload-insecure-files-lnwnl

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Web applications that accept file uploads often validate only one stage of the upload lifecycle, leaving gaps in extension checks, storage paths, background processors, or content serving. This Skill provides a structured playbook for systematically testing all four trust boundaries (accept, store, process, serve) and chaining findings into demonstrable impact such as RCE, XSS, XXE, or SSRF. ## Core Features & Use Cases - Validation Bypass Matrix: Covers extension blacklists, MIME-type checks, magic-byte validation, double extensions, null bytes, case variations, and polyglot files (GIFAR, PNG+PHP, JPEG+JS). - Processing-Chain Attacks: Guides exploitation of ImageMagick (CVE-2016-3714), FFmpeg HLS SSRF, Ghostscript delegates, archive extraction (zip slip), and XML/SVG parsing. - Server Parsing & CVE Reference: Companion scenarios document IIS semicolon truncation, Nginx cgi.fix_pathinfo, Apache multi-extension handling, Tomcat PUT (CVE-2017-12615), WebLogic (CVE-2018-2894), and Flink (CVE-2020-17518). - Use Case: During an authorized penetration test, you discover an avatar upload endpoint. Use this Skill to map the rename and retrieval behavior, bypass the image-only policy with a polyglot file, exploit the Nginx path-info misconfiguration, and achieve command execution. ## Quick Start Ask the agent to test the target's file upload endpoint for validation bypasses and upload-to-RCE chains using the upload insecure files playbook.

Frequently Asked Questions about upload-insecure-files

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I bypass file upload extension validation?

Extension validation bypasses include double extensions (shell.php.jpg), case variations (shell.PhP), trailing dots or spaces, null bytes (shell.php%00.jpg), and IIS semicolon truncation (shell.asp;.jpg). The right technique depends on whether the server checks extension, MIME type, or magic bytes.

How to test file upload vulnerabilities in a web application?

Test the four trust boundaries separately: accept, store, process, and serve. Upload a benign marker file first to map rename and retrieval behavior, then try one validation bypass and one active-content payload, and finally probe background processors like image resizers or archive extractors.

What is a polyglot file in upload attacks?

A polyglot file is valid in two or more formats simultaneously, such as a GIF with an appended JAR or a PNG with PHP code in its metadata. It passes format-specific validation while still delivering an executable payload when parsed by a different component.

Can FFmpeg processing of uploaded videos lead to SSRF?

Yes, crafted HLS playlist (.m3u8) files can make FFmpeg fetch arbitrary URLs server-side, including cloud metadata endpoints like 169.254.169.254. The concat protocol can also read local files such as /etc/passwd and embed them in output.

Why does an uploaded webshell not execute after a successful bypass?

Successful upload alone is insufficient; you also need the file's web-accessible path and a server configuration that parses it as code. Check for path discovery issues, forced-download Content-Disposition headers, and whether the web server handler actually executes the extension.

Does this playbook cover cloud storage uploads like S3?

Yes, it covers S3 presigned URL abuse, Azure Blob SAS token scope issues, and GCS signed URLs. Key checks include whether Content-Type is included in SignedHeaders and whether the full key path or only a prefix is signed.