Home page logo

fulldisclosure logo Full Disclosure mailing list archives

[waraxe-2004-SA#037 - Sql injection bug in Phorum 5.0.12 and older versions]
From: Janek Vind <come2waraxe () yahoo com>
Date: Thu, 11 Nov 2004 09:53:15 -0800 (PST)

{                              [waraxe-2004-SA#037]   
{           [ Sql injection bug in Phorum 5.0.12  and
older versions ]           }
Author: Janek Vind "waraxe"
Date: 11. November 2004
Location: Estonia, Tartu
Web: http://www.waraxe.us/index.php?modname=sa&id=37

Affected software description:

Phorum is a web based message board written in PHP.
Phorum is designed with
high-availability and visitor ease of use in mind.
Features such as mailing
list integration, easy customization and simple
installation make Phorum
a powerful add-in to any website.

Homepage: http://phorum.org/


Sql injection bug, discussed here, is present in all
Phorum 5.0.x versions,
up to and including 5.0.12 . It is fixed in new Phorum
version - 5.0.13 .
First of all - user must be logged in to successful
Well, let's start with looking @ source code of the
"follow.php", line 37:

---------------[ original code ]--------------------

} elseif(isset($_POST["thread"])){

if(empty($thread)) {


---------------[/original code ]---------------------

So unsanitaized user-submitted variable from POST
request will be delivered 
to function "phorum_db_get_message($thread)". Even
more, "if/elseif" construction
here is WITHOUT ending "else"...  So if
'$PHORUM["args"][1]' is not set and
'$_POST["thread"]' is also not set, then variable
"$thread" can be victim of the
poisoning through $_GET or $_COOKIE arrays.
Now, let's trace execution flow further -
"include/db/mysql.php", line 642:

---------------[ original code ]--------------------

function phorum_db_get_message($message_id){

    $conn = phorum_db_mysql_connect();

    $forum_id_check = "";
    if (!empty($PHORUM["forum_id"])){
        $forum_id_check = "(forum_id =
{$PHORUM['forum_id']} OR forum_id=0) and";

    $sql = "select {$PHORUM['message_table']}.* from
{$PHORUM['message_table']} where $forum_id_check

    $res = mysql_query($sql, $conn);

    if ($err = mysql_error())
phorum_db_mysql_error("$err: $sql");

---------------[/original code ]---------------------

And we can see problematic sql query: "...
$forum_id_check message_id=$message_id";
No quotes, so sql injection must be exist. Let's try
to provoke some error messages.
We issue GET request like this:


... and there is nice error popping up:

"Unknown column 'waraxe' in 'where clause': select
phorum_messages.* from phorum_messages where
 (forum_id = 1 OR forum_id=0) and message_id=waraxe"
Same error message appears with using another method:


Further exploiting depends on mysql server version. If
it's 4.x and supports
UNION functionality, then arbitrary information from
database can be retrieved by any
currently logged in user, including unprivileged one.
Proof of concept:

----------------[ real life exploit ]---------------


----------------[/real life exploit ]---------------

... and you can see admin's uername and password's md5

How to fix:
Vendor contacted: 10. November 2004
Vendor response: 10. November 2004

New Phorum version 5.0.13 is available at
and has many security improvements, including fix
against this sql injection bug.

For discussion, help requests, etc -

See ya there!


Greets to Raido Kerna, icenix and slimjim100!
Tervitused - Heintz ja Maku!


    come2waraxe () yahoo com
    Janek Vind "waraxe"

    Homepage: http://www.waraxe.us/

---------------------------------- [ EOF ]

Do you Yahoo!? 
Check out the new Yahoo! Front Page. 

Full-Disclosure - We believe in it.
Charter: http://lists.netsys.com/full-disclosure-charter.html

  By Date           By Thread  

Current thread:
  • [waraxe-2004-SA#037 - Sql injection bug in Phorum 5.0.12 and older versions] Janek Vind (Nov 11)
[ Nmap | Sec Tools | Mailing Lists | Site News | About/Contact | Advertising | Privacy ]