I am not going to mention which host I'm using for obvious reasons.

However, I'm wondering if it is just a mis-configuration, or if it is a
weakness in php.

With this host, you initially have the same database password to the MySQL
database as you do to the account. It is wise to change both, and to
change them to different passwords, but this is the real world, baby...

Anyway, when setting up phpbb I didn't like the fact that the password is
stored within the document root. That's easy enough to change- move it
outside, and run a sed script to change the include path for that file.

I then thought of another issue. My MySQL database name that was given to
me is identical to my username to log into this server. So I did a SHOW
DATABASES in MySQL and got myself a collection of all the user names on
the system.

Then I wrote a script to wget http://servername/~username/phpbb/config.php
What it got wasn't useful, but did tell me the file was there.

So I wrote a php script in my directory to sizeof
/home/username/public_html/phpbb/config.php and then send the text/plain
mime type, and read the file.

Right there in my browser I had the a text file containing some guys MySQL
password, which could be his login password as well.

There were about a dozen sites running phpbb in a directory called phpbb
with the config file where I expected it to be.

The web server MUST have permission to read that file since php is an
apache module.

What I would like to know is if there an apache directive you can put in a
VirtualHost container that tells the php engine that it is NOT allowed to
read files or include files or etc. outside of a certain directory.

A directive that could look like this:
phpreadroot "/home/username"

There's still the problem of the exec() function, which could circumvent
that, but exec() I think can be turned off (and probably should on
multiuser systems)

As a user, if I tried to cat the file, I would be rejected. But the web
server would not be. I assume this same type of vulnerability exists with
cgi-bin as well, although I think there are solutions where the script
runs with the users permissions, not the web servers's. I don't know
cgi-bin security that well.

I guess the bottom line is be sure to have your database password
different from your login password, and rename and/or move any config
files that contain the database password, but is there any way within php
to limit the ability of people to do what I did?

There's a bazillion user accounts on this machine, most of them porn
sites, and lets just say I don't personally believe that "porn webmasters"
will follow the common courtesy rules.

Hell, I guess even I didn't technically- since I did extract someone's
database password.

Any ideas? 
-- 
-=-=-=-=-=-=-=-=-=-=-=-=-
Michael A. Peters
http://24.5.29.77:10080/

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to