HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Песочница
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 13.09.2010, 20:15
Y-E-S
Новичок
Регистрация: 12.08.2009
Сообщений: 0
Провел на форуме:
30996

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

Доброго времени суток!

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

Опишем суть проблемы.

Имеется некоторый PHP файл index.php, который потенциально уязвим. Начнем с простого

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]

[/
COLOR][/COLOR
Если в настройках указано register_globals = on, то переменная $bar открывает пасивную XSS уязвимость.

Это можно определить просто передав в нее некотрую последовательность символов,

таких как '"<> которые являются спец символами языка HTML и должны быть экранированны.

Таким образом изначальный код приведем к такому виду

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"] @@@'[/COLOR][COLOR="#007700"];

[/COLOR][COLOR="#0000BB"]$bar[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'
@@@ name=bar template=\'"<> @@@'[/COLOR][COLOR="#007700"];

[/
COLOR][COLOR="#0000BB"]$bar[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$foo[/COLOR][COLOR="#007700"];

echo[/COLOR][COLOR="#DD0000"]"Test variable:"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$bar[/COLOR][COLOR="#007700"];

[/COLOR][COLOR="#0000BB"]?>[/COLOR][/COLOR] 
Мы выполнили поиск всех переменных и вставили их в начало скрипта.

Переменные все инициализированны текстовой строкой которая содержет в себе:

1. название самой переменной

2. и список уязвимых символов.

Результатом выполнения скрипта будет вывод:

Код:
Code:
Test variable: @@@ name=foo template='"<> @@@
Отстается выполнить парсинг вывода, его можно сделать например так:

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#FF8000"]// Предполагается, что $dump содержит

// текстовый вывод работы предыдущего скрипта

[/COLOR][COLOR="#0000BB"]preg_match_all[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'/@@@(.*?)@@@/s'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$dump[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$matches[/COLOR][COLOR="#007700"]);

for([/
COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#007700"]'[/COLOR][COLOR="#007700"]{

[/COLOR][COLOR="#FF8000"]// Если вывод переменной равен изначальному шаблону, то найдена уязвимость

[/COLOR][COLOR="#007700"]echo[/COLOR][COLOR="#0000BB"]$attrs[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'
name'[/COLOR][COLOR="#007700"]] .[/COLOR][COLOR="#DD0000"]'
'[/COLOR][COLOR="#007700"];

}

}



[/COLOR][/COLOR] 
В результате автоматически найдена пасивная уязвимость, которая заключается в передаче переменной $foo любого вредоносного кода:

Код:
Code:
index.php?foo=alert('Hello from hole')
Возможна ситуация, что экранируется часть символов, например \'\"<>

тогда подобное сравнение не будет подходить и нужно сравнивать посимвольно.

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

а не идти по одной из веток if else операторов. О том как раскрывать циклы...

Пару дней назад нашей командой был открыт сервис поиска уязвимостей /thread229263.html
 
Ответить с цитированием
 





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


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




ANTICHAT.XYZ