Перейти к контенту
  • 0

IP.Board, все версии <= 3.0.4: SQL Injection & PHP Inclusion


Ritsuka

Вопрос

Из-за ошибки в /admin/applications/forums/sources/classes/moderate.php пользователи с правами модератора могут выполнить SQL Injection.

 

Патча для 3.0.4 от IPS не будет - исправление включат в состав 3.0.5, выходящей на этой неделе. Думаю, IBR имеет смысл либо выпустить свой патч, либо в этот раз значительно поторопиться с выпуском переведенной версии.

 

А до тех пор совет всем - снять модератора со всех сомнительных персон.

 

Так же обнаружена проблема с возможностью local php file inclusion в другом месте. Эту проблему в IPS назвали "совершенно не опасной".

 

http://community.invisionpower.com/topic/2...ished-exploits/

http://www.securityfocus.com/bid/37208/info

http://seclists.org/bugtraq/2009/Dec/46

 

 

Эксплоиты:

 

1) Включение посторонних PHP-файлов:

http://www.example.com/forum/index.php?app=core&module=global&section=register&any=?section
=../../../../../../../../../../../../../../../../../../../../../../../../../../home/www/some/terrible/php/script/form/same/server.php

 

2) Выполнение произвольных запросов:

http://www.example.com/forum/?app=forums&module=moderate&section=moderate&f=1&do=prune_move&df=3&pergo=50&dateline=0&state=open&ignore_pin=1&max=0&starter=1%20[ваш код здесь =Ъ]

 

Вот так.

Изменено пользователем Ritsuka
Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0

по 2 в 2.1.6:

хотя в ./sources/lib/func_mod.php есть

		if ( intval($starter_id) )
	{
		$sql .= " AND starter_id=$starter_id";

	}

хорошо бы сделать

		if ( intval($starter_id) )
	{
		$sql .= " AND starter_id=".intval($starter_id);

	}

и также поступить со всеми проверками в функции sql_prune_create

 

в 3.0.х это находится в

./admin/applications/forums/sources/classes/moderate.php

public function sqlPruneCreate

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Arhar, вот вам хорошо и спокойно на вашей 2.1.6 :D Весь код знаете уже как на ладони ;)

 

Мммм.... А еще вот владельцам shared-хостинга стоит напрячься. Что стоит вашему соседу записать файл /tmp/fuck.php и набрать адрес?

http://www.example.com/forum/index.php?app=core&module=global&section=register&any=?section
=../../../../../../../../../../../../../../../../../../../../../../../../../../tmp/fuck.php

 

Это европейцам и американцам хорошо, у них все на VSP и дедиках сидят, а вот для россиян баг с include в основной массе критичен.

 

Вот тут подробно на английском расписана и атака, и кому это опасно, и даже приведены патчи: http://www.securityfocus.com/archive/1/508207

 

IPB 3.0.4 patch:

 

diff -Nprub ipb304/admin/applications/forums/sources/classes/
moderate.php ipb304-patched/admin/applications/forums/sources/classes/
moderate.php
--- ipb304/admin/applications/forums/sources/classes/moderate.php
2009-10-08 16:34:50.000000000 +0100
+++ ipb304-patched/admin/applications/forums/sources/classes/
moderate.php 2009-11-29 01:01:49.000000000 +0000
@@ -1829,18 +1829,18 @@ class moderatorLibrary

if ( intval($date_exp) )
{
- $sql .= " AND last_post < {$date_exp}";
+ $sql .= " AND last_post < ". intval($date_exp);
}

if ( intval($starter_id) )
{
- $sql .= " AND starter_id={$starter_id}";
+ $sql .= " AND starter_id=". intval($starter_id);

}

if ( intval($post_min) )
{
- $sql .= " AND posts < {$post_min}";
+ $sql .= " AND posts < ". intval($post_min);
}

if ($topic_state != 'all')
diff -Nprub ipb304/admin/sources/base/ipsRegistry.php ipb304-patched/
admin/sources/base/ipsRegistry.php
--- ipb304/admin/sources/base/ipsRegistry.php 2009-10-08
16:34:24.000000000 +0100
+++ ipb304-patched/admin/sources/base/ipsRegistry.php 2009-11-29
00:57:13.000000000 +0000
@@ -479,6 +479,9 @@ class ipsRegistry

/* First pass of app set up. Needs to be BEFORE caches and member
are set up */
self::_fUrlInit();
+ IPSLib::cleanGlobals( $_GET );
+ IPSLib::cleanGlobals( $_REQUEST );
+ IPSLib::cleanGlobals( self::$request );

self::_manageIncomingURLs();

 

IPB 2.3.6 patch:

diff -Nprub ipb236/sources/lib/func_mod.php ipb236-patched/sources/lib/
func_mod.php
--- ipb236/sources/lib/func_mod.php 2009-11-29 01:10:13.000000000 +0000
+++ ipb236-patched/sources/lib/func_mod.php 2009-11-29
01:19:23.000000000 +0000
@@ -1219,18 +1219,18 @@ class func_mod

if ( intval($date_exp) )
{
- $sql .= " AND last_post < $date_exp";
+ $sql .= " AND last_post < ". intval($date_exp);
}

if ( intval($starter_id) )
{
- $sql .= " AND starter_id=$starter_id";
+ $sql .= " AND starter_id=". intval($starter_id);

}

if ( intval($post_min) )
{
- $sql .= " AND posts < $post_min";
+ $sql .= " AND posts < ". intval($post_min);
}

if ($topic_state != 'all')

Изменено пользователем Ritsuka
Ссылка на комментарий
Поделиться на других сайтах

  • 0

А ошибка действительно нубская какая-то... Кто не знает, что intval("1 and kill yourself") == intval("1")? Гениальность проверки поражает....

 

А в _fUrlInit() вообще тупо забыли вставить очистку переменных.... :D

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Собственно у IPS всегда такие ошибки и были.

 

SQL инъекция кстати не так и страшно, а вот Code Injection это плохо, очень плохо...

 

Исправление для 3.0.4

В файле ./admin/applications/forums/sources/classes/moderate.php

Найти

		if ( intval($date_exp) )
	{
		$sql .= " AND last_post < {$date_exp}";
	}

	if ( intval($starter_id) )
	{
		$sql .= " AND starter_id={$starter_id}";

	}

	if ( intval($post_min) )
	{
		$sql .= " AND posts < {$post_min}";
	}

 

Заменить на

		if ( intval($date_exp) )
	{
		$sql .= " AND last_post < ". intval($date_exp);
	}

	if ( intval($starter_id) )
	{
		$sql .= " AND starter_id=". intval($starter_id);

	}

	if ( intval($post_min) )
	{
		$sql .= " AND posts < ". intval($post_min);
	}

 

В файле /admin/sources/base/ipsRegistry.php

 

Найти

		/* First pass of app set up. Needs to be BEFORE caches and member are set up */
	self::_fUrlInit();

 

Заменить

		/* First pass of app set up. Needs to be BEFORE caches and member are set up */
	self::_fUrlInit();

	IPSLib::cleanGlobals( $_GET );
	IPSLib::cleanGlobals( $_REQUEST );
	IPSLib::cleanGlobals( self::$request );

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.