Penetration Testing mailing list archives

Re: Magic Quotes question


From: "Justin Ferguson" <jnferguson () gmail com>
Date: Fri, 19 Jan 2007 14:53:49 -0500

Why wouldnt you just put the escape function inside of the database
query et al API function and then make a run-time configuration where
it could be turned off? So that only strings passed to the database
are escaped, they are always escaped unless you specifically turn it
off and its use is transparent to the end user? i.e.

EXPORTED_API_T
database_query(query, ...)
{
       if (getconfig->add_slashes)
               add_slashes(query);

      db_query(query, ...);
}

It seems like that would avoid a lot of the issues involved with this.

On 1/19/07, Ronald Chmara <ron () opus1 com> wrote:
On Jan 16, 2007, at 11:10 PM, DokFLeed wrote:
> Hi,
> I posted this earlier to webappsec () securityfocus com with no luck ,
> does anyone know how to bypass magic quotes? a proven working way .

stripslashes(). :-)

It's fairly easy to get a developer to put stripslashes() on a
website too, if one just slowly adds posts that seem like they can be
tracked back to magic quotes... "I\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\'m having problems...."

This is why magic quotes/slashes was getting turned off all over the
place..... excessive escaping before db inserts, as variable values
were passed from page to page.

Well, that, and the escaping wasn't data-engine specific. Some data
engines use \', others use '', others need no ' escaping, and since
many modern db engines can use *any* delimiter, for any language,
"magic quotes" was simply the wrong level to apply data filtering at.

> example is, in such a simple SQL like
> "SELECT * from USERS WHERE id =$id";
> I am looking for ways to by pass magic quotes to inject this
> INTO OUTFILE '/home/z.php'

INTO OUTFILE %/home/z.php% works, if "%" is the field delimiting
character being used. Magic quotes totally fails in that scenario.

> point is, if magic quotes can stop this, so why is it going to be
> removed in php6? it can simply stay and be activated or deactivated
> on will.

It was a great idea, in a much less complex world.

> and if there is a way to by pass, I want to include it in my check
> GET/POST inputs.

Any character can be used, by many db engines, as a delimiter. It is
bad programming practice to assume that *any* bulk filtering
mechanism will work, so your GET/POST idea is flawed.

The problem is not magic quotes.
The problem is not replacing magic quotes.

The problem *is* validating each piece of data received, and dealing
with it in an appropriate manner, regardless of the db engine used,
charset used, delimiters used.

-Ronabop

------------------------------------------------------------------------
This List Sponsored by: Cenzic

Need to secure your web apps?
Cenzic Hailstorm finds vulnerabilities fast.
Click the link to buy it, try it or download Hailstorm for FREE.

http://www.cenzic.com/products_services/download_hailstorm.php?camp=701600000008bOW
------------------------------------------------------------------------



------------------------------------------------------------------------
This List Sponsored by: Cenzic

Need to secure your web apps?
Cenzic Hailstorm finds vulnerabilities fast.
Click the link to buy it, try it or download Hailstorm for FREE.

http://www.cenzic.com/products_services/download_hailstorm.php?camp=701600000008bOW
------------------------------------------------------------------------


Current thread: