Y-E-S
13.09.2010, 20:15
Доброго времени суток!
Это первая статья из трех частей, которая посвящена базовым принцыпам автоматического поиска XSS уязвимостей в PHP коде.
Опишем суть проблемы.
Имеется некоторый PHP файл index.php, который потенциально уязвим. Начнем с простого
PHP:
Если в настройках указано register_globals = on, то переменная $bar открывает пасивную XSS уязвимость.
Это можно определить просто передав в нее некотрую последовательность символов,
таких как '"<> которые являются спец символами языка HTML и должны быть экранированны.
Таким образом изначальный код приведем к такому виду
PHP:
@@@';
$bar='@@@ name=bar template=\'"<> @@@';
$bar=$foo;
echo"Test variable:".$bar;
?>
Мы выполнили поиск всех переменных и вставили их в начало скрипта.
Переменные все инициализированны текстовой строкой которая содержет в себе:
1. название самой переменной
2. и список уязвимых символов.
Результатом выполнения скрипта будет вывод:
Code:
Test variable: @@@ name=foo template='"<> @@@
Отстается выполнить парсинг вывода, его можно сделать например так:
PHP:
// Предполагается, что $dump с одержит
// текстовый вывод работы п редыдущего скрипта
preg_match_all('/@@@(.*?)@@@/s',$dump,$matches);
for($i=0;$i'{
// Если вывод переменной ра вен изначальному шаблону, то найдена уязвимость
echo$attrs['name'] .'
';
}
}
В результате автоматически найдена пасивная уязвимость, которая заключается в передаче переменной $foo любого вредоносного кода:
Code:
index.php?foo=alert('Hello from hole')
Возможна ситуация, что экранируется часть символов, например \'\"<>
тогда подобное сравнение не будет подходить и нужно сравнивать посимвольно.
На этом пока всё, следующие статьи посвещу тому как можно обходить все ветвления программы,
а не идти по одной из веток if else операторов. О том как раскрывать циклы...
Пару дней назад нашей командой был открыт сервис поиска уязвимостей /thread229263.html (https://antichat.live/threads/229263/)
Это первая статья из трех частей, которая посвящена базовым принцыпам автоматического поиска XSS уязвимостей в PHP коде.
Опишем суть проблемы.
Имеется некоторый PHP файл index.php, который потенциально уязвим. Начнем с простого
PHP:
Если в настройках указано register_globals = on, то переменная $bar открывает пасивную XSS уязвимость.
Это можно определить просто передав в нее некотрую последовательность символов,
таких как '"<> которые являются спец символами языка HTML и должны быть экранированны.
Таким образом изначальный код приведем к такому виду
PHP:
@@@';
$bar='@@@ name=bar template=\'"<> @@@';
$bar=$foo;
echo"Test variable:".$bar;
?>
Мы выполнили поиск всех переменных и вставили их в начало скрипта.
Переменные все инициализированны текстовой строкой которая содержет в себе:
1. название самой переменной
2. и список уязвимых символов.
Результатом выполнения скрипта будет вывод:
Code:
Test variable: @@@ name=foo template='"<> @@@
Отстается выполнить парсинг вывода, его можно сделать например так:
PHP:
// Предполагается, что $dump с одержит
// текстовый вывод работы п редыдущего скрипта
preg_match_all('/@@@(.*?)@@@/s',$dump,$matches);
for($i=0;$i'{
// Если вывод переменной ра вен изначальному шаблону, то найдена уязвимость
echo$attrs['name'] .'
';
}
}
В результате автоматически найдена пасивная уязвимость, которая заключается в передаче переменной $foo любого вредоносного кода:
Code:
index.php?foo=alert('Hello from hole')
Возможна ситуация, что экранируется часть символов, например \'\"<>
тогда подобное сравнение не будет подходить и нужно сравнивать посимвольно.
На этом пока всё, следующие статьи посвещу тому как можно обходить все ветвления программы,
а не идти по одной из веток if else операторов. О том как раскрывать циклы...
Пару дней назад нашей командой был открыт сервис поиска уязвимостей /thread229263.html (https://antichat.live/threads/229263/)