Авторская статья Как проверять плагины/скрипты к сайтам на уязвимости. Для новичков первичная проверка. А также найденная XSS в Siropu Chat для Xenforo

X-Shar

RAID-массив
Пользователь
Регистрация
17.05.2020
Сообщения
88
Реакции
111
Баллы
42
Всем привет.

В данной статье расскажу, как можно проверить плагины к сайтам, таким как Wordpress, XenForo и т.д.
Данная статья родилась, когда я решил проверить установленные плагины для XenForo на уязвимости XSS и SQL inject и к удивлению нашел парочку недочетов.

Тем не менее статья не будет написана к конкретному движку, а советы как проверить, будут универсальными и будет приведен пример XSS уязвимости в чате XenForo.

Итак изначально небольшая теория, какие могут-быть атаки на ваш сайт и зачем:

1)XSS
(англ. Cross Site Scripting — «межсайтовый скриптинг») — Смысл данной атаки в исполнении кода на стороне жертвы.

Атака заключается в исполнении кода на стороне браузера, смысл такой, если сайт позволяет вставлять сообщения пользователям, например регистрация пользователей, вставка сообщений и т.д.
То если эти сообщения не будут фильтроваться, можно подготовить специальный HTML – код, который выполнится на стороне жертвы, вплоть до замены сайта нужным вам содержимым (дефейс)…)))

XSS я разделяю на два типа:

1 - Пассивные XSS
– Для атаки нужно подготовить ссылку и дать эту ссылку жертве, после перехода по ней, будет исполнение нужного кода.
Пример: http://example.com/search.php?q=<script>alert("I am XSS")</script>

Если сайт уязвим, то при переходе, будет такое окошко:
1590924657070.png
2 - Активный XSS (Пример этой уязвимости мы разберем, на боевом моем сайте):

Ну для активной XSS не нужно готовить никакой ссылки, вредоносный код будет исполняться на стороне пользователя автоматически, достаточно лишь подготовить специальный HTML код и вставить его в форму ввода, помню по молодости дефейсили так сайты и форумы.)))
Очень опасная уязвимость, так-как таким образом можно полностью подменить сайт, или его части, например форму ввода кредитных карт, помню именно так кардеры воруют данные кредиток у уязвимых магазинах.)

2) CSRF (англ. Сross Site Request Forgery — «Межсайтовая подделка запроса», также известен как XSRF).
Смысл заключается в том, что бы от имени пользователя совершать какие-либо действия...

Например, если здесь на форуме будет найдена XSS, можно через эту XSS от имени жертвы создавать темы, переписки и т.д.

Ещё пример:

Пользователь Алиса может просматривать форум, где другой пользователь, Мэллори, разместил сообщение.
Код:
Мэллори: Привет, Алиса! Посмотри, какой милый котик: <img src="http://bank.example.com/withdraw?account=Alice&amount=1000000&for=Mallory">
Пусть Мэллори создал тег <img>, в котором в качестве источника картинки указан URL, при переходе по которому выполняется действие на уязвимом сайте банка.
Если банк Алисы хранит ее информацию об аутентификации в куки и если куки еще не истекли, при попытке загрузить картинку браузер Алисы отправит запрос на перевод денег на счет Мэллори и подтвердит аутентификацию при помощи куки.

Таким образом, транзакция будет успешно завершена, хотя ее подтверждение произойдет без ведома Алисы.

3)Sql inject
- Это выполнение произвольного запроса SQL, например через форму ввода, или через специальную подготовленную ссылку.

Проверяется кстати очень легко, достаточно в форму ввода, или в GET/POST запрос вставить управляющий символ «'», если параметры запроса например в mysql_query; передаются не экранированные, или не как параметры, то будет исполнение кода.

В случае передачи «'» будет ошибка SQL, а это значить что мы можем исполнить SQL.)
И выкачать базу например.)

4)Php inject – Это исполнение произвольного PHP кода, при вставке специального кода в форму ввода, или при формировании GET/POST запроса.

Часто такие уязвимости делают специально, на памяти есть уязвимость в плагинах от Esthetic для XenForo, где автор специально встроил бекдор и можно-было исполнять произвольный код на сайте, вот полный разбор (Не реклама): https://ru-sfera.org/threads/lomaem-xenforo-cherez-addony-ot-esthetic.2438/

В качестве примера, вот еще хитрая атака: https://ru-sfera.org/resources/vzlom-pri-pomoschi-roskomnadzora.39/

5)Сбор статистики о ваших пользователях - Это не совсем уязвимость, но может-быть для кого-то неприятно.
Это всевозможные снифферы, которые посетители могут вставить в качестве картинки, например картинка загружается со сервера сниффера, вы заходите на форум и если картинка автоматически не скачивается на сервер форума, то сниффер уже будет иметь статистику о айпи адресах пользователей, браузерах и т.д.

Также можно парсить посетителей, по полю "Пользователи онлайн", например запостить ссылку на форуме, при переходе парсить поле "Посетители онлайн" и если пользователь там есть, мы также получим айпи, браузера и время прочтения, а также никнейм.)))

Ну это не уязвимость, защитится можно например отключением видимости активности в настройках приватности. Для защиты от сниферов, закачивать автоматически картинки на форум.)

Практическая часть:

Да знаю, тут не любят теорию, но что-то без теории у меня не получается.))

Практическая часть будет состоять из двух частей:

1.Как найти представленные выше уязвимости.
2.Разбор примера поиска.

Часть первая.Поиск уязвимостей и закладок в плагинах/скриптах.

1.Ну во первых я просматриваю код, так мельком и смотрю как передаются данные в функции запроса к базе данных.

Они должны передаваться как параметры, либо экранироваться, вот функции экранирования:
  • mysql_escape_string — экранирует строку для использования в mysql_query;
  • addslashes — экранирует спецсимволы в строке;
  • htmlspecialchars — преобразует специальные символы в HTML сущности;
  • mysql_real_escape_string — экранирует специальные символы в unescaped_string;
  • intval — функция приведения типа.
2.Просматриваю код на опасные функции PHP, ищу их в поиске:
Код:
eval;
assert;
preg_replace;
create_function;
include;
include_once;
require;
require_once
ob_start
array_diff_uassoc
array_diff_ukey
array_filter
array_intersect_uassoc
array_intersect_ukey
array_map
array_reduce
array_udiff_assoc
array_udiff_uassoc
array_udiff
array_uintersect_assoc
array_uintersect_uassoc
array_uintersect
array_walk_recursive
array_walk
assert_options
uasort
uksort
usort
preg_replace_callback
spl_autoload_register
iterator_apply
call_user_func
call_user_func_array
register_shutdown_function
register_tick_function
set_error_handler
set_exception_handler
session_set_save_handler
sqlite_create_aggregate
sqlite_create_function
Далее нужно проанализировать, на сколько безопасен этот вызов в контексте программы.

3.Если в коде присутствуют какие-то зашифрованные части, сто раз нужно подумать, устанавливать-ли.)

4.Проверяю отправляет-ли скрипт какие-то данные на сторонние ресурсы, это можно узнать при помощи поиска «http» и «https».

5.Проверяю формы ввода, вставляю следующий код:

«'»

<script>alert("I am XSS")</script>

Если сайт уязвим, то будет ошибка сервера SQL или сообщение «I am XSS» соответственно…)

6.Также не нужно забывать подписываться на обновления скриптов, часто авторы фиксят свои продукты, а хакеры не ищут уязвимости, а используют уже известные…)
В принципе для первичного анализа этого хватит и какими-то супер знаниями в области не нужно обладать, очень рекомендую не ленится, а анализировать так скрипты.

Еще не забывайте читать отзывы о скриптах и авторах, также может защитить от уязвимостей.)))

Часть вторая. XSS в чате от Siropu для XenForo.

Тут ничего сложно, у себя на сайте решил проверить, все-бы хорошо, но в чате есть опция обновления статуса посетителя.
Смысл этой опции, что посетители могут создать в чате свой статус, например «Я занят» или «Всем Привет», который будет отображаться на главной странице, как оказалось если в это поле вставить <script>alert("I am XSS")</script> то получится такая шляпа:

1590925012441.png

1590925027406.png

1590925039896.png




Т.к. чат на моем сайте на главной странице, то получили еще и активную XSS, которая будет выполняться при переходе на главную страницу.)))

Защита, это отключить обновление статусов в чате, но я его вообще снес.
Т.к. береженного кастет бережет !)))

Также при такой проверки получил еще и ошибку SQL, при форме ввода в плагине поиска по перепискам от Andy, но не разбирал уязвимость-ли это, некогда, а просто снес также плагин.)))

Выводы:

Да это первичный осмотр, но уже он может помочь найти уязвимости, причем сделать такой осмотр может любой администратор и даже не разработчик кода.
Да только этого осмотра может и нехватить, но тем не менее очень рекомендую проверять так свои скрипты.)))
 
