Project

General

Profile

HTTP profiles

Apache2 (2.2.16-6+squeeze7)

Path tests

wget <host>/files/abc works

access.log: /files/abc

wget <host>/f%69les/abc works

access.log: /f%69les/abc

wget <host>/f%2569les/abc fails: 404 for /f%69les/abc, so one decoding stage done

access.log: /f%2569les/abc

wget <host>/files%2fabc fails: 404 for /files/abc, so %2f conversion rejected for path, but decoded form used in 404 error

access.log: /files%2fabc

Query string

wget <host>/trac/search?q=test works, search for "test"

access.log: /trac/search?q=test

wget <host>/trac/search?q=t%65st works, search for "test"

access.log: /trac/search?q=t%65st

wget <host>/trac/search?q=t%2565st fails: Trac searches for "t%65st"

access.log: /trac/search?q=t%2565st

%2f in Query string

wget <host>/trac/search?q=t%2fst works, search for "t/st"

access.log: /trac/search?q=t%2fst

wget <host>/trac/search?q=t%252fst fails, search for "t%2fst"

access.log: /trac/search?q=t%252fst

It's unclear at this point if this conversion is done by Apache2 or python/trac.

libhtp Apache_2_2 profile

- Leaves %2f in path untouched
- Normalizes in %2f query string to %2F
- Decodes/normalizes %252f in query string to %2F