Malicious file upload
SkillFiles & storageTurn a file upload into RCE or stored XSS/SSRF. Load on any upload: avatars, attachments, import CSV/XML, profile images, document processors, "upload your resume". Signals: multipart/form-data, filename in response, an uploads/ path, image thumbnailing, PDF/office parsing.
Use Malicious file upload in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Malicious file upload and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the Malicious file upload skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
What this skill tells your AI
The instructions your AI receives, as published by noorqureshi/sploitagent in skills/web/web-file-upload/SKILL.md and read by Ahel’s review.
When it applies
The app accepts a file and later stores, serves, parses, or converts it. Impact depends on what happens to the file after upload — served from webroot? passed to a parser? rendered?
Why it works
Validation is usually on the wrong signal (extension or Content-Type, both attacker-set)
while the dangerous behaviour is downstream: the web server executes .php in the uploads
dir, a parser follows external entities, or the file is served with an HTML content-type.
Method
Payloads & full variation set:
cheatsheet.mdnext to this file — work the set, not the first line.
- Find the after-upload behaviour: where is it stored, what URL serves it, what parses it?
- RCE via executable extension when uploads are under a script-executing webroot:
upload
shell.php; if blocked, try.phtml .php5 .phar, double extshell.php.jpg, null byteshell.php%00.jpg, case.pHp, trailing dot/space, or a polyglot (valid JPEG + PHP in a comment) with a.phpname. - Content-Type / magic-byte bypass: keep a real image header (
GIF89a;) then payload; change the multipartContent-Typetoimage/pngwhile the name stays.php. - Parser-based: SVG upload → XSS/SSRF/XXE (SVG is XML+script); office/PDF → SSRF/XXE via external resources; image libraries (ImageMagick) → command exec via crafted files.
- Path traversal in filename:
../../var/www/html/shell.phpto escape the uploads dir.
Gotchas
- Upload succeeds but stored outside webroot / served as
text/plain→ no RCE; pivot to XSS/SSRF instead. - Random server-side filenames defeat direct access — look for a predictable/leaked path.
- WAF strips
<?php→ use<?=or<script language="php">.
Verify success
Browse to the uploaded script and get command output, or the SVG/XML fires in a victim context / triggers an OOB callback.
References
PortSwigger file-upload labs; OWASP Unrestricted File Upload.
Signals
- GitHub stars
- 20
- Forks
- 7
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
web-file-upload- Source
- github.com/noorqureshi/sploitagent
github.com/noorqureshi/sploitagent
Related picks
Skill · jeremylongshore
The pick for Web (OWASP)owasp-security
Skill · davila7
The pick for Web (OWASP)pptx
Skill · anthropics
More in Files & storagedocx
Skill · anthropics
More in Files & storageresearch
Skill · mattpocock
More in Files & storageto-tickets
Skill · mattpocock
More in Files & storage