Последнее редактирование:

RedBear

RAID-массив
Пользователь
Регистрация
12.05.2019
Сообщения
70
Реакции
348
Баллы
66
Telegram
Jabber
XSS активные/пассивные спутали с отраженными и хранимыми.
активная - это когда от пользователя не нужно никаких действий, xss сходу отрабатывает.
а пассивная - это когда, например, xss отрабатывает по какому-то событию (onmouseover, например)

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

X-Shar

RAID-массив
Пользователь
Регистрация
17.05.2020
Сообщения
88
Реакции
111
Баллы
42
вообще на тему поиска уязвимостей в плагинах много что мог бы написать, да не думаю, что кому либо будет интересно.
Мне-бы интересно было, у кого свои сайты тем интересно будет также.)
 

seidziwhitehat

CD-диск
Пользователь
Регистрация
17.01.2020
Сообщения
14
Реакции
3
Баллы
3
XSS активные/пассивные спутали с отраженными и хранимыми.
активная - это когда от пользователя не нужно никаких действий, xss сходу отрабатывает.
а пассивная - это когда, например, xss отрабатывает по какому-то событию (onmouseover, например)

вообще на тему поиска уязвимостей в плагинах много что мог бы написать, да не думаю, что кому либо будет интересно.
Ага, значит в 15 годах ты этим даже с Одептами делиться не хотел, а щас готов на весь форум? ;) ах ты старый.
Очень бы хотелось почитать про анализ сорцов именно от тебя
 

Eject

(L2) cache
Пользователь
Регистрация
31.01.2019
Сообщения
330
Реакции
208
Баллы
41
Jabber
Можно было абзац про тулзы добавить.

Недавно у Twost с ачата был стирм по поводу анализа php исходников.
 

RedBear

RAID-массив
Пользователь
Регистрация
12.05.2019
Сообщения
70
Реакции
348
Баллы
66
Telegram
Jabber
Ага, значит в 15 годах ты этим даже с Одептами делиться не хотел, а щас готов на весь форум? ;) ах ты старый.
Очень бы хотелось почитать про анализ сорцов именно от тебя
Я понял, что ничего толком не знаю, потому и статьи прекратились.
Про анализ сорцев напишу.
 

X-Shar

RAID-массив
Пользователь
Регистрация
17.05.2020
Сообщения
88
Реакции
111
Баллы
42
Может в дополнение статьи:https://krober.biz/?p=3667

RedBear, классно получается писать статьи, особенно нравится всякие разбавления типо "XSS - Это гроб кладбище пидор" .

У меня проблема с памятью, а тут один раз прочитал и запомнил термин, теперь я не буду путать активные/пассивные XSS с хранимыми/отраженными.

Хорошая статья, вообще думаю такие люди и должны писать статьи для конкурса, к сожалению у меня не получается так круто, но может когда-нить научусь.)))
 

RedBear

RAID-массив
Пользователь
Регистрация
12.05.2019
Сообщения
70
Реакции
348
Баллы
66
Telegram
Jabber
«Я знаю, что ничего не знаю» (с) Сократ ( а может и Демокрит , если верить Вике )
Подразумевалась игра слов "кроба - сокраб".
Смысла поправлять не было.

А так, откуда нам знать, что так говорил Сократ? Это Платон написал, что так говорил Сократ.
А что касается Демокрита, то сомневаюсь, что это могли быть его слова. Фраза слабо кореллирует с его достаточно смелыми (более того, умозрительными!) утверждениями относительно строения материи. Скорее чья-то ошибка.
 

kasual63

RAID-массив
Пользователь
Регистрация
11.05.2020
Сообщения
90
Реакции
43
Баллы
23
А так, откуда нам знать, что так говорил Сократ? Это Платон написал, что так говорил Сократ.
Ну Сократ то писать не умел,других вариантов откуда нам брать информацию(кроме как от Платона)у нас нет.
Так что приходится доверять.Да и важно ли был ли это сам Сократ?
ps Предлагаю открыть на форуме ветку по философии
 

FrankWorren

floppy-диск
Пользователь
Регистрация
27.06.2020
Сообщения
6
Реакции
0
Баллы
1
XSS активные/пассивные спутали с отраженными и хранимыми.
активная - это когда от пользователя не нужно никаких действий, xss сходу отрабатывает.
а пассивная - это когда, например, xss отрабатывает по какому-то событию (onmouseover, например)

